i3lock-color

The world's most popular non-default computer lockscreen.
Index Commits Files Refs README LICENSE
commit cf522a301f9a36eb9fe689755e93e0624e8aefca
parent 986608a1fb48e1e4b3fe8bce9352faab60a3a438
Author: Chris Guillott <chris@techfo.xyz>
Date:   Tue,  9 Feb 2016 08:52:59 -0500

add a couple options for drawing the line color

Diffstat:
Mi3lock.c | 46+++++++++++++++++++++++++++++++---------------
Munlock_indicator.c | 39++++++++++++++++++++++++++++++++++++++-
2 files changed, 69 insertions(+), 16 deletions(-)
diff --git a/i3lock.c b/i3lock.c
@@ -57,6 +57,8 @@ char linecolor[9] = "000000ff";
 char textcolor[9] = "000000ff";
 char keyhlcolor[9] = "33db00ff";
 char bshlcolor[9] = "db3300ff";
+/* default is to use the supplied line color, 1 will be ring color, 2 will be to use the inside color for ver/wrong/etc */
+int internal_line_source = 0;
 
 int inactivity_timeout = 30;
 uint32_t last_resolution[2];
@@ -772,17 +774,19 @@ int main(int argc, char *argv[]) {
 
         /* options for unlock indicator colors */
         // defining a lot of different chars here for the options -- TODO find a nicer way for this, maybe not offering single character options at all
-        {"insidevercolor", required_argument, NULL, 0},
-        {"insidewrongcolor", required_argument, NULL, 0},
-        {"insidecolor", required_argument, NULL, 0},
-        {"ringvercolor", required_argument, NULL, 0},
-        {"ringwrongcolor", required_argument, NULL, 0},
-        {"ringcolor", required_argument, NULL, 0},
-        {"linecolor", required_argument, NULL, 0},
-        {"textcolor", required_argument, NULL, 0},
-        {"keyhlcolor", required_argument, NULL, 0},
-        {"bshlcolor", required_argument, NULL, 0},
-
+        {"insidevercolor", required_argument, NULL, 0},   // --i-v
+        {"insidewrongcolor", required_argument, NULL, 0}, // --i-w
+        {"insidecolor", required_argument, NULL, 0},      // --i-c
+        {"ringvercolor", required_argument, NULL, 0},     // --r-v
+        {"ringwrongcolor", required_argument, NULL, 0},   // --r-w
+        {"ringcolor", required_argument, NULL, 0},        // --r-c
+        {"linecolor", required_argument, NULL, 0},        // --l-c
+        {"textcolor", required_argument, NULL, 0},        // --t-c
+        {"keyhlcolor", required_argument, NULL, 0},       // --k-c
+        {"bshlcolor", required_argument, NULL, 0},        // --b-c
+        {"line-uses-ring", no_argument, NULL, 'r'},
+        {"line-uses-inside", no_argument, NULL, 's'},
+        /* s for in_s_ide; ideally I'd use -I but that's used for timeout, which should use -T, but compatibility argh */
         {"ignore-empty-password", no_argument, NULL, 'e'},
         {"inactivity-timeout", required_argument, NULL, 'I'},
         {"show-failed-attempts", no_argument, NULL, 'f'},
@@ -793,7 +797,7 @@ int main(int argc, char *argv[]) {
     if ((username = pw->pw_name) == NULL)
         errx(EXIT_FAILURE, "pw->pw_name is NULL.\n");
 
-    char *optstring = "hvnbdc:p:ui:teI:f";
+    char *optstring = "hvnbdc:p:ui:teI:frs";
     while ((o = getopt_long(argc, argv, optstring, longopts, &optind)) != -1) {
         switch (o) {
             case 'v':
@@ -847,6 +851,18 @@ int main(int argc, char *argv[]) {
             case 'e':
                 ignore_empty_password = true;
                 break;
+            case 'r':
+                if (internal_line_source != 0) {
+                  errx(EXIT_FAILURE, "i3lock-color: Options line-uses-ring and line-uses-inside conflict.");
+                }
+                internal_line_source = 1; //sets the line drawn inside to use the inside color when drawn
+                break;
+            case 's':
+                if (internal_line_source != 0) {
+                  errx(EXIT_FAILURE, "i3lock-color: Options line-uses-ring and line-uses-inside conflict.");
+                }
+                internal_line_source = 2;
+                break;
             case 0:
                 if (strcmp(longopts[optind].name, "debug") == 0)
                     debug_mode = true;
@@ -955,8 +971,8 @@ int main(int argc, char *argv[]) {
                 show_failed_attempts = true;
                 break;
             default:
-                errx(EXIT_FAILURE, "Syntax: i3lock [-v] [-n] [-b] [-d] [-c color] [-u] [-p win|default]"
-                                   " [-i image.png] [-t] [-e] [-I timeout] [-f]");
+                errx(EXIT_FAILURE, "Syntax: i3lock-color [-v] [-n] [-b] [-d] [-c color] [-u] [-p win|default]"
+                                   " [-i image.png] [-t] [-e] [-I timeout] [-f] [-r|s]");
         }
     }
 
@@ -965,7 +981,7 @@ int main(int argc, char *argv[]) {
     srand(time(NULL));
 
     /* Initialize PAM */
-    if ((ret = pam_start("i3lock", username, &conv, &pam_handle)) != PAM_SUCCESS)
+    if ((ret = pam_start("i3lock-color", username, &conv, &pam_handle)) != PAM_SUCCESS)
         errx(EXIT_FAILURE, "PAM: %s", pam_strerror(pam_handle, ret));
 
     if ((ret = pam_set_item(pam_handle, PAM_TTY, getenv("DISPLAY"))) != PAM_SUCCESS)
diff --git a/unlock_indicator.c b/unlock_indicator.c
@@ -66,6 +66,7 @@ extern char linecolor[9];
 extern char textcolor[9];
 extern char keyhlcolor[9];
 extern char bshlcolor[9];
+extern int internal_line_source;
 
 /* Whether the failed attempts should be displayed. */
 extern bool show_failed_attempts;
@@ -250,12 +251,30 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
         switch (pam_state) {
             case STATE_PAM_VERIFY:
                 cairo_set_source_rgba(ctx, (double)insidever16[0]/255, (double)insidever16[1]/255, (double)insidever16[2]/255, (double)insidever16[3]/255);
+                if (internal_line_source == 2) {
+                  line16[0] = insidever16[0];
+                  line16[1] = insidever16[1];
+                  line16[2] = insidever16[2];
+                  line16[3] = insidever16[3];
+                }
                 break;
             case STATE_PAM_WRONG:
                 cairo_set_source_rgba(ctx, (double)insidewrong16[0]/255, (double)insidewrong16[1]/255, (double)insidewrong16[2]/255, (double)insidewrong16[3]/255);
+                if (internal_line_source == 2) {
+                  line16[0] = insidewrong16[0];
+                  line16[1] = insidewrong16[1];
+                  line16[2] = insidewrong16[2];
+                  line16[3] = insidewrong16[3];
+                }
                 break;
             default:
                 cairo_set_source_rgba(ctx, (double)inside16[0]/255, (double)inside16[1]/255, (double)inside16[2]/255, (double)inside16[3]/255);
+                if (internal_line_source == 2) {
+                  line16[0] = inside16[0];
+                  line16[1] = inside16[1];
+                  line16[2] = inside16[2];
+                  line16[3] = inside16[3];
+                }
                 break;
         }
         cairo_fill_preserve(ctx);
@@ -263,12 +282,30 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
         switch (pam_state) {
             case STATE_PAM_VERIFY:
                 cairo_set_source_rgba(ctx, (double)ringver16[0]/255, (double)ringver16[1]/255, (double)ringver16[2]/255, (double)ringver16[3]/255);
+                if (internal_line_source == 1) {
+                  line16[0] = ringver16[0];
+                  line16[1] = ringver16[1];
+                  line16[2] = ringver16[2];
+                  line16[3] = ringver16[3];
+                }
                 break;
             case STATE_PAM_WRONG:
                 cairo_set_source_rgba(ctx, (double)ringwrong16[0]/255, (double)ringwrong16[1]/255, (double)ringwrong16[2]/255, (double)ringwrong16[3]/255);
+                if (internal_line_source == 1) {
+                  line16[0] = ringwrong16[0];
+                  line16[1] = ringwrong16[1];
+                  line16[2] = ringwrong16[2];
+                  line16[3] = ringwrong16[3];
+                }
                 break;
             case STATE_PAM_IDLE:
                 cairo_set_source_rgba(ctx, (double)ring16[0]/255, (double)ring16[1]/255, (double)ring16[2]/255, (double)ring16[3]/255);
+                if (internal_line_source == 1) {
+                  line16[0] = ring16[0];
+                  line16[1] = ring16[1];
+                  line16[2] = ring16[2];
+                  line16[3] = ring16[3];
+                }
                 break;
         }
         cairo_stroke(ctx);
@@ -308,7 +345,7 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
                         snprintf(buf, sizeof(buf), "%d", failed_attempts);
                         text = buf;
                     }
-                    cairo_set_source_rgb(ctx, 1, 0, 0);
+                    cairo_set_source_rgba(ctx, (double)text16[0]/255, (double)text16[1]/255, (double)text16[2]/255, (double)text16[3]/255);
                     cairo_set_font_size(ctx, 32.0);
                 }
                 break;