]> Dogcows Code - chaz/openbox/blobdiff - otk/rendercolor.cc
dont use a const_iterator
[chaz/openbox] / otk / rendercolor.cc
index 99dd3341bd25c606416e6c5e5f189bb780712bd1..81aef261b6698fb7889e0d0db76ca3be55a1bd6e 100644 (file)
@@ -8,6 +8,12 @@
 #include "display.hh"
 #include "screeninfo.hh"
 
+extern "C" {
+#ifdef HAVE_STDIO_H
+#  include <stdio.h>
+#endif
+}
+
 namespace otk {
 
 std::map<unsigned long, RenderColor::CacheItem*> *RenderColor::_cache = 0;
@@ -29,14 +35,32 @@ RenderColor::RenderColor(int screen, unsigned char red,
     _green(green),
     _blue(blue),
     _gc(0)
+{
+  create();
+}
+
+RenderColor::RenderColor(int screen, RGB rgb)
+  : _screen(screen),
+    _red(rgb.r),
+    _green(rgb.g),
+    _blue(rgb.b),
+    _gc(0)
+{
+  create();
+}
+
+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];
 
   if (item) {
     _gc = item->gc;
+    _pixel = item->pixel;
     ++item->count;
   } else {
     XGCValues gcv;
@@ -56,22 +80,29 @@ RenderColor::RenderColor(int screen, unsigned char red,
       xcol.pixel = 0;
     }
 
-    gcv.foreground = xcol.pixel;
-    _gc = XCreateGC(**display, info->rootWindow(), GCForeground, &gcv);
+    _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 ...
 
+  printf("DESTROY COLOR: %lx %d\n", color, item->count);
+  
   if (--item->count <= 0) {
     // remove from the cache
     XFreeGC(**display, _gc);
This page took 0.022634 seconds and 4 git commands to generate.