slock

Kris's build of slock (slock-flexipatch)
git clone git clone https://git.krisyotam.com/krisyotam/slock.git
Log | Files | Refs | README | LICENSE

blur_pixelated_screen.c (1924B)


      1 #include <Imlib2.h>
      2 
      3 Imlib_Image image;
      4 
      5 void
      6 render_lock_image(Display *dpy, struct lock *lock, Imlib_Image image)
      7 {
      8 	if (image) {
      9 		lock->bgmap = XCreatePixmap(dpy, lock->root, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), DefaultDepth(dpy, lock->screen));
     10 		imlib_context_set_image(image);
     11 		imlib_context_set_display(dpy);
     12 		imlib_context_set_visual(DefaultVisual(dpy, lock->screen));
     13 		imlib_context_set_colormap(DefaultColormap(dpy, lock->screen));
     14 		imlib_context_set_drawable(lock->bgmap);
     15 		imlib_render_image_on_drawable(0, 0);
     16 		imlib_free_image();
     17 	}
     18 }
     19 
     20 void
     21 create_lock_image(Display *dpy)
     22 {
     23 	/* Create screenshot Image */
     24 	Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));
     25 	image = imlib_create_image(scr->width,scr->height);
     26 	imlib_context_set_image(image);
     27 	imlib_context_set_display(dpy);
     28 	imlib_context_set_visual(DefaultVisual(dpy,0));
     29 	imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));
     30 	imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
     31 
     32 	#ifdef BLUR
     33 	/* Blur function */
     34 	imlib_image_blur(blurRadius);
     35 	#endif // BLUR
     36 
     37 	#ifdef PIXELATION
     38 	/* Pixelation */
     39 	int width = scr->width;
     40 	int height = scr->height;
     41 
     42 	for (int y = 0; y < height; y += pixelSize) {
     43 		for (int x = 0; x < width; x += pixelSize) {
     44 			int red = 0;
     45 			int green = 0;
     46 			int blue = 0;
     47 
     48 			Imlib_Color pixel;
     49 			Imlib_Color* pp;
     50 			pp = &pixel;
     51 			for (int j = 0; j < pixelSize && j < height; j++) {
     52 				for (int i = 0; i < pixelSize && i < width; i++) {
     53 					imlib_image_query_pixel(x + i, y + j, pp);
     54 					red += pixel.red;
     55 					green += pixel.green;
     56 					blue += pixel.blue;
     57 				}
     58 			}
     59 			red /= (pixelSize * pixelSize);
     60 			green /= (pixelSize * pixelSize);
     61 			blue /= (pixelSize * pixelSize);
     62 			imlib_context_set_color(red, green, blue, pixel.alpha);
     63 			imlib_image_fill_rectangle(x, y, pixelSize, pixelSize);
     64 			red = 0;
     65 			green = 0;
     66 			blue = 0;
     67 		}
     68 	}
     69 	#endif
     70 }