#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)
RenderControl::RenderControl(int screen)
: _screen(screen)
+
{
printf("Initializing RenderControl\n");
+
}
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
}
reduceDepth(sf, im);
-
- im->data = (char*) data;
-
sf.setPixmap(im);
-
- im->data = NULL;
XDestroyImage(im);
}
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;
if (++c >= w) {
c = 0;
bgi += sfw - w;
- i += orgw - w;
}
}
im->byte_order = endian;
reduceDepth(sf, im);
-
- im->data = (char*) bg;
-
sf.setPixmap(im);
-
- im->data = NULL;
XDestroyImage(im);
}