add an id to colors for debugging purposes

This commit is contained in:
Dana Jansens 2003-10-11 06:45:04 +00:00
parent 7833271d14
commit 35e3370651
2 changed files with 18 additions and 0 deletions

View file

@ -54,6 +54,11 @@ RrColor *RrColorParse(const RrInstance *inst, gchar *colorname)
return RrColorNew(inst, xcol.red >> 8, xcol.green >> 8, xcol.blue >> 8); 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) RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
{ {
/* this should be replaced with something far cooler */ /* this should be replaced with something far cooler */
@ -62,9 +67,11 @@ RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
gint key; gint key;
key = (r << 24) + (g << 16) + (b << 8); key = (r << 24) + (g << 16) + (b << 8);
#ifndef NO_COLOR_CACHE
if ((out = g_hash_table_lookup(RrColorHash(inst), &key))) { if ((out = g_hash_table_lookup(RrColorHash(inst), &key))) {
out->refcount++; out->refcount++;
} else { } else {
#endif
xcol.red = (r << 8) | r; xcol.red = (r << 8) | r;
xcol.green = (g << 8) | g; xcol.green = (g << 8) | g;
xcol.blue = (b << 8) | b; xcol.blue = (b << 8) | b;
@ -78,8 +85,13 @@ RrColor *RrColorNew(const RrInstance *inst, gint r, gint g, gint b)
out->pixel = xcol.pixel; out->pixel = xcol.pixel;
out->key = key; out->key = key;
out->refcount = 1; out->refcount = 1;
#ifdef DEBUG
out->id = id++;
#endif
#ifndef NO_COLOR_CACHE
g_hash_table_insert(RrColorHash(inst), &out->key, out); g_hash_table_insert(RrColorHash(inst), &out->key, out);
} }
#endif
} }
return out; return out;
} }
@ -88,8 +100,10 @@ void RrColorFree(RrColor *c)
{ {
if (c) { if (c) {
if (--c->refcount < 1) { if (--c->refcount < 1) {
#ifndef NO_COLOR_CACHE
g_assert(g_hash_table_lookup(RrColorHash(c->inst), &c->key)); g_assert(g_hash_table_lookup(RrColorHash(c->inst), &c->key));
g_hash_table_remove(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), if (c->pixel) XFreeColors(RrDisplay(c->inst), RrColormap(c->inst),
&c->pixel, 1, 0); &c->pixel, 1, 0);
if (c->gc) XFreeGC(RrDisplay(c->inst), c->gc); if (c->gc) XFreeGC(RrDisplay(c->inst), c->gc);

View file

@ -37,6 +37,10 @@ struct _RrColor {
gint key; gint key;
gint refcount; gint refcount;
#ifdef DEBUG
gint id;
#endif
}; };
void RrColorAllocateGC(RrColor *in); void RrColorAllocateGC(RrColor *in);