Introduction
Introduction Statistics Contact Development Disclaimer Help
slock-dwmlogo-20210324.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
slock-dwmlogo-20210324.diff (7294B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 9855e21..0940fb8 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -3,10 +3,30 @@ static const char *user = "nobody";
6 static const char *group = "nogroup";
7
8 static const char *colorname[NUMCOLS] = {
9 - [INIT] = "black", /* after initialization */
10 + [BACKGROUND] = "black", /* after initialization */
11 + [INIT] = "#2d2d2d", /* after initialization */
12 [INPUT] = "#005577", /* during input */
13 [FAILED] = "#CC3333", /* wrong password */
14 };
15
16 /* treat a cleared input like a wrong password (color) */
17 static const int failonclear = 1;
18 +
19 +/* insert grid pattern with scale 1:1, the size can be changed with log…
20 +static const int logosize = 75;
21 +static const int logow = 12; /* grid width and height for right …
22 +static const int logoh = 6;
23 +
24 +static XRectangle rectangles[9] = {
25 + /* x y w h */
26 + { 0, 3, 1, 3 },
27 + { 1, 3, 2, 1 },
28 + { 0, 5, 8, 1 },
29 + { 3, 0, 1, 5 },
30 + { 5, 3, 1, 2 },
31 + { 7, 3, 1, 2 },
32 + { 8, 3, 4, 1 },
33 + { 9, 4, 1, 2 },
34 + { 11, 4, 1, 2 },
35 +
36 +};
37 diff --git a/config.mk b/config.mk
38 index 74429ae..08356e8 100644
39 --- a/config.mk
40 +++ b/config.mk
41 @@ -10,12 +10,20 @@ MANPREFIX = ${PREFIX}/share/man
42 X11INC = /usr/X11R6/include
43 X11LIB = /usr/X11R6/lib
44
45 +# Xinerama, comment if you don't want it
46 +XINERAMALIBS = -lXinerama
47 +XINERAMAFLAGS = -DXINERAMA
48 +
49 +# freetype
50 +FREETYPELIBS = -lXft
51 +FREETYPEINC = /usr/include/freetype2
52 +
53 # includes and libs
54 -INCS = -I. -I/usr/include -I${X11INC}
55 -LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr
56 +INCS = -I. -I/usr/include -I${X11INC} -I${FREETYPEINC}
57 +LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREET…
58
59 # flags
60 -CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
61 +CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H $…
62 CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
63 LDFLAGS = -s ${LIBS}
64 COMPATSRC = explicit_bzero.c
65 diff --git a/slock.c b/slock.c
66 index 5ae738c..3ea9b7f 100644
67 --- a/slock.c
68 +++ b/slock.c
69 @@ -1,5 +1,6 @@
70 /* See LICENSE file for license details. */
71 -#define _XOPEN_SOURCE 500
72 +#define _XOPEN_SOURCE 500
73 +#define LENGTH(X) (sizeof X / sizeof X[0])
74 #if HAVE_SHADOW_H
75 #include <shadow.h>
76 #endif
77 @@ -15,9 +16,13 @@
78 #include <unistd.h>
79 #include <sys/types.h>
80 #include <X11/extensions/Xrandr.h>
81 +#ifdef XINERAMA
82 +#include <X11/extensions/Xinerama.h>
83 +#endif
84 #include <X11/keysym.h>
85 #include <X11/Xlib.h>
86 #include <X11/Xutil.h>
87 +#include <X11/Xft/Xft.h>
88
89 #include "arg.h"
90 #include "util.h"
91 @@ -25,17 +30,25 @@
92 char *argv0;
93
94 enum {
95 + BACKGROUND,
96 INIT,
97 INPUT,
98 FAILED,
99 NUMCOLS
100 };
101
102 +#include "config.h"
103 +
104 struct lock {
105 int screen;
106 Window root, win;
107 Pixmap pmap;
108 unsigned long colors[NUMCOLS];
109 + unsigned int x, y;
110 + unsigned int xoff, yoff, mw, mh;
111 + Drawable drawable;
112 + GC gc;
113 + XRectangle rectangles[LENGTH(rectangles)];
114 };
115
116 struct xrandr {
117 @@ -44,8 +57,6 @@ struct xrandr {
118 int errbase;
119 };
120
121 -#include "config.h"
122 -
123 static void
124 die(const char *errstr, ...)
125 {
126 @@ -124,6 +135,32 @@ gethash(void)
127 return hash;
128 }
129
130 +static void
131 +resizerectangles(struct lock *lock)
132 +{
133 + int i;
134 +
135 + for (i = 0; i < LENGTH(rectangles); i++){
136 + lock->rectangles[i].x = (rectangles[i].x * logosize)
137 + + lock->xoff + ((lock->mw) / 2) - (logo…
138 + lock->rectangles[i].y = (rectangles[i].y * logosize)
139 + + lock->yoff + ((lock->mh) / 2) - (logo…
140 + lock->rectangles[i].width = rectangles[i].width * logos…
141 + lock->rectangles[i].height = rectangles[i].height * log…
142 + }
143 +}
144 +
145 +static void
146 +drawlogo(Display *dpy, struct lock *lock, int color)
147 +{
148 + XSetForeground(dpy, lock->gc, lock->colors[BACKGROUND]);
149 + XFillRectangle(dpy, lock->drawable, lock->gc, 0, 0, lock->x, lo…
150 + XSetForeground(dpy, lock->gc, lock->colors[color]);
151 + XFillRectangles(dpy, lock->drawable, lock->gc, lock->rectangles…
152 + XCopyArea(dpy, lock->drawable, lock->win, lock->gc, 0, 0, lock-…
153 + XSync(dpy, False);
154 +}
155 +
156 static void
157 readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscree…
158 const char *hash)
159 @@ -190,10 +227,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock…
160 color = len ? INPUT : ((failure || failonclear)…
161 if (running && oldc != color) {
162 for (screen = 0; screen < nscreens; scr…
163 - XSetWindowBackground(dpy,
164 - locks[scre…
165 - locks[scre…
166 - XClearWindow(dpy, locks[screen]…
167 + drawlogo(dpy, locks[screen], co…
168 }
169 oldc = color;
170 }
171 @@ -228,6 +262,10 @@ lockscreen(Display *dpy, struct xrandr *rr, int scr…
172 XColor color, dummy;
173 XSetWindowAttributes wa;
174 Cursor invisible;
175 +#ifdef XINERAMA
176 + XineramaScreenInfo *info;
177 + int n;
178 +#endif
179
180 if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct …
181 return NULL;
182 @@ -241,12 +279,31 @@ lockscreen(Display *dpy, struct xrandr *rr, int sc…
183 lock->colors[i] = color.pixel;
184 }
185
186 + lock->x = DisplayWidth(dpy, lock->screen);
187 + lock->y = DisplayHeight(dpy, lock->screen);
188 +#ifdef XINERAMA
189 + if ((info = XineramaQueryScreens(dpy, &n))) {
190 + lock->xoff = info[0].x_org;
191 + lock->yoff = info[0].y_org;
192 + lock->mw = info[0].width;
193 + lock->mh = info[0].height;
194 + } else
195 +#endif
196 + {
197 + lock->xoff = lock->yoff = 0;
198 + lock->mw = lock->x;
199 + lock->mh = lock->y;
200 + }
201 + lock->drawable = XCreatePixmap(dpy, lock->root,
202 + lock->x, lock->y, DefaultDepth(dpy, screen));
203 + lock->gc = XCreateGC(dpy, lock->root, 0, NULL);
204 + XSetLineAttributes(dpy, lock->gc, 1, LineSolid, CapButt, JoinMi…
205 +
206 /* init */
207 wa.override_redirect = 1;
208 - wa.background_pixel = lock->colors[INIT];
209 + wa.background_pixel = lock->colors[BACKGROUND];
210 lock->win = XCreateWindow(dpy, lock->root, 0, 0,
211 - DisplayWidth(dpy, lock->screen),
212 - DisplayHeight(dpy, lock->screen),
213 + lock->x, lock->y,
214 0, DefaultDepth(dpy, lock->screen),
215 CopyFromParent,
216 DefaultVisual(dpy, lock->screen),
217 @@ -256,6 +313,8 @@ lockscreen(Display *dpy, struct xrandr *rr, int scre…
218 &color, &color, 0, 0);
219 XDefineCursor(dpy, lock->win, invisible);
220
221 + resizerectangles(lock);
222 +
223 /* Try to grab mouse pointer *and* keyboard for 600ms, else fai…
224 for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) {
225 if (ptgrab != GrabSuccess) {
226 @@ -276,6 +335,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int scre…
227 XRRSelectInput(dpy, lock->win, RRScreen…
228
229 XSelectInput(dpy, lock->root, SubstructureNotif…
230 + drawlogo(dpy, lock, INIT);
231 return lock;
232 }
233
234 @@ -391,5 +451,12 @@ main(int argc, char **argv) {
235 /* everything is now blank. Wait for the correct password */
236 readpw(dpy, &rr, locks, nscreens, hash);
237
238 + for (nlocks = 0, s = 0; s < nscreens; s++) {
239 + XFreePixmap(dpy, locks[s]->drawable);
240 + XFreeGC(dpy, locks[s]->gc);
241 + }
242 +
243 + XSync(dpy, 0);
244 + XCloseDisplay(dpy);
245 return 0;
246 }
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.