dwm

Kris's build of dwm
git clone git clone https://git.krisyotam.com/krisyotam/dwm.git
Log | Files | Refs | README | LICENSE

bar_tagpreview.c (2856B)


      1 #include <Imlib2.h>
      2 
      3 void
      4 createpreview(Monitor *m)
      5 {
      6 	if (m->tagwin) {
      7 		XMoveResizeWindow(
      8 			dpy, m->tagwin,
      9 			m->mx,
     10 			m->bar->by + bh,
     11 			m->mw / scalepreview,
     12 			m->mh / scalepreview
     13 		);
     14 		return;
     15 	}
     16 
     17 	XSetWindowAttributes wa = {
     18 		.override_redirect = True,
     19 		#if BAR_ALPHA_PATCH
     20 		.background_pixel = 0,
     21 		.border_pixel = 0,
     22 		.colormap = cmap,
     23 		#else
     24 		.background_pixmap = ParentRelative,
     25 		#endif // BAR_ALPHA_PATCH
     26 		.event_mask = ButtonPressMask|ExposureMask
     27 	};
     28 
     29 	m->tagwin = XCreateWindow(dpy, root, m->wx, m->bar->by + bh, m->mw / scalepreview, m->mh / scalepreview, 0,
     30 		#if BAR_ALPHA_PATCH
     31 		depth, CopyFromParent, visual,
     32 		CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa
     33 		#else
     34 		DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
     35 		CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa
     36 		#endif // BAR_ALPHA_PATCH
     37 	);
     38 	XDefineCursor(dpy, m->tagwin, cursor[CurNormal]->cursor);
     39 	XMapRaised(dpy, m->tagwin);
     40 	XUnmapWindow(dpy, m->tagwin);
     41 }
     42 
     43 void
     44 hidetagpreview(Monitor *m)
     45 {
     46 	m->previewshow = 0;
     47 	XUnmapWindow(dpy, m->tagwin);
     48 }
     49 
     50 void
     51 showtagpreview(int tag, int x, int y)
     52 {
     53 	Monitor *m = selmon;
     54 
     55 	if (!m->tagwin)
     56 		return;
     57 
     58 	if (m->tagmap[tag]) {
     59 		XSetWindowBackgroundPixmap(dpy, m->tagwin, m->tagmap[tag]);
     60 		XCopyArea(dpy, m->tagmap[tag], m->tagwin, drw->gc, 0, 0, m->mw / scalepreview, m->mh / scalepreview, 0, 0);
     61 		XMoveWindow(dpy, m->tagwin, x, y);
     62 		XSync(dpy, False);
     63 		XMapWindow(dpy, m->tagwin);
     64 	} else
     65 		XUnmapWindow(dpy, m->tagwin);
     66 }
     67 
     68 void
     69 tagpreviewswitchtag(void)
     70 {
     71 	int i;
     72 	unsigned int occ = 0;
     73 	Client *c;
     74 	Imlib_Image image;
     75 	Monitor *m = selmon;
     76 
     77 	if (!m->tagwin)
     78 		createpreview(m);
     79 
     80 	for (c = m->clients; c; c = c->next)
     81 		occ |= c->tags;
     82 	for (i = 0; i < NUMTAGS; i++) {
     83 		if (m->tagset[m->seltags] & 1 << i) {
     84 			if (m->tagmap[i] != 0) {
     85 				XFreePixmap(dpy, m->tagmap[i]);
     86 				m->tagmap[i] = 0;
     87 			}
     88 			if (occ & 1 << i) {
     89 				image = imlib_create_image(sw, sh);
     90 				imlib_context_set_image(image);
     91 				imlib_context_set_display(dpy);
     92 				#if BAR_ALPHA_PATCH
     93 				imlib_image_set_has_alpha(1);
     94 				imlib_context_set_blend(0);
     95 				imlib_context_set_visual(visual);
     96 				#else
     97 				imlib_context_set_visual(DefaultVisual(dpy, screen));
     98 				#endif // BAR_ALPHA_PATCH
     99 				imlib_context_set_drawable(root);
    100 				imlib_copy_drawable_to_image(0, m->mx, m->my, m->mw ,m->mh, 0, 0, 1);
    101 				#if BAR_ALPHA_PATCH
    102 				m->tagmap[i] = XCreatePixmap(dpy, m->tagwin, m->mw / scalepreview, m->mh / scalepreview, depth);
    103 				#else
    104 				m->tagmap[i] = XCreatePixmap(dpy, m->tagwin, m->mw / scalepreview, m->mh / scalepreview, DefaultDepth(dpy, screen));
    105 				#endif // BAR_ALPHA_PATCH
    106 				imlib_context_set_drawable(m->tagmap[i]);
    107 				imlib_render_image_part_on_drawable_at_size(0, 0, m->mw, m->mh, 0, 0, m->mw / scalepreview, m->mh / scalepreview);
    108 				imlib_free_image();
    109 			}
    110 		}
    111 	}
    112 }