slock-blur_pixelated_screen-1.4.diff (10550B)
1 From 36a4863f9a399740aaf8b1e01926485c0a055e1c Mon Sep 17 00:00:00 2001 2 From: Lars Niesen <iah71niesen@gso-koeln.de> 3 Date: Wed, 29 Apr 2020 13:52:42 +0200 4 Subject: [PATCH 1/8] Added Bg patch and screenshot capabilities 5 6 --- 7 config.mk | 2 +- 8 slock.c | 35 +++++++++++++++++++++++++++++++---- 9 2 files changed, 32 insertions(+), 5 deletions(-) 10 11 diff --git a/config.mk b/config.mk 12 index 74429ae..987819e 100644 13 --- a/config.mk 14 +++ b/config.mk 15 @@ -12,7 +12,7 @@ X11LIB = /usr/X11R6/lib 16 17 # includes and libs 18 INCS = -I. -I/usr/include -I${X11INC} 19 -LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr 20 +LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lImlib2 21 22 # flags 23 CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H 24 diff --git a/slock.c b/slock.c 25 index 5ae738c..7c63f34 100644 26 --- a/slock.c 27 +++ b/slock.c 28 @@ -18,6 +18,7 @@ 29 #include <X11/keysym.h> 30 #include <X11/Xlib.h> 31 #include <X11/Xutil.h> 32 +#include <Imlib2.h> 33 34 #include "arg.h" 35 #include "util.h" 36 @@ -35,6 +36,7 @@ struct lock { 37 int screen; 38 Window root, win; 39 Pixmap pmap; 40 + Pixmap bgmap; 41 unsigned long colors[NUMCOLS]; 42 }; 43 44 @@ -46,6 +48,8 @@ struct xrandr { 45 46 #include "config.h" 47 48 +Imlib_Image image; 49 + 50 static void 51 die(const char *errstr, ...) 52 { 53 @@ -190,9 +194,10 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, 54 color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT); 55 if (running && oldc != color) { 56 for (screen = 0; screen < nscreens; screen++) { 57 - XSetWindowBackground(dpy, 58 - locks[screen]->win, 59 - locks[screen]->colors[color]); 60 + if(locks[screen]->bgmap) 61 + XSetWindowBackgroundPixmap(dpy, locks[screen]->win, locks[screen]->bgmap); 62 + else 63 + XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[0]); 64 XClearWindow(dpy, locks[screen]->win); 65 } 66 oldc = color; 67 @@ -235,6 +240,17 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) 68 lock->screen = screen; 69 lock->root = RootWindow(dpy, lock->screen); 70 71 + if(image) 72 + { 73 + lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen)); 74 + imlib_context_set_image(image); 75 + imlib_context_set_display(dpy); 76 + imlib_context_set_visual(DefaultVisual(dpy, lock->screen)); 77 + imlib_context_set_colormap(DefaultColormap(dpy, lock->screen)); 78 + imlib_context_set_drawable(lock->bgmap); 79 + imlib_render_image_on_drawable(0, 0); 80 + imlib_free_image(); 81 + } 82 for (i = 0; i < NUMCOLS; i++) { 83 XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), 84 colorname[i], &color, &dummy); 85 @@ -251,6 +267,8 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) 86 CopyFromParent, 87 DefaultVisual(dpy, lock->screen), 88 CWOverrideRedirect | CWBackPixel, &wa); 89 + if(lock->bgmap) 90 + XSetWindowBackgroundPixmap(dpy, lock->win, lock->bgmap); 91 lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); 92 invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, 93 &color, &color, 0, 0); 94 @@ -354,7 +372,16 @@ main(int argc, char **argv) { 95 die("slock: setgid: %s\n", strerror(errno)); 96 if (setuid(duid) < 0) 97 die("slock: setuid: %s\n", strerror(errno)); 98 - 99 + 100 + /*Create screenshot Image*/ 101 + Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy)); 102 + image = imlib_create_image(scr->width,scr->height); 103 + imlib_context_set_image(image); 104 + imlib_context_set_display(dpy); 105 + imlib_context_set_visual(DefaultVisual(dpy,0)); 106 + imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr))); 107 + imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1); 108 + 109 /* check for Xrandr support */ 110 rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); 111 112 -- 113 2.27.0 114 115 116 From 9d89604ac52b0949d047dae2f9b78cb5085ee1a2 Mon Sep 17 00:00:00 2001 117 From: Lars Niesen <iah71niesen@gso-koeln.de> 118 Date: Wed, 29 Apr 2020 14:15:59 +0200 119 Subject: [PATCH 2/8] Added blur function 120 121 --- 122 config.def.h | 3 +++ 123 slock.c | 3 ++- 124 2 files changed, 5 insertions(+), 1 deletion(-) 125 126 diff --git a/config.def.h b/config.def.h 127 index c8e52d6..fcc1b39 100644 128 --- a/config.def.h 129 +++ b/config.def.h 130 @@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = { 131 132 /* treat a cleared input like a wrong password (color) */ 133 static const int failonclear = 1; 134 + 135 +/*Set Blur radius*/ 136 +static const int blurRadius=5; 137 \ No newline at end of file 138 diff --git a/slock.c b/slock.c 139 index 7c63f34..0f24cd7 100644 140 --- a/slock.c 141 +++ b/slock.c 142 @@ -372,7 +372,7 @@ main(int argc, char **argv) { 143 die("slock: setgid: %s\n", strerror(errno)); 144 if (setuid(duid) < 0) 145 die("slock: setuid: %s\n", strerror(errno)); 146 - 147 + 148 /*Create screenshot Image*/ 149 Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy)); 150 image = imlib_create_image(scr->width,scr->height); 151 @@ -381,6 +381,7 @@ main(int argc, char **argv) { 152 imlib_context_set_visual(DefaultVisual(dpy,0)); 153 imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr))); 154 imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1); 155 + imlib_image_blur(blurRadius); 156 157 /* check for Xrandr support */ 158 rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); 159 -- 160 2.27.0 161 162 163 From 069aabd7e30244befd4efe74c85d3468ed076c21 Mon Sep 17 00:00:00 2001 164 From: Lars Niesen <iah71niesen@gso-koeln.de> 165 Date: Wed, 29 Apr 2020 17:33:09 +0200 166 Subject: [PATCH 4/8] added Pixelation 167 168 --- 169 config.def.h | 3 ++- 170 slock.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 171 2 files changed, 44 insertions(+), 1 deletion(-) 172 173 diff --git a/config.def.h b/config.def.h 174 index fcc1b39..1c1aef3 100644 175 --- a/config.def.h 176 +++ b/config.def.h 177 @@ -12,4 +12,5 @@ static const char *colorname[NUMCOLS] = { 178 static const int failonclear = 1; 179 180 /*Set Blur radius*/ 181 -static const int blurRadius=5; 182 \ No newline at end of file 183 +static const int blurRadius=0; 184 +static const int pixelSize=5; 185 diff --git a/slock.c b/slock.c 186 index 0f24cd7..33ca569 100644 187 --- a/slock.c 188 +++ b/slock.c 189 @@ -381,7 +381,49 @@ main(int argc, char **argv) { 190 imlib_context_set_visual(DefaultVisual(dpy,0)); 191 imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr))); 192 imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1); 193 + 194 + /*Blur function*/ 195 imlib_image_blur(blurRadius); 196 + 197 + 198 + /*Pixelation*/ 199 + int width = scr->width; 200 + int height = scr->height; 201 + 202 + for(int y = 0; y < height; y += pixelSize) 203 + { 204 + for(int x = 0; x < width; x += pixelSize) 205 + { 206 + int red = 0; 207 + int green = 0; 208 + int blue = 0; 209 + 210 + Imlib_Color pixel; 211 + Imlib_Color* pp; 212 + pp = &pixel; 213 + for(int j = 0; j < pixelSize && j < height; j++) 214 + { 215 + for(int i = 0; i < pixelSize && i < width; i++) 216 + { 217 + imlib_image_query_pixel(x+i,y+j,pp); 218 + red += pixel.red; 219 + green += pixel.green; 220 + blue += pixel.blue; 221 + } 222 + } 223 + red /= (pixelSize*pixelSize); 224 + green /= (pixelSize*pixelSize); 225 + blue /= (pixelSize*pixelSize); 226 + printf("R/G/B: %i/%i/%i\n",red,green,blue); 227 + imlib_context_set_color(red,green,blue,pixel.alpha); 228 + imlib_image_fill_rectangle(x,y,pixelSize,pixelSize); 229 + red = 0; 230 + green = 0; 231 + blue = 0; 232 + } 233 + } 234 + 235 + 236 237 /* check for Xrandr support */ 238 rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); 239 -- 240 2.27.0 241 242 243 From 109bac015c1c7fbf8440fb42588fe7e0e9cb5e62 Mon Sep 17 00:00:00 2001 244 From: Lars Niesen <iah71niesen@gso-koeln.de> 245 Date: Wed, 29 Apr 2020 17:42:39 +0200 246 Subject: [PATCH 6/8] removed debug printf 247 248 --- 249 slock.c | 1 - 250 1 file changed, 1 deletion(-) 251 252 diff --git a/slock.c b/slock.c 253 index 33ca569..f54c459 100644 254 --- a/slock.c 255 +++ b/slock.c 256 @@ -414,7 +414,6 @@ main(int argc, char **argv) { 257 red /= (pixelSize*pixelSize); 258 green /= (pixelSize*pixelSize); 259 blue /= (pixelSize*pixelSize); 260 - printf("R/G/B: %i/%i/%i\n",red,green,blue); 261 imlib_context_set_color(red,green,blue,pixel.alpha); 262 imlib_image_fill_rectangle(x,y,pixelSize,pixelSize); 263 red = 0; 264 -- 265 2.27.0 266 267 268 From a13a0f4ac86f82e4dff145b7ebd93e52d07492c9 Mon Sep 17 00:00:00 2001 269 From: Lars Niesen <iah71niesen@gso-koeln.de> 270 Date: Sun, 3 May 2020 18:03:38 +0200 271 Subject: [PATCH 7/8] Changed compilerflag to fast 272 273 --- 274 config.mk | 2 +- 275 1 file changed, 1 insertion(+), 1 deletion(-) 276 277 diff --git a/config.mk b/config.mk 278 index 987819e..d0c2f01 100644 279 --- a/config.mk 280 +++ b/config.mk 281 @@ -16,7 +16,7 @@ LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lImlib2 282 283 # flags 284 CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H 285 -CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} 286 +CFLAGS = -std=c99 -pedantic -Wall -Ofast ${INCS} ${CPPFLAGS} 287 LDFLAGS = -s ${LIBS} 288 COMPATSRC = explicit_bzero.c 289 290 -- 291 2.27.0 292 293 294 From 31a7001c4954606c066cc3df4318fafd6d216bcd Mon Sep 17 00:00:00 2001 295 From: Lars Niesen <iah71niesen@gso-koeln.de> 296 Date: Mon, 4 May 2020 10:00:40 +0200 297 Subject: [PATCH 8/8] Added defines for BLUR/PIXELATION to remove from code by 298 compilation 299 300 --- 301 config.def.h | 11 ++++++++--- 302 slock.c | 9 ++++++--- 303 2 files changed, 14 insertions(+), 6 deletions(-) 304 305 diff --git a/config.def.h b/config.def.h 306 index 1c1aef3..5407953 100644 307 --- a/config.def.h 308 +++ b/config.def.h 309 @@ -11,6 +11,11 @@ static const char *colorname[NUMCOLS] = { 310 /* treat a cleared input like a wrong password (color) */ 311 static const int failonclear = 1; 312 313 -/*Set Blur radius*/ 314 -static const int blurRadius=0; 315 -static const int pixelSize=5; 316 +/*Enable blur*/ 317 +#define BLUR 318 +/*Set blur radius*/ 319 +static const int blurRadius=5; 320 +/*Enable Pixelation*/ 321 +//#define PIXELATION 322 +/*Set pixelation radius*/ 323 +static const int pixelSize=0; 324 diff --git a/slock.c b/slock.c 325 index f54c459..1a4d6e3 100644 326 --- a/slock.c 327 +++ b/slock.c 328 @@ -381,11 +381,14 @@ main(int argc, char **argv) { 329 imlib_context_set_visual(DefaultVisual(dpy,0)); 330 imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr))); 331 imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1); 332 - 333 + 334 +#ifdef BLUR 335 + 336 /*Blur function*/ 337 imlib_image_blur(blurRadius); 338 +#endif // BLUR 339 340 - 341 +#ifdef PIXELATION 342 /*Pixelation*/ 343 int width = scr->width; 344 int height = scr->height; 345 @@ -423,7 +426,7 @@ main(int argc, char **argv) { 346 } 347 348 349 - 350 +#endif 351 /* check for Xrandr support */ 352 rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); 353 354 -- 355 2.27.0 356