]> Dogcows Code - chaz/openbox/blobdiff - otk/rendercolor.cc
add a keyboard plugin
[chaz/openbox] / otk / rendercolor.cc
index 81aef261b6698fb7889e0d0db76ca3be55a1bd6e..5da218ea92f84f101620240714e270ab89be83e8 100644 (file)
@@ -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 <stdio.h>
-#endif
-}
+#include <cstdio>
 
 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);
   }
 }
 
This page took 0.022953 seconds and 4 git commands to generate.