i3lock-color

The world's most popular non-default computer lockscreen.
Index Commits Files Refs README LICENSE
commit 12016c01c43f69c55675628e22b2f095769df33c
parent 98b3b0b753b37d9ac9ece1c53d27904f0c8964bc
Author: Chris Guillott <chris@techfo.xyz>
Date:   Tue, 10 Oct 2017 08:05:25 -0400

Merge pull request #40 from gunslingerfry/ring-width

Added a ring width to customize the width of the ring
Diffstat:
MREADME.md | 1+
Mi3lock.c | 15+++++++++++++++
Munlock_indicator.c | 10++++++----
3 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
@@ -57,6 +57,7 @@ Many little improvements have been made to i3lock over time:
          - `--textsize=28` -- font size for the status text
          - `--modsize=14` -- font size for the modifier keys listing
          - `--radius=90` -- the radius of the circle indicator
+         - `--ring-width=7` -- the width of the indicator ring
 
 - You can specify whether i3lock should bell upon a wrong password.
 
diff --git a/i3lock.c b/i3lock.c
@@ -104,6 +104,7 @@ double date_size = 14.0;
 double text_size = 28.0;
 double modifier_size = 14.0;
 double circle_radius = 90.0;
+double ring_width = 7.0;
 
 char* verif_text = "verifying…";
 char* wrong_text = "wrong!";
@@ -947,6 +948,7 @@ int main(int argc, char *argv[]) {
         {"textsize", required_argument, NULL, 0},
         {"modsize", required_argument, NULL, 0},
         {"radius", required_argument, NULL, 0},
+        {"ring-width", required_argument, NULL, 0},
 
         {NULL, no_argument, NULL, 0}};
 
@@ -1289,6 +1291,19 @@ int main(int argc, char *argv[]) {
                         circle_radius = 90.0;
                     }
                 }
+                else if (strcmp(longopts[longoptind].name, "ring-width") == 0) {
+                    char *arg = optarg;
+                    double new_width = 0;
+                    if (sscanf(arg, "%lf", &new_width) != 1)
+                        errx(1, "ring-width must be a number\n");
+                    if (new_width < 1) {
+                        fprintf(stderr, "ring-width must be a positive integer; ignoring...\n");
+                    }
+                    else {
+                        ring_width = new_width;
+                    }
+                }
+
                 break;
             case 'f':
                 show_failed_attempts = true;
diff --git a/unlock_indicator.c b/unlock_indicator.c
@@ -26,10 +26,12 @@
 #include <time.h>
 
 extern double circle_radius;
+extern double ring_width;
 
 #define BUTTON_RADIUS (circle_radius)
-#define BUTTON_SPACE (BUTTON_RADIUS + 5)
-#define BUTTON_CENTER (BUTTON_RADIUS + 5)
+#define RING_WIDTH (ring_width)
+#define BUTTON_SPACE (BUTTON_RADIUS + (RING_WIDTH / 2))
+#define BUTTON_CENTER (BUTTON_RADIUS + (RING_WIDTH / 2))
 #define BUTTON_DIAMETER (2 * BUTTON_SPACE)
 #define CLOCK_WIDTH 400
 #define CLOCK_HEIGHT 200
@@ -324,7 +326,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
         (unlock_state >= STATE_KEY_PRESSED || auth_state > STATE_AUTH_IDLE || show_indicator)) {
         cairo_scale(ctx, scaling_factor(), scaling_factor());
         /* Draw a (centered) circle with transparent background. */
-        cairo_set_line_width(ctx, 7.0);
+        cairo_set_line_width(ctx, RING_WIDTH);
         cairo_arc(ctx,
                   BUTTON_CENTER /* x */,
                   BUTTON_CENTER /* y */,
@@ -465,7 +467,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
          * keypress. */
         if (unlock_state == STATE_KEY_ACTIVE ||
             unlock_state == STATE_BACKSPACE_ACTIVE) {
-            cairo_set_line_width(ctx, 7.0);
+            cairo_set_line_width(ctx, RING_WIDTH);
             cairo_new_sub_path(ctx);
             double highlight_start = (rand() % (int)(2 * M_PI * 100)) / 100.0;
             cairo_arc(ctx,