Introduction
Introduction Statistics Contact Development Disclaimer Help
slock-dwmlogoandblurscreen-1.0.diff - sites - public wiki contents of suckless.…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
slock-dwmlogoandblurscreen-1.0.diff (9888B)
---
1 diff -u ../slock-orig/config.def.h ./config.def.h
2 --- ../slock-orig/config.def.h 2022-04-29 17:07:13.872268452 -0400
3 +++ ./config.def.h 2022-04-29 16:44:38.573566776 -0400
4 @@ -3,10 +3,36 @@
5 static const char *group = "nogroup";
6
7 static const char *colorname[NUMCOLS] = {
8 - [INIT] = "black", /* after initialization */
9 + [BACKGROUND] = "white",
10 + [INIT] = "2d2d2d", /* after initialization */
11 [INPUT] = "#005577", /* during input */
12 [FAILED] = "#CC3333", /* wrong password */
13 };
14
15 /* treat a cleared input like a wrong password (color) */
16 static const int failonclear = 1;
17 +
18 +static const int logosize = 75;
19 +static const int logow = 12; /* Grid width and height for right center …
20 +static const int logoh = 6;
21 +
22 +static XRectangle rectangles[9] = {
23 + {0, 3, 1, 3},
24 + {1, 3, 2, 1},
25 + {0, 5, 8, 1},
26 + {3, 0, 1, 5},
27 + {5, 3, 1, 2},
28 + {7, 3, 1, 2},
29 + {8, 3, 4, 1},
30 + {9, 4, 1, 2},
31 + {11,4, 1, 2},
32 +};
33 +
34 +/*Enable blur*/
35 +#define BLUR
36 +/*Set blur radius*/
37 +static const int blurRadius=5;
38 +/*Enable Pixelation*/
39 +//#define PIXELATION
40 +/*Set pixelation radius*/
41 +static const int pixelSize=0;
42 diff -u ../slock-orig/config.mk ./config.mk
43 --- ../slock-orig/config.mk 2022-04-29 17:07:13.872268452 -0400
44 +++ ./config.mk 2022-04-29 17:14:49.416921212 -0400
45 @@ -10,13 +10,21 @@
46 X11INC = /usr/X11R6/include
47 X11LIB = /usr/X11R6/lib
48
49 +# Xinerama, comment if you don't want it
50 +XINERAMALIBS = -lXinerama
51 +XINERAMAFLAGS = -DXINERAMA
52 +
53 +# freetype
54 +FREETYPELIBS = -lXft
55 +FREETYPEINC = /usr/include/freetype2
56 +
57 # includes and libs
58 -INCS = -I. -I/usr/include -I${X11INC}
59 -LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr
60 +INCS = -I. -I/usr/include -I${X11INC} -I${FREETYPEINC}
61 +LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lImlib2 ${XINERAMALIBS…
62
63 # flags
64 -CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
65 -CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
66 +CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H $…
67 +CFLAGS = -std=c99 -pedantic -Wall -Ofast ${INCS} ${CPPFLAGS}
68 LDFLAGS = -s ${LIBS}
69 COMPATSRC = explicit_bzero.c
70
71 diff -u ../slock-orig/slock.c ./slock.c
72 --- ../slock-orig/slock.c 2022-04-29 17:07:13.872268452 -0400
73 +++ ./slock.c 2022-04-29 17:04:53.424073165 -0400
74 @@ -1,5 +1,6 @@
75 /* See LICENSE file for license details. */
76 -#define _XOPEN_SOURCE 500
77 +#define _XOPEN_SOURCE 500
78 +#define LENGTH(X) (sizeof X / sizeof X[0])
79 #if HAVE_SHADOW_H
80 #include <shadow.h>
81 #endif
82 @@ -15,9 +16,13 @@
83 #include <unistd.h>
84 #include <sys/types.h>
85 #include <X11/extensions/Xrandr.h>
86 +#ifdef XINERAMA
87 +#include <X11/extensions/Xinerama.h>
88 +#endif
89 #include <X11/keysym.h>
90 #include <X11/Xlib.h>
91 #include <X11/Xutil.h>
92 +#include <Imlib2.h>
93
94 #include "arg.h"
95 #include "util.h"
96 @@ -25,17 +30,26 @@
97 char *argv0;
98
99 enum {
100 + BACKGROUND,
101 INIT,
102 INPUT,
103 FAILED,
104 NUMCOLS
105 };
106
107 +#include "config.h"
108 +
109 struct lock {
110 int screen;
111 Window root, win;
112 Pixmap pmap;
113 + Pixmap bgmap;
114 unsigned long colors[NUMCOLS];
115 + unsigned int x, y;
116 + unsigned int xoff, yoff, mw, mh;
117 + Drawable drawable;
118 + GC gc;
119 + XRectangle rectangles[LENGTH(rectangles)];
120 };
121
122 struct xrandr {
123 @@ -44,7 +58,7 @@
124 int errbase;
125 };
126
127 -#include "config.h"
128 +Imlib_Image image;
129
130 static void
131 die(const char *errstr, ...)
132 @@ -125,6 +139,29 @@
133 }
134
135 static void
136 +resizerectangles(struct lock *lock)
137 +{
138 + int i;
139 +
140 + for (i = 0; i < LENGTH(rectangles); i++){
141 + lock->rectangles[i].x = (rectangles[i].x * logosize)
142 + + lock->xoff + ((lock->mw) / 2) - (logo…
143 + lock->rectangles[i].y = (rectangles[i].y * logosize)
144 + + lock->yoff + ((lock->mh) / 2) - (logo…
145 + lock->rectangles[i].width = rectangles[i].width * logos…
146 + lock->rectangles[i].height = rectangles[i].height * log…
147 + }
148 +}
149 +
150 +static void
151 +drawlogo(Display *dpy, struct lock *lock, int color)
152 +{
153 + XSetForeground(dpy, lock->gc, lock->colors[color]);
154 + XFillRectangles(dpy, lock->win, lock->gc, lock->rectangles, LEN…
155 + XSync(dpy, False);
156 +}
157 +
158 +static void
159 readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscree…
160 const char *hash)
161 {
162 @@ -190,10 +227,12 @@
163 color = len ? INPUT : ((failure || failonclear)…
164 if (running && oldc != color) {
165 for (screen = 0; screen < nscreens; scr…
166 - XSetWindowBackground(dpy,
167 - locks[scre…
168 - locks[scre…
169 - XClearWindow(dpy, locks[screen]…
170 + if(locks[screen]->bgmap)
171 + XSetWindowBackgroundPixmap(dpy, locks[screen]->…
172 + else
173 + XSetWindowBackground(dpy, locks[screen]->win, l…
174 + //XClearWindow(dpy, locks[scree…
175 + drawlogo(dpy, locks[screen], color);
176 }
177 oldc = color;
178 }
179 @@ -228,6 +267,10 @@
180 XColor color, dummy;
181 XSetWindowAttributes wa;
182 Cursor invisible;
183 +#ifdef XINERAMA
184 + XineramaScreenInfo *info;
185 + int n;
186 +#endif
187
188 if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct …
189 return NULL;
190 @@ -235,27 +278,61 @@
191 lock->screen = screen;
192 lock->root = RootWindow(dpy, lock->screen);
193
194 + if(image)
195 + {
196 + lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, …
197 + imlib_context_set_image(image);
198 + imlib_context_set_display(dpy);
199 + imlib_context_set_visual(DefaultVisual(dpy, lock->screen));
200 + imlib_context_set_colormap(DefaultColormap(dpy, lock->screen));
201 + imlib_context_set_drawable(lock->bgmap);
202 + imlib_render_image_on_drawable(0, 0);
203 + imlib_free_image();
204 + }
205 for (i = 0; i < NUMCOLS; i++) {
206 XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen…
207 colorname[i], &color, &dummy);
208 lock->colors[i] = color.pixel;
209 }
210
211 + lock->x = DisplayWidth(dpy, lock->screen);
212 + lock->y = DisplayHeight(dpy, lock->screen);
213 +#ifdef XINERAMA
214 + if ((info = XineramaQueryScreens(dpy, &n))) {
215 + lock->xoff = info[0].x_org;
216 + lock->yoff = info[0].y_org;
217 + lock->mw = info[0].width;
218 + lock->mh = info[0].height;
219 + } else
220 +#endif
221 + {
222 + lock->xoff = lock->yoff = 0;
223 + lock->mw = lock->x;
224 + lock->mh = lock->y;
225 + }
226 + lock->drawable = XCreatePixmap(dpy, lock->root,
227 + lock->x, lock->y, DefaultDepth(dpy, screen));
228 + lock->gc = XCreateGC(dpy, lock->root, 0, NULL);
229 + XSetLineAttributes(dpy, lock->gc, 1, LineSolid, CapButt, JoinMi…
230 +
231 /* init */
232 wa.override_redirect = 1;
233 - wa.background_pixel = lock->colors[INIT];
234 + wa.background_pixel = lock->colors[BACKGROUND];
235 lock->win = XCreateWindow(dpy, lock->root, 0, 0,
236 - DisplayWidth(dpy, lock->screen),
237 - DisplayHeight(dpy, lock->screen),
238 + lock->x, lock->y,
239 0, DefaultDepth(dpy, lock->screen),
240 CopyFromParent,
241 DefaultVisual(dpy, lock->screen),
242 CWOverrideRedirect | CWBackPixel, &wa…
243 + if(lock->bgmap)
244 + XSetWindowBackgroundPixmap(dpy, lock->win, lock->bgmap);
245 lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
246 invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap,
247 &color, &color, 0, 0);
248 XDefineCursor(dpy, lock->win, invisible);
249
250 + resizerectangles(lock);
251 +
252 /* Try to grab mouse pointer *and* keyboard for 600ms, else fai…
253 for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) {
254 if (ptgrab != GrabSuccess) {
255 @@ -276,6 +353,7 @@
256 XRRSelectInput(dpy, lock->win, RRScreen…
257
258 XSelectInput(dpy, lock->root, SubstructureNotif…
259 + drawlogo(dpy, lock, INIT);
260 return lock;
261 }
262
263 @@ -355,6 +433,60 @@
264 if (setuid(duid) < 0)
265 die("slock: setuid: %s\n", strerror(errno));
266
267 + /*Create screenshot Image*/
268 + Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));
269 + image = imlib_create_image(scr->width,scr->height);
270 + imlib_context_set_image(image);
271 + imlib_context_set_display(dpy);
272 + imlib_context_set_visual(DefaultVisual(dpy,0));
273 + imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen…
274 + imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1…
275 +
276 +#ifdef BLUR
277 +
278 + /*Blur function*/
279 + imlib_image_blur(blurRadius);
280 +#endif // BLUR
281 +
282 +#ifdef PIXELATION
283 + /*Pixelation*/
284 + int width = scr->width;
285 + int height = scr->height;
286 +
287 + for(int y = 0; y < height; y += pixelSize)
288 + {
289 + for(int x = 0; x < width; x += pixelSize)
290 + {
291 + int red = 0;
292 + int green = 0;
293 + int blue = 0;
294 +
295 + Imlib_Color pixel;
296 + Imlib_Color* pp;
297 + pp = &pixel;
298 + for(int j = 0; j < pixelSize && j < height; j++)
299 + {
300 + for(int i = 0; i < pixelSize && i < wid…
301 + {
302 + imlib_image_query_pixel(x+i,y+j…
303 + red += pixel.red;
304 + green += pixel.green;
305 + blue += pixel.blue;
306 + }
307 + }
308 + red /= (pixelSize*pixelSize);
309 + green /= (pixelSize*pixelSize);
310 + blue /= (pixelSize*pixelSize);
311 + imlib_context_set_color(red,green,blue,pixel.al…
312 + imlib_image_fill_rectangle(x,y,pixelSize,pixelS…
313 + red = 0;
314 + green = 0;
315 + blue = 0;
316 + }
317 + }
318 +
319 +
320 +#endif
321 /* check for Xrandr support */
322 rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);
323
324 @@ -391,5 +523,12 @@
325 /* everything is now blank. Wait for the correct password */
326 readpw(dpy, &rr, locks, nscreens, hash);
327
328 + for (nlocks = 0, s = 0; s < nscreens; s++) {
329 + XFreePixmap(dpy, locks[s]->drawable);
330 + XFreeGC(dpy, locks[s]->gc);
331 + }
332 +
333 + XSync(dpy, 0);
334 + XCloseDisplay(dpy);
335 return 0;
336 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.