X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fcolor.cc;h=b50c29d96b7499acc4d4cd022fd5b3158cd0d608;hb=6f5e60f0337e60d904a8f549aeaa631afefc8033;hp=ad30c7a3edc028e4c781773ad1f7fc9d46c182c8;hpb=85c41a1aec90b8daefc425596ea34b6f9d0e643c;p=chaz%2Fopenbox diff --git a/otk/color.cc b/otk/color.cc index ad30c7a3..b50c29d9 100644 --- a/otk/color.cc +++ b/otk/color.cc @@ -11,25 +11,25 @@ extern "C" { #include #include "color.hh" -#include "basedisplay.hh" +#include "display.hh" +#include "screeninfo.hh" +namespace otk { BColor::ColorCache BColor::colorcache; bool BColor::cleancache = false; -BColor::BColor(const BaseDisplay * const _display, unsigned int _screen) - : allocated(false), r(-1), g(-1), b(-1), p(0), dpy(_display), scrn(_screen) +BColor::BColor(unsigned int _screen) + : allocated(false), r(-1), g(-1), b(-1), p(0), scrn(_screen) {} -BColor::BColor(int _r, int _g, int _b, - const BaseDisplay * const _display, unsigned int _screen) - : allocated(false), r(_r), g(_g), b(_b), p(0), dpy(_display), scrn(_screen) +BColor::BColor(int _r, int _g, int _b, unsigned int _screen) + : allocated(false), r(_r), g(_g), b(_b), p(0), scrn(_screen) {} -BColor::BColor(const std::string &_name, - const BaseDisplay * const _display, unsigned int _screen) - : allocated(false), r(-1), g(-1), b(-1), p(0), dpy(_display), scrn(_screen), +BColor::BColor(const std::string &_name, unsigned int _screen) + : allocated(false), r(-1), g(-1), b(-1), p(0), scrn(_screen), colorname(_name) { parseColorName(); } @@ -40,16 +40,14 @@ BColor::~BColor(void) { } -void BColor::setDisplay(const BaseDisplay * const _display, - unsigned int _screen) { - if (_display == display() && _screen == screen()) { +void BColor::setScreen(unsigned int _screen) { + if (_screen == screen()) { // nothing to do return; } deallocate(); - dpy = _display; scrn = _screen; if (! colorname.empty()) { @@ -70,16 +68,14 @@ unsigned long BColor::pixel(void) const { void BColor::parseColorName(void) { - assert(dpy != 0); - if (colorname.empty()) { fprintf(stderr, "BColor: empty colorname, cannot parse (using black)\n"); setRGB(0, 0, 0); } if (scrn == ~(0u)) - scrn = DefaultScreen(display()->getXDisplay()); - Colormap colormap = display()->getScreenInfo(scrn)->getColormap(); + scrn = DefaultScreen(OBDisplay::display); + Colormap colormap = OBDisplay::screenInfo(scrn)->getColormap(); // get rgb values from colorname XColor xcol; @@ -88,7 +84,7 @@ void BColor::parseColorName(void) { xcol.blue = 0; xcol.pixel = 0; - if (! XParseColor(display()->getXDisplay(), colormap, + if (! XParseColor(OBDisplay::display, colormap, colorname.c_str(), &xcol)) { fprintf(stderr, "BColor::allocate: color parse error: \"%s\"\n", colorname.c_str()); @@ -101,10 +97,8 @@ void BColor::parseColorName(void) { void BColor::allocate(void) { - assert(dpy != 0); - - if (scrn == ~(0u)) scrn = DefaultScreen(display()->getXDisplay()); - Colormap colormap = display()->getScreenInfo(scrn)->getColormap(); + if (scrn == ~(0u)) scrn = DefaultScreen(OBDisplay::display); + Colormap colormap = OBDisplay::screenInfo(scrn)->getColormap(); if (! isValid()) { if (colorname.empty()) { @@ -116,7 +110,7 @@ void BColor::allocate(void) { } // see if we have allocated this color before - RGB rgb(display(), scrn, r, g, b); + RGB rgb(scrn, r, g, b); ColorCache::iterator it = colorcache.find(rgb); if (it != colorcache.end()) { // found @@ -133,7 +127,7 @@ void BColor::allocate(void) { xcol.blue = b | b << 8; xcol.pixel = 0; - if (! XAllocColor(display()->getXDisplay(), colormap, &xcol)) { + if (! XAllocColor(OBDisplay::display, colormap, &xcol)) { fprintf(stderr, "BColor::allocate: color alloc error: rgb:%x/%x/%x\n", r, g, b); xcol.pixel = 0; @@ -153,9 +147,7 @@ void BColor::deallocate(void) { if (! allocated) return; - assert(dpy != 0); - - ColorCache::iterator it = colorcache.find(RGB(display(), scrn, r, g, b)); + ColorCache::iterator it = colorcache.find(RGB(scrn, r, g, b)); if (it != colorcache.end()) { if ((*it).second.count >= 1) (*it).second.count--; @@ -173,7 +165,6 @@ BColor &BColor::operator=(const BColor &c) { setRGB(c.r, c.g, c.b); colorname = c.colorname; - dpy = c.dpy; scrn = c.scrn; return *this; } @@ -192,11 +183,11 @@ void BColor::doCacheCleanup(void) { return; } - const BaseDisplay* const display = (*it).first.display; unsigned long *pixels = new unsigned long[ colorcache.size() ]; - unsigned int i, count; + int i; + unsigned count; - for (i = 0; i < display->getNumberOfScreens(); i++) { + for (i = 0; i < ScreenCount(OBDisplay::display); i++) { count = 0; it = colorcache.begin(); @@ -213,11 +204,13 @@ void BColor::doCacheCleanup(void) { } if (count > 0) - XFreeColors(display->getXDisplay(), - display->getScreenInfo(i)->getColormap(), + XFreeColors(OBDisplay::display, + OBDisplay::screenInfo(i)->getColormap(), pixels, count, 0); } delete [] pixels; cleancache = false; } + +}