]> Dogcows Code - chaz/openbox/blobdiff - otk/truerendercontrol.cc
kill a comment
[chaz/openbox] / otk / truerendercontrol.cc
index 2f1b710e1a7ef92416cd157baa5ee19bca2656a2..42589dd3e5f8adb2fd8e6f77337ab72826570545 100644 (file)
@@ -9,14 +9,12 @@
 #include "rendertexture.hh"
 
 extern "C" {
-#ifdef    HAVE_STDLIB_H
-#  include <stdlib.h>
-#endif // HAVE_STDLIB_H
-
 #include "../src/gettext.h"
 #define _(str) gettext(str)
 }
 
+#include <cstdlib>
+
 namespace otk {
 
 TrueRenderControl::TrueRenderControl(int screen)
@@ -60,7 +58,8 @@ void TrueRenderControl::reduceDepth(Surface &sf, XImage *im) const
   int r, g, b;
   int x,y;
   pixel32 *data = sf.pixelData();
-  pixel16 *p = (pixel16*) data;
+  pixel32 *ret = (pixel32*)malloc(im->width * im->height * 4);
+  pixel16 *p = (pixel16*) ret;
   switch (im->bits_per_pixel) {
   case 32:
     if ((_red_offset != default_red_shift) ||
@@ -72,13 +71,15 @@ void TrueRenderControl::reduceDepth(Surface &sf, XImage *im) const
           r = (data[x] >> default_red_shift) & 0xFF;
           g = (data[x] >> default_green_shift) & 0xFF;
           b = (data[x] >> default_blue_shift) & 0xFF;
-          data[x] = (r << _red_offset) + (g << _green_offset) +
+          ret[x] = (r << _red_offset) + (g << _green_offset) +
             (b << _blue_offset);
         }
         data += im->width;
       } 
-   }
-   return;
+    } else {
+      memcpy(ret, data, im->width * im->height * 4);
+    }
+    break;
   case 16:
     for (y = 0; y < im->height; y++) {
       for (x = 0; x < im->width; x++) {
@@ -97,6 +98,7 @@ void TrueRenderControl::reduceDepth(Surface &sf, XImage *im) const
   default:
     printf("your bit depth is currently unhandled\n");
   }
+  im->data = (char*)ret;
 }
 
 void TrueRenderControl::allocateColor(XColor *color) const
This page took 0.025957 seconds and 4 git commands to generate.