X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Frendercolor.cc;h=5da218ea92f84f101620240714e270ab89be83e8;hb=bfea000a7407e51b5659590415e410a47f6f046b;hp=81aef261b6698fb7889e0d0db76ca3be55a1bd6e;hpb=8152d453298bc3747ddcdcfa645b33afae7dc10e;p=chaz%2Fopenbox diff --git a/otk/rendercolor.cc b/otk/rendercolor.cc index 81aef261..5da218ea 100644 --- a/otk/rendercolor.cc +++ b/otk/rendercolor.cc @@ -1,18 +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 "rendercontrol.hh" -extern "C" { -#ifdef HAVE_STDIO_H -# include -#endif -} +#include namespace otk { @@ -33,8 +28,7 @@ RenderColor::RenderColor(int screen, unsigned char red, : _screen(screen), _red(red), _green(green), - _blue(blue), - _gc(0) + _blue(blue) { create(); } @@ -43,8 +37,7 @@ RenderColor::RenderColor(int screen, RGB rgb) : _screen(screen), _red(rgb.r), _green(rgb.g), - _blue(rgb.b), - _gc(0) + _blue(rgb.b) { create(); } @@ -53,8 +46,6 @@ 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]; @@ -69,16 +60,11 @@ 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.pixel = 0; + xcol.red = (_red << 8) | _red; + xcol.green = (_green << 8) | _green; + xcol.blue = (_blue << 8) | _blue; - if (! XAllocColor(**display, info->colormap(), &xcol)) { - fprintf(stderr, "RenderColor: color alloc error: rgb:%x/%x/%x\n", - _red, _green, _blue); - xcol.pixel = 0; - } + display->renderControl(_screen)->allocateColor(&xcol); _pixel = xcol.pixel; gcv.foreground = _pixel; @@ -99,15 +85,16 @@ 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); + assert(item); // better be... if (--item->count <= 0) { // remove from the cache XFreeGC(**display, _gc); _cache[_screen][color] = 0; delete item; + + const ScreenInfo *info = display->screenInfo(_screen); + XFreeColors(**display, info->colormap(), &_pixel, 1, 0); } }