X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Frendercolor.cc;h=eb3ffdbc3e3cf3957621ec3fa1501a9df360d5aa;hb=3fe7bded58fb82fd2c1c2a5f9ad2e8f453fa0609;hp=568e2c7c752e547ed2426b819b0da9188ed8a76e;hpb=c487295c75094be3858b76b23fc9863ec9d46b59;p=chaz%2Fopenbox diff --git a/otk/rendercolor.cc b/otk/rendercolor.cc index 568e2c7c..eb3ffdbc 100644 --- a/otk/rendercolor.cc +++ b/otk/rendercolor.cc @@ -33,17 +33,6 @@ RenderColor::RenderColor(int screen, unsigned char red, create(); } -RenderColor::RenderColor(int screen, unsigned char red, - unsigned char green, unsigned char blue) - : _screen(screen), - _red(red), - _green(green), - _blue(blue), - _gc(0) -{ - create(); -} - RenderColor::RenderColor(int screen, RGB rgb) : _screen(screen), _red(rgb.r), @@ -58,6 +47,8 @@ void RenderColor::create() { unsigned long color = _blue | _green << 8 | _red << 16; + printf("CREATE COLOR: %lx\n", color); + // try get a gc from the cache CacheItem *item = _cache[_screen][color]; @@ -82,24 +73,29 @@ void RenderColor::create() xcol.pixel = 0; } - gcv.foreground = xcol.pixel; + _pixel = xcol.pixel; + gcv.foreground = _pixel; gcv.cap_style = CapProjecting; _gc = XCreateGC(**display, info->rootWindow(), GCForeground | GCCapStyle, &gcv); assert(_gc); // insert into the cache - _cache[_screen][color] = new CacheItem(_gc); + item = new CacheItem(_gc); + _cache[_screen][color] = item; + ++item->count; } } RenderColor::~RenderColor() { unsigned long color = _blue | _green << 8 | _red << 16; - + CacheItem *item = _cache[_screen][color]; assert(item); // it better be in the cache ... + printf("DESTROY COLOR: %lx %d\n", color, item->count); + if (--item->count <= 0) { // remove from the cache XFreeGC(**display, _gc);