]> Dogcows Code - chaz/openbox/blobdiff - otk/rendercontrol.cc
only hide the dialog if a default button exists when enter is hit
[chaz/openbox] / otk / rendercontrol.cc
index 2e80217d499ff06b80a04352479becf320ec0bc3..8f9329688c04c4f09fffdd9db6967f466999c947 100644 (file)
 #include "surface.hh"
 #include "font.hh"
 #include "ustring.hh"
+#include "property.hh"
 
 extern "C" {
-#ifdef    HAVE_STDLIB_H
-#  include <stdlib.h>
-#endif // HAVE_STDLIB_H
+#ifdef    HAVE_SYS_WAIT_H
+#  include <sys/wait.h>
+#endif // HAVE_SYS_WAIT_H
+
+#ifdef    HAVE_UNISTD_H
+#  include <unistd.h>
+#endif // HAVE_UNISTD_H
 
 #include "../src/gettext.h"
 #define _(str) gettext(str)
 }
 
+#include <cstdlib>
+
 namespace otk {
 
 RenderControl *RenderControl::getRenderControl(int screen)
@@ -47,8 +54,10 @@ RenderControl *RenderControl::getRenderControl(int screen)
 
 RenderControl::RenderControl(int screen)
   : _screen(screen)
+    
 {
   printf("Initializing RenderControl\n");
+  
 }
 
 RenderControl::~RenderControl()
@@ -56,13 +65,6 @@ RenderControl::~RenderControl()
   printf("Destroying RenderControl\n");
 }
 
-void RenderControl::drawRoot(const RenderColor &color) const
-{
-  Window root = display->screenInfo(_screen)->rootWindow();
-  XSetWindowBackground(**display, root, color.pixel());
-  XClearWindow(**display, root);
-}
-
 void RenderControl::drawString(Surface& sf, const Font &font, int x, int y,
                               const RenderColor &color,
                                const ustring &string) const
@@ -285,12 +287,7 @@ void RenderControl::drawGradientBackground(
   }
 
   reduceDepth(sf, im);
-
-  im->data = (char*) data;
-
   sf.setPixmap(im);
-
-  im->data = NULL;
   XDestroyImage(im);
 }
 
@@ -451,12 +448,32 @@ void RenderControl::drawImage(Surface &sf, int w, int h,
   if (x < 0) x = 0;
   if (y < 0) y = 0;
 
-  // XXX SCALING!@!&*(@! to make it fit on the surface
-  int orgw = w;
+  // Reduce the image size if its too big to make it fit on the surface
+  int oldw = w, oldh = h;
+  unsigned long *olddata = data;
   if (w > sfw) w = sfw;
   if (h > sfh) h = sfh;
+  unsigned long newdata[w*h];
+  if (w < oldw || h < oldh) {
+    double dx = oldw / (double)w;
+    double dy = oldh / (double)h;
+    double px = 0.0;
+    double py = 0.0;
+    int iy = 0;
+    for (i = 0, c = 0, e = w*h; i < e; ++i) {
+      newdata[i] = olddata[(int)px + iy];
+      if (++c >= w) {
+        c = 0;
+        px = 0;
+        py += dy;
+        iy = (int)py * oldw;
+      } else
+        px += dx;
+    }
+    data = newdata;
+  }
 
-  for (i = 0, c = 0, bgi = y * sfw + x, e = orgw*h; i < e; ++i, ++bgi) {
+  for (i = 0, c = 0, bgi = y * sfw + x, e = w*h; i < e; ++i, ++bgi) {
     unsigned char alpha = data[i] >> 24;
     unsigned char r = data[i] >> 16;
     unsigned char g = data[i] >> 8;
@@ -477,7 +494,6 @@ void RenderControl::drawImage(Surface &sf, int w, int h,
     if (++c >= w) {
       c = 0;
       bgi += sfw - w;
-      i += orgw - w;
     }
   }
 
@@ -488,12 +504,7 @@ void RenderControl::drawImage(Surface &sf, int w, int h,
   im->byte_order = endian;
 
   reduceDepth(sf, im);
-
-  im->data = (char*) bg;
-
   sf.setPixmap(im);
-
-  im->data = NULL;
   XDestroyImage(im);
 }
 
This page took 0.022002 seconds and 4 git commands to generate.