]> Dogcows Code - chaz/openbox/blobdiff - render/color.c
recent changes
[chaz/openbox] / render / color.c
index 48cd631e25a784ad442f272b526438af6072dc46..485b3d664a0f9cb3dec93912ede0bcf4d16838bc 100644 (file)
@@ -1,3 +1,22 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   color.c for the Openbox window manager
+   Copyright (c) 2003        Ben Jansens
+   Copyright (c) 2003        Derek Foreman
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
 #include "render.h"
 #include "color.h"
 #include "instance.h"
@@ -35,6 +54,11 @@ RrColor *RrColorParse(const RrInstance *inst, gchar *colorname)
     return RrColorNew(inst, xcol.red >> 8, xcol.green >> 8, xcol.blue >> 8);
 }
 
+/*#define NO_COLOR_CACHE*/
+#ifdef DEBUG
+gint id;
+#endif
+
 RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
 {
     /* this should be replaced with something far cooler */
@@ -43,9 +67,11 @@ RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
     gint key;
 
     key = (r << 24) + (g << 16) + (b << 8);
+#ifndef NO_COLOR_CACHE
     if ((out = g_hash_table_lookup(RrColorHash(inst), &key))) {
         out->refcount++;
     } else {
+#endif
         xcol.red = (r << 8) | r;
         xcol.green = (g << 8) | g;
         xcol.blue = (b << 8) | b;
@@ -59,8 +85,13 @@ RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
             out->pixel = xcol.pixel;
             out->key = key;
             out->refcount = 1;
-            g_hash_table_replace(RrColorHash(inst), &out->key, out);
+#ifdef DEBUG
+            out->id = id++;
+#endif
+#ifndef NO_COLOR_CACHE
+            g_hash_table_insert(RrColorHash(inst), &out->key, out);
         }
+#endif
     }
     return out;
 }
@@ -69,7 +100,10 @@ void RrColorFree(RrColor *c)
 {
     if (c) {
         if (--c->refcount < 1) {
+#ifndef NO_COLOR_CACHE
+            g_assert(g_hash_table_lookup(RrColorHash(c->inst), &c->key));
             g_hash_table_remove(RrColorHash(c->inst), &c->key);
+#endif
             if (c->pixel) XFreeColors(RrDisplay(c->inst), RrColormap(c->inst),
                                       &c->pixel, 1, 0);
             if (c->gc) XFreeGC(RrDisplay(c->inst), c->gc);
@@ -272,8 +306,7 @@ gulong RrColorPixel(const RrColor *c)
     return c->pixel;
 }
 
-GC RrColorGC(RrColor *c) /* XXX make this const RrColor* when the GCs are in
-                            a cache.. if possible? */
+GC RrColorGC(RrColor *c)
 {
     if (!c->gc)
         RrColorAllocateGC(c);
This page took 0.024481 seconds and 4 git commands to generate.