alpha.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       alpha.diff (3790B)
       ---
            1 diff --git a/config.mk b/config.mk
            2 index 3a71529..095cead 100644
            3 --- a/config.mk
            4 +++ b/config.mk
            5 @@ -9,7 +9,7 @@ MANPREFIX = ${PREFIX}/share/man
            6  
            7  # includes and libs
            8  INCS = -I. -I/usr/include -I/usr/include/freetype2
            9 -LIBS = -L/usr/lib -lc -lX11 -lfontconfig -lXft
           10 +LIBS = -L/usr/lib -lc -lX11 -lfontconfig -lXft -lXrender
           11  
           12  # flags
           13  CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE
           14 diff --git a/tabbed.c b/tabbed.c
           15 index 9a44795..b4d47d1 100644
           16 --- a/tabbed.c
           17 +++ b/tabbed.c
           18 @@ -170,6 +170,9 @@ static char **cmd;
           19  static char *wmname = "tabbed";
           20  static const char *geometry;
           21  
           22 +static Colormap cmap;
           23 +static Visual *visual = NULL;
           24 +
           25  char *argv0;
           26  
           27  /* configuration, allows nested code to access above variables */
           28 @@ -255,8 +258,8 @@ configurenotify(const XEvent *e)
           29                  ww = ev->width;
           30                  wh = ev->height;
           31                  XFreePixmap(dpy, dc.drawable);
           32 -                dc.drawable = XCreatePixmap(dpy, root, ww, wh,
           33 -                              DefaultDepth(dpy, screen));
           34 +                dc.drawable = XCreatePixmap(dpy, win, ww, wh,
           35 +                              32);
           36                  if (sel > -1)
           37                          resize(sel, ww, wh - bh);
           38                  XSync(dpy, False);
           39 @@ -399,7 +402,7 @@ drawtext(const char *text, XftColor col[ColLast])
           40                          ;
           41          }
           42  
           43 -        d = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen));
           44 +        d = XftDrawCreate(dpy, dc.drawable, visual, cmap);
           45          XftDrawStringUtf8(d, &col[ColFG], dc.font.xfont, x, y, (XftChar8 *) buf, len);
           46          XftDrawDestroy(d);
           47  }
           48 @@ -564,7 +567,7 @@ getcolor(const char *colstr)
           49  {
           50          XftColor color;
           51  
           52 -        if (!XftColorAllocName(dpy, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen), colstr, &color))
           53 +  if (!XftColorAllocName(dpy, visual, cmap, colstr, &color))
           54                  die("%s: cannot allocate color '%s'\n", argv0, colstr);
           55  
           56          return color;
           57 @@ -1016,18 +1019,60 @@ setup(void)
           58                          wy = dh + wy - wh - 1;
           59          }
           60  
           61 +        XVisualInfo *vis;
           62 +        XRenderPictFormat *fmt;
           63 +        int nvi;
           64 +        int i;
           65 +
           66 +        XVisualInfo tpl = {
           67 +                .screen = screen,
           68 +                .depth = 32,
           69 +                .class = TrueColor
           70 +        };
           71 +
           72 +        vis = XGetVisualInfo(dpy, VisualScreenMask | VisualDepthMask | VisualClassMask, &tpl, &nvi);
           73 +        for(i = 0; i < nvi; i ++) {
           74 +                fmt = XRenderFindVisualFormat(dpy, vis[i].visual);
           75 +                if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) {
           76 +                        visual = vis[i].visual;
           77 +                        break;
           78 +                }
           79 +        }
           80 +
           81 +        XFree(vis);
           82 +
           83 +        if (! visual) {
           84 +                fprintf(stderr, "Couldn't find ARGB visual.\n");
           85 +                exit(1);
           86 +        }
           87 +
           88 +        cmap = XCreateColormap( dpy, root, visual, None);
           89          dc.norm[ColBG] = getcolor(normbgcolor);
           90          dc.norm[ColFG] = getcolor(normfgcolor);
           91          dc.sel[ColBG] = getcolor(selbgcolor);
           92          dc.sel[ColFG] = getcolor(selfgcolor);
           93          dc.urg[ColBG] = getcolor(urgbgcolor);
           94          dc.urg[ColFG] = getcolor(urgfgcolor);
           95 -        dc.drawable = XCreatePixmap(dpy, root, ww, wh,
           96 -                                    DefaultDepth(dpy, screen));
           97 -        dc.gc = XCreateGC(dpy, root, 0, 0);
           98  
           99 -        win = XCreateSimpleWindow(dpy, root, wx, wy, ww, wh, 0,
          100 -                                  dc.norm[ColFG].pixel, dc.norm[ColBG].pixel);
          101 +        XSetWindowAttributes attrs;
          102 +        attrs.background_pixel = dc.norm[ColBG].pixel;
          103 +        attrs.border_pixel = dc.norm[ColFG].pixel;
          104 +        attrs.bit_gravity = NorthWestGravity;
          105 +        attrs.event_mask = FocusChangeMask | KeyPressMask
          106 +                | ExposureMask | VisibilityChangeMask | StructureNotifyMask
          107 +                | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask;
          108 +        attrs.background_pixmap = None ;
          109 +        attrs.colormap = cmap;
          110 +
          111 +        win = XCreateWindow(dpy, root, wx, wy,
          112 +        ww, wh, 0, 32, InputOutput,
          113 +        visual, CWBackPixmap | CWBorderPixel | CWBitGravity
          114 +        | CWEventMask | CWColormap, &attrs);
          115 +
          116 +        dc.drawable = XCreatePixmap(dpy, win, ww, wh,
          117 +                                    32);
          118 +        dc.gc = XCreateGC(dpy, dc.drawable, 0, 0);
          119 +
          120          XMapRaised(dpy, win);
          121          XSelectInput(dpy, win, SubstructureNotifyMask | FocusChangeMask |
          122                       ButtonPressMask | ExposureMask | KeyPressMask |