diff options
| author | A Farzat <a@farzat.xyz> | 2024-10-22 14:25:32 +0900 | 
|---|---|---|
| committer | A Farzat <a@farzat.xyz> | 2024-11-03 21:25:36 +0900 | 
| commit | 4b3b3da066cdc74a384c8b34a9eb10cbffdc44b8 (patch) | |
| tree | eeaa65bfe798fcf92989921229bc1aced66e0db4 /.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff | |
| parent | 7885d92ea8079e578a7b44f6c1c0c7e1cb861ef7 (diff) | |
| download | dotfiles-4b3b3da066cdc74a384c8b34a9eb10cbffdc44b8.tar.gz dotfiles-4b3b3da066cdc74a384c8b34a9eb10cbffdc44b8.zip  | |
Add slock patches and config.h to paru
Diffstat (limited to '.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff')
| -rw-r--r-- | .config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff | 338 | 
1 files changed, 338 insertions, 0 deletions
diff --git a/.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff b/.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff new file mode 100644 index 0000000..baaaac4 --- /dev/null +++ b/.config/paru/pkg_config/slock/patches/0001-Apply-foreground-and-background-patch-modified.diff @@ -0,0 +1,338 @@ +From db3a9869109f6b666c367d3b84daa8fdc31bee83 Mon Sep 17 00:00:00 2001 +From: A Farzat <a@farzat.xyz> +Date: Tue, 9 Jan 2024 17:45:57 +0900 +Subject: [PATCH 1/5] Apply foreground and background patch modified + +From slock-foreground-and-background-20210611-35633d4 +--- + config.def.h |  28 ++++++++++ + config.mk    |  16 ++++-- + slock.c      | 152 ++++++++++++++++++++++++++++++++++++++++++++++++--- + 3 files changed, 184 insertions(+), 12 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 9855e21..ceceeb0 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -10,3 +10,31 @@ static const char *colorname[NUMCOLS] = { +  + /* treat a cleared input like a wrong password (color) */ + static const int failonclear = 1; ++ ++/* insert grid pattern with scale 1:1, the size can be changed with logosize */ ++static const int logosize = 75; ++/* grid width and height for right center alignment */ ++static const int logow = 12; ++static const int logoh = 6; ++ ++static XRectangle rectangles[9] = { ++	/* x    y       w       h */ ++	{ 0,    3,      1,      3 }, ++	{ 1,    3,      2,      1 }, ++	{ 0,    5,      8,      1 }, ++	{ 3,    0,      1,      5 }, ++	{ 5,    3,      1,      2 }, ++	{ 7,    3,      1,      2 }, ++	{ 8,    3,      4,      1 }, ++	{ 9,    4,      1,      2 }, ++	{ 11,   4,      1,      2 }, ++}; ++ ++/*Enable blur*/ ++#define BLUR ++/*Set blur radius*/ ++static const int blurRadius=5; ++/*Enable Pixelation*/ ++//#define PIXELATION ++/*Set pixelation radius*/ ++static const int pixelSize=0; +diff --git a/config.mk b/config.mk +index 514c236..587adb4 100644 +--- a/config.mk ++++ b/config.mk +@@ -10,13 +10,21 @@ MANPREFIX = ${PREFIX}/share/man + X11INC = /usr/X11R6/include + X11LIB = /usr/X11R6/lib +  ++# Xinerama ++XINERAMALIBS  = -lXinerama ++XINERAMAFLAGS = -DXINERAMA ++ ++# freetype ++FREETYPELIBS = -lXft ++FREETYPEINC = /usr/include/freetype2 ++ + # includes and libs +-INCS = -I. -I/usr/include -I${X11INC} +-LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr ++INCS = -I. -I/usr/include -I${X11INC} -I${FREETYPEINC} ++LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXext -lXrandr -lImlib2 +  + # flags +-CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H +-CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} ++CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H ${XINERAMAFLAGS} ++CFLAGS = -std=c99 -pedantic -Wall -Ofast ${INCS} ${CPPFLAGS} + LDFLAGS = -s ${LIBS} + COMPATSRC = explicit_bzero.c +  +diff --git a/slock.c b/slock.c +index b2f14e3..dd59880 100644 +--- a/slock.c ++++ b/slock.c +@@ -1,5 +1,6 @@ + /* See LICENSE file for license details. */ + #define _XOPEN_SOURCE 500 ++#define LENGTH(X)       (sizeof X / sizeof X[0]) + #if HAVE_SHADOW_H + #include <shadow.h> + #endif +@@ -15,9 +16,14 @@ + #include <unistd.h> + #include <sys/types.h> + #include <X11/extensions/Xrandr.h> ++#ifdef XINERAMA ++#include <X11/extensions/Xinerama.h> ++#endif + #include <X11/keysym.h> + #include <X11/Xlib.h> + #include <X11/Xutil.h> ++#include <X11/Xft/Xft.h> ++#include <Imlib2.h> +  + #include "arg.h" + #include "util.h" +@@ -31,11 +37,19 @@ enum { + 	NUMCOLS + }; +  ++#include "config.h" ++ + struct lock { + 	int screen; + 	Window root, win; + 	Pixmap pmap; ++	Pixmap bgmap; + 	unsigned long colors[NUMCOLS]; ++	unsigned int x, y; ++	unsigned int xoff, yoff, mw, mh; ++	Drawable drawable; ++	GC gc; ++	XRectangle rectangles[LENGTH(rectangles)]; + }; +  + struct xrandr { +@@ -44,7 +58,7 @@ struct xrandr { + 	int errbase; + }; +  +-#include "config.h" ++Imlib_Image image; +  + static void + die(const char *errstr, ...) +@@ -124,6 +138,32 @@ gethash(void) + 	return hash; + } +  ++static void ++resizerectangles(struct lock *lock) ++{ ++	int i; ++ ++	for (i = 0; i < LENGTH(rectangles); i++){ ++		lock->rectangles[i].x = (rectangles[i].x * logosize) + lock->xoff + ((lock->mw) / 2) - (logow / 2 * logosize); ++		lock->rectangles[i].y = (rectangles[i].y * logosize) + lock->yoff + ((lock->mh) / 2) - (logoh / 2 * logosize); ++		lock->rectangles[i].width = rectangles[i].width * logosize; ++		lock->rectangles[i].height = rectangles[i].height * logosize; ++	} ++} ++ ++static void ++drawlogo(Display *dpy, struct lock *lock, int color) ++{ ++	/* ++	XSetForeground(dpy, lock->gc, lock->colors[BACKGROUND]); ++	XFillRectangle(dpy, lock->drawable, lock->gc, 0, 0, lock->x, lock->y); */ ++	lock->drawable = lock->bgmap; ++	XSetForeground(dpy, lock->gc, lock->colors[color]); ++	XFillRectangles(dpy, lock->drawable, lock->gc, lock->rectangles, LENGTH(rectangles)); ++	XCopyArea(dpy, lock->drawable, lock->win, lock->gc, 0, 0, lock->x, lock->y, 0, 0); ++	XSync(dpy, False); ++} ++ + static void + readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, +        const char *hash) +@@ -190,10 +230,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, + 			color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT); + 			if (running && oldc != color) { + 				for (screen = 0; screen < nscreens; screen++) { +-					XSetWindowBackground(dpy, +-					                     locks[screen]->win, +-					                     locks[screen]->colors[color]); +-					XClearWindow(dpy, locks[screen]->win); ++					drawlogo(dpy, locks[screen], color); + 				} + 				oldc = color; + 			} +@@ -228,6 +265,10 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) + 	XColor color, dummy; + 	XSetWindowAttributes wa; + 	Cursor invisible; ++#ifdef XINERAMA ++	XineramaScreenInfo *info; ++	int n; ++#endif +  + 	if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct lock)))) + 		return NULL; +@@ -235,27 +276,60 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) + 	lock->screen = screen; + 	lock->root = RootWindow(dpy, lock->screen); +  ++	if(image) ++	{ ++		lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen), ++		                            DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen)); ++		imlib_context_set_image(image); ++		imlib_context_set_display(dpy); ++		imlib_context_set_visual(DefaultVisual(dpy, lock->screen)); ++		imlib_context_set_colormap(DefaultColormap(dpy, lock->screen)); ++		imlib_context_set_drawable(lock->bgmap); ++		imlib_render_image_on_drawable(0, 0); ++		imlib_free_image(); ++	} + 	for (i = 0; i < NUMCOLS; i++) { + 		XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), + 		                 colorname[i], &color, &dummy); + 		lock->colors[i] = color.pixel; + 	} +  ++	lock->x = DisplayWidth(dpy, lock->screen); ++	lock->y = DisplayHeight(dpy, lock->screen); ++#ifdef XINERAMA ++	if ((info = XineramaQueryScreens(dpy, &n))) { ++		lock->xoff = info[0].x_org; ++		lock->yoff = info[0].y_org; ++		lock->mw = info[0].width; ++		lock->mh = info[0].height; ++	} else ++#endif ++	{ ++		lock->xoff = lock->yoff = 0; ++		lock->mw = lock->x; ++		lock->mh = lock->y; ++	} ++	lock->drawable = XCreatePixmap(dpy, lock->root, lock->x, lock->y, DefaultDepth(dpy, screen)); ++	lock->gc = XCreateGC(dpy, lock->root, 0, NULL); ++	XSetLineAttributes(dpy, lock->gc, 1, LineSolid, CapButt, JoinMiter); ++ + 	/* init */ + 	wa.override_redirect = 1; +-	wa.background_pixel = lock->colors[INIT]; + 	lock->win = XCreateWindow(dpy, lock->root, 0, 0, +-	                          DisplayWidth(dpy, lock->screen), +-	                          DisplayHeight(dpy, lock->screen), ++	                          lock->x, lock->y, + 	                          0, DefaultDepth(dpy, lock->screen), + 	                          CopyFromParent, + 	                          DefaultVisual(dpy, lock->screen), + 	                          CWOverrideRedirect | CWBackPixel, &wa); ++	if(lock->bgmap) ++		XSetWindowBackgroundPixmap(dpy, lock->win, lock->bgmap); + 	lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); + 	invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, + 	                                &color, &color, 0, 0); + 	XDefineCursor(dpy, lock->win, invisible); +  ++	resizerectangles(lock); ++ + 	/* Try to grab mouse pointer *and* keyboard for 600ms, else fail the lock */ + 	for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) { + 		if (ptgrab != GrabSuccess) { +@@ -276,6 +350,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) + 				XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask); +  + 			XSelectInput(dpy, lock->root, SubstructureNotifyMask); ++			drawlogo(dpy, lock, INIT); + 			return lock; + 		} +  +@@ -355,6 +430,60 @@ main(int argc, char **argv) { + 	if (setuid(duid) < 0) + 		die("slock: setuid: %s\n", strerror(errno)); +  ++	/*Create screenshot Image*/ ++	Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy)); ++	image = imlib_create_image(scr->width,scr->height); ++	imlib_context_set_image(image); ++	imlib_context_set_display(dpy); ++	imlib_context_set_visual(DefaultVisual(dpy,0)); ++	imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));	 ++	imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1); ++ ++#ifdef BLUR ++ ++	/*Blur function*/ ++	imlib_image_blur(blurRadius); ++#endif // BLUR ++ ++#ifdef PIXELATION ++	/*Pixelation*/ ++	int width = scr->width; ++	int height = scr->height; ++ ++	for(int y = 0; y < height; y += pixelSize) ++	{ ++		for(int x = 0; x < width; x += pixelSize) ++		{ ++			int red = 0; ++			int green = 0; ++			int blue = 0; ++ ++			Imlib_Color pixel; ++			Imlib_Color* pp; ++			pp = &pixel; ++			for(int j = 0; j < pixelSize && j < height; j++) ++			{ ++				for(int i = 0; i < pixelSize && i < width; i++) ++				{ ++					imlib_image_query_pixel(x+i,y+j,pp); ++					red += pixel.red; ++					green += pixel.green; ++					blue += pixel.blue; ++				} ++			} ++			red /= (pixelSize*pixelSize); ++			green /= (pixelSize*pixelSize); ++			blue /= (pixelSize*pixelSize); ++			imlib_context_set_color(red,green,blue,pixel.alpha); ++			imlib_image_fill_rectangle(x,y,pixelSize,pixelSize); ++			red = 0; ++			green = 0; ++			blue = 0; ++		} ++	} ++ ++ ++#endif + 	/* check for Xrandr support */ + 	rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); +  +@@ -391,5 +520,12 @@ main(int argc, char **argv) { + 	/* everything is now blank. Wait for the correct password */ + 	readpw(dpy, &rr, locks, nscreens, hash); +  ++	for (nlocks = 0, s = 0; s < nscreens; s++) { ++		XFreePixmap(dpy, locks[s]->drawable); ++		XFreeGC(dpy, locks[s]->gc); ++	} ++ ++	XSync(dpy, 0); ++	XCloseDisplay(dpy); + 	return 0; + } +--  +2.43.0 +  | 
