summaryrefslogtreecommitdiff
path: root/otk
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-13 05:12:01 +0000
committerDana Jansens <danakj@orodu.net>2003-02-13 05:12:01 +0000
commitea20fcc27243621ff9f2195e9dbac4ea1961b17f (patch)
tree0f4df9c60adbaace01f26d434cf2cb0b4fa0027a /otk
parent15f2208209bdf597264d910e8b3e30c29339a315 (diff)
only free allocated colors
Diffstat (limited to 'otk')
-rw-r--r--otk/rendercolor.cc23
1 files changed, 14 insertions, 9 deletions
diff --git a/otk/rendercolor.cc b/otk/rendercolor.cc
index 3e20be1a..c8a8c788 100644
--- a/otk/rendercolor.cc
+++ b/otk/rendercolor.cc
@@ -28,7 +28,8 @@ RenderColor::RenderColor(int screen, unsigned char red,
_red(red),
_green(green),
_blue(blue),
- _allocated(false)
+ _allocated(false),
+ _created(false)
{
}
@@ -37,7 +38,8 @@ RenderColor::RenderColor(int screen, RGB rgb)
_red(rgb.r),
_green(rgb.g),
_blue(rgb.b),
- _allocated(false)
+ _allocated(false),
+ _created(false)
{
}
@@ -68,7 +70,8 @@ void RenderColor::create() const
fprintf(stderr, "RenderColor: color alloc error: rgb:%x/%x/%x\n",
_red, _green, _blue);
xcol.pixel = 0;
- }
+ } else
+ _allocated = true;
_pixel = xcol.pixel;
gcv.foreground = _pixel;
@@ -83,18 +86,18 @@ void RenderColor::create() const
++item->count;
}
- _allocated = true;
+ _created = true;
}
unsigned long RenderColor::pixel() const
{
- if (!_allocated) create();
+ if (!_created) create();
return _pixel;
}
GC RenderColor::gc() const
{
- if (!_allocated) create();
+ if (!_created) create();
return _gc;
}
@@ -102,7 +105,7 @@ RenderColor::~RenderColor()
{
unsigned long color = _blue | _green << 8 | _red << 16;
- if (_allocated) {
+ if (_created) {
CacheItem *item = _cache[_screen][color];
assert(item); // better be...
@@ -112,8 +115,10 @@ RenderColor::~RenderColor()
_cache[_screen][color] = 0;
delete item;
- const ScreenInfo *info = display->screenInfo(_screen);
- XFreeColors(**display, info->colormap(), &_pixel, 1, 0);
+ if (_allocated) {
+ const ScreenInfo *info = display->screenInfo(_screen);
+ XFreeColors(**display, info->colormap(), &_pixel, 1, 0);
+ }
}
}
}