From 262778dccc67b6f35aa8b5a9f230a327291e8068 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Sun, 20 Jun 2010 15:59:27 -0400 Subject: [PATCH] Fix some RGBA color bugs. --- 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 index 771c2201..1ad36ee8 100644 --- 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 index 2b96a55a..7cd87641 100644 --- 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 index a85716a3..9e5d719c 100644 --- 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