i3lock-color

The world's most popular non-default computer lockscreen.
Index Commits Files Refs README LICENSE
commit db9e953bde01d4ed17ef72f6c7f2a987ca08a683
parent 27ba87c8e4330fd7b5ff4d5cfa0bbe59a938ead8
Author: Chris Guillott <chris@techfo.xyz>
Date:   Tue,  1 Nov 2016 17:13:09 -0400

really hacky blur + overlayed image support

Diffstat:
Mi3lock.c | 27+++++++++++++--------------
Munlock_indicator.c | 32++++++++++++++++++++------------
2 files changed, 33 insertions(+), 26 deletions(-)
diff --git a/i3lock.c b/i3lock.c
@@ -114,6 +114,7 @@ static uint8_t xkb_base_event;
 static uint8_t xkb_base_error;
 
 cairo_surface_t *img = NULL;
+cairo_surface_t *blur_img = NULL;
 bool tile = false;
 bool ignore_empty_password = false;
 bool skip_repeated_empty_password = false;
@@ -1194,20 +1195,18 @@ int main(int argc, char *argv[]) {
 
     xcb_pixmap_t blur_pixmap;
     if (blur) {
-        if(!img) {
-            xcb_visualtype_t *vistype = get_root_visual_type(screen);
-            blur_pixmap = capture_bg_pixmap(conn, screen, last_resolution);
-            cairo_surface_t *xcb_img = cairo_xcb_surface_create(conn, blur_pixmap, vistype, last_resolution[0], last_resolution[1]);
-
-            img = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, last_resolution[0], last_resolution[1]);
-            cairo_t *ctx = cairo_create(img);
-            cairo_set_source_surface(ctx, xcb_img, 0, 0);
-            cairo_paint(ctx);
-
-            cairo_destroy(ctx);
-            cairo_surface_destroy(xcb_img);
-        }
-        blur_image_surface(img, 10000);
+        xcb_visualtype_t *vistype = get_root_visual_type(screen);
+        blur_pixmap = capture_bg_pixmap(conn, screen, last_resolution);
+        cairo_surface_t *xcb_img = cairo_xcb_surface_create(conn, blur_pixmap, vistype, last_resolution[0], last_resolution[1]);
+
+        blur_img = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, last_resolution[0], last_resolution[1]);
+        cairo_t *ctx = cairo_create(blur_img);
+        cairo_set_source_surface(ctx, xcb_img, 0, 0);
+        cairo_paint(ctx);
+
+        cairo_destroy(ctx);
+        cairo_surface_destroy(xcb_img);
+        blur_image_surface(blur_img, 10000);
     }
 
     /* Pixmap on which the image is rendered to (if any) */
diff --git a/unlock_indicator.c b/unlock_indicator.c
@@ -53,6 +53,7 @@ extern char *modifier_string;
 
 /* A Cairo surface containing the specified image (-i), if any. */
 extern cairo_surface_t *img;
+extern cairo_surface_t *blur_img;
 
 /* Whether the image should be tiled. */
 extern bool tile;
@@ -138,19 +139,26 @@ xcb_pixmap_t draw_image(uint32_t *resolution) {
     cairo_surface_t *xcb_output = cairo_xcb_surface_create(conn, bg_pixmap, vistype, resolution[0], resolution[1]);
     cairo_t *xcb_ctx = cairo_create(xcb_output);
 
-    if (img) {
-        if (!tile) {
-            cairo_set_source_surface(xcb_ctx, img, 0, 0);
+    if (img || blur_img) {
+        if (blur_img) {
+            cairo_set_source_surface(xcb_ctx, blur_img, 0, 0);
             cairo_paint(xcb_ctx);
-        } else {
-            /* create a pattern and fill a rectangle as big as the screen */
-            cairo_pattern_t *pattern;
-            pattern = cairo_pattern_create_for_surface(img);
-            cairo_set_source(xcb_ctx, pattern);
-            cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
-            cairo_rectangle(xcb_ctx, 0, 0, resolution[0], resolution[1]);
-            cairo_fill(xcb_ctx);
-            cairo_pattern_destroy(pattern);
+        }
+        if (img) {
+            if (!tile) {
+                cairo_set_source_surface(xcb_ctx, img, 0, 0);
+                cairo_paint(xcb_ctx);
+            } else {
+                /* create a pattern and fill a rectangle as big as the screen */
+                cairo_pattern_t *pattern;
+                pattern = cairo_pattern_create_for_surface(img);
+                cairo_set_source(xcb_ctx, pattern);
+                cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
+                cairo_rectangle(xcb_ctx, 0, 0, resolution[0], resolution[1]);
+                cairo_fill(xcb_ctx);
+                cairo_pattern_destroy(pattern);
+            }
+
         }
     } else {
         char strgroups[3][3] = {{color[0], color[1], '\0'},