wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 262778dccc67b6f35aa8b5a9f230a327291e8068
parent 683b3ed89507cb9c91f84f330f1434e9694311f4
Author: Kris Maglione <kris@suckless.org>
Date:   Sun, 20 Jun 2010 15:59:27 -0400

Fix some RGBA color bugs.

Diffstat:
alternative_wmiircs/python/pygmi/fs.py | 4----
lib/libstuff/x11/colors/parsecolor.c | 17+++++++++--------
lib/libstuff/x11/initdisplay.c | 4+++-
3 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/alternative_wmiircs/python/pygmi/fs.py b/alternative_wmiircs/python/pygmi/fs.py @@ -486,10 +486,6 @@ class Button(object): self._label = label if colors is not None: self._colors = colors - try: - unicode(self._label) - except: - print repr(self._label) return ' '.join([Color(c).hex for c in self._colors or self.colors] + [unicode(self._label or '')]) colors = property( diff --git a/lib/libstuff/x11/colors/parsecolor.c b/lib/libstuff/x11/colors/parsecolor.c @@ -6,7 +6,6 @@ ulong pixelvalue(Window *w, Color *c) { XColor xc; - ulong pixel; if(w->visual->class != TrueColor) { if(c->pixel != ~0UL) @@ -17,13 +16,15 @@ pixelvalue(Window *w, Color *c) { XAllocColor(display, w->colormap, &xc); return c->pixel = xc.pixel; } - pixel = ((ulong)(c->alpha&0xff00) << 16) - | ((ulong)(c->red&0xff00) << 8) - | ((ulong)(c->green&0xff00) << 0) - | ((ulong)(c->blue&0xff00) >> 8); - if(w->depth < 32) - pixel |= 0xffUL << 24; - return pixel; + if(w->depth == 32 || c->alpha == 0) + return (((ulong)c->alpha & 0xff00) << 16) + | (((ulong)c->red & 0xff00) << 8) + | (((ulong)c->green & 0xff00) << 0) + | (((ulong)c->blue & 0xff00) >> 8); + else + return ((ulong)c->red * 0xffff / c->alpha & 0xff00) << 8 + | ((ulong)c->green * 0xffff / c->alpha & 0xff00) << 0 + | ((ulong)c->blue * 0xffff / c->alpha & 0xff00) >> 8; } bool diff --git a/lib/libstuff/x11/initdisplay.c b/lib/libstuff/x11/initdisplay.c @@ -22,10 +22,12 @@ static int Lfmt(Fmt *f) { Color c; +#define fix(c, m) (ushort)((c.alpha ? ((ulong)c.m * 0xffff) / c.alpha : 0) >> 8) c = va_arg(f->args, Color); return fmtprint(f, c.alpha < 0xff00 ? "rgba:%02uhx/%02uhx/%02uhx/%02uhx" : "#%02uhx%02uhx%02uhx", - c.red >> 8, c.green >> 8, c.blue >> 8, c.alpha >> 8); + fix(c, red), fix(c, green), fix(c, blue), c.alpha >> 8); +#undef fix } static int