[ewmh] Use premul alpha for net_wm_icons
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
89f4e22255
commit
0a9b206fc0
13
ewmh.c
13
ewmh.c
|
@ -358,10 +358,11 @@ ewmh_check_client_hints(Client *c)
|
||||||
NetWMIcon *
|
NetWMIcon *
|
||||||
ewmh_get_window_icon(Window w)
|
ewmh_get_window_icon(Window w)
|
||||||
{
|
{
|
||||||
|
double alpha;
|
||||||
NetWMIcon *icon;
|
NetWMIcon *icon;
|
||||||
Atom type;
|
Atom type;
|
||||||
int format, size, i;
|
int format, size, i;
|
||||||
unsigned long items, rest, *data, pixel;
|
unsigned long items, rest, *data;
|
||||||
unsigned char *imgdata, *wdata;
|
unsigned char *imgdata, *wdata;
|
||||||
|
|
||||||
if(XGetWindowProperty(globalconf.display, w,
|
if(XGetWindowProperty(globalconf.display, w,
|
||||||
|
@ -394,11 +395,11 @@ ewmh_get_window_icon(Window w)
|
||||||
icon->image = p_new(unsigned char, size * 4);
|
icon->image = p_new(unsigned char, size * 4);
|
||||||
for(imgdata = icon->image, i = 2; i < size + 2; i++, imgdata += 4)
|
for(imgdata = icon->image, i = 2; i < size + 2; i++, imgdata += 4)
|
||||||
{
|
{
|
||||||
pixel = data[i];
|
imgdata[3] = (data[i] >> 24) & 0xff; /* A */
|
||||||
imgdata[3] = (pixel >> 24) & 0xff; /* A */
|
alpha = imgdata[3] / 255.0;
|
||||||
imgdata[2] = (pixel >> 16) & 0xff; /* R */
|
imgdata[2] = ((data[i] >> 16) & 0xff) * alpha; /* R */
|
||||||
imgdata[1] = (pixel >> 8) & 0xff; /* G */
|
imgdata[1] = ((data[i] >> 8) & 0xff) * alpha; /* G */
|
||||||
imgdata[0] = pixel & 0xff; /* B */
|
imgdata[0] = (data[i] & 0xff) * alpha; /* B */
|
||||||
}
|
}
|
||||||
|
|
||||||
XFree(wdata);
|
XFree(wdata);
|
||||||
|
|
Loading…
Reference in New Issue