summaryrefslogtreecommitdiff
path: root/otk/pseudorendercontrol.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-14 19:18:19 +0000
committerDana Jansens <danakj@orodu.net>2003-02-14 19:18:19 +0000
commite3f6e0ff8195e73f2fa8c9db431941e171dd0041 (patch)
tree138b580fd1d5d831f22554e9338e1ee9fbec051b /otk/pseudorendercontrol.cc
parent53b5c60a5e8bbf2942ef174c2db64db6cdac3e26 (diff)
make reduceDepth set the im->data member, with newly allocated data, so the pixelData in the surface isn't reduced
Diffstat (limited to 'otk/pseudorendercontrol.cc')
-rw-r--r--otk/pseudorendercontrol.cc21
1 files changed, 11 insertions, 10 deletions
diff --git a/otk/pseudorendercontrol.cc b/otk/pseudorendercontrol.cc
index 990a60dd..7af57192 100644
--- a/otk/pseudorendercontrol.cc
+++ b/otk/pseudorendercontrol.cc
@@ -124,18 +124,19 @@ inline const XColor *PseudoRenderControl::pickColor(int r, int g, int b) const
void PseudoRenderControl::reduceDepth(Surface &sf, XImage *im) const
{
pixel32 *data = sf.pixelData();
- char *p = (char *)data;
+ pixel32 *ret = (pixel32*)malloc(im->width * im->height * 4);
+ char *p = (char *)ret;
int x, y;
- for (y = 0; y < im->height; y++) {
- for (x = 0; x < im->width; x++) {
- p[x] = pickColor(data[x] >> default_red_shift,
- data[x] >> default_green_shift,
- data[x] >> default_blue_shift)->pixel;
- }
- data += im->width;
- p += im->bytes_per_line;
+ for (y = 0; y < im->height; y++) {
+ for (x = 0; x < im->width; x++) {
+ p[x] = pickColor(data[x] >> default_red_shift,
+ data[x] >> default_green_shift,
+ data[x] >> default_blue_shift)->pixel;
}
-
+ data += im->width;
+ p += im->bytes_per_line;
+ }
+ im->data = (char*)ret;
}
void PseudoRenderControl::allocateColor(XColor *color) const