X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Frendercolor.cc;h=7a0b5fcc4fcbb0c0c32ae9338791e341709f8d51;hb=6b1381d69daf7c325d4a8165a8b0006d0dce85a5;hp=568e2c7c752e547ed2426b819b0da9188ed8a76e;hpb=c487295c75094be3858b76b23fc9863ec9d46b59;p=chaz%2Fopenbox diff --git a/otk/rendercolor.cc b/otk/rendercolor.cc index 568e2c7c..7a0b5fcc 100644 --- a/otk/rendercolor.cc +++ b/otk/rendercolor.cc @@ -1,13 +1,13 @@ // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -#ifdef HAVE_CONFIG_H -# include "../config.h" -#endif // HAVE_CONFIG_H +#include "config.h" #include "rendercolor.hh" #include "display.hh" #include "screeninfo.hh" +#include + namespace otk { std::map *RenderColor::_cache = 0; @@ -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), @@ -63,6 +52,7 @@ void RenderColor::create() if (item) { _gc = item->gc; + _pixel = item->pixel; ++item->count; } else { XGCValues gcv; @@ -71,9 +61,9 @@ void RenderColor::create() const ScreenInfo *info = display->screenInfo(_screen); XColor xcol; // convert from 0-0xff to 0-0xffff - xcol.red = _red; xcol.red |= xcol.red << 8; - xcol.green = _green; xcol.green |= xcol.green << 8; - xcol.blue = _blue; xcol.blue |= xcol.blue << 8; + xcol.red = (_red << 8) | _red; + xcol.green = (_green << 8) | _green; + xcol.blue = (_blue << 8) | _blue; xcol.pixel = 0; if (! XAllocColor(**display, info->colormap(), &xcol)) { @@ -82,21 +72,24 @@ 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, _pixel); + _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 ...