// -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
-#ifdef HAVE_CONFIG_H
-# include "../config.h"
-#endif // HAVE_CONFIG_H
+#include "config.h"
#include "rendercontrol.hh"
#include "truerendercontrol.hh"
+#include "pseudorendercontrol.hh"
#include "rendertexture.hh"
#include "rendercolor.hh"
+#include "renderstyle.hh"
#include "display.hh"
#include "screeninfo.hh"
#include "surface.hh"
# include <stdlib.h>
#endif // HAVE_STDLIB_H
-#include "gettext.h"
+#include "../src/gettext.h"
#define _(str) gettext(str)
}
return new TrueRenderControl(screen);
case PseudoColor:
case StaticColor:
-// return new PseudoRenderControl(screen);
+ return new PseudoRenderControl(screen);
case GrayScale:
case StaticGray:
-// return new GrayRenderControl(screen);
+ return new PseudoRenderControl(screen);
default:
printf(_("RenderControl: Unsupported visual %d specified. Aborting.\n"),
vclass);
: _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,
else
XftDrawString8(d, &c, font._xftfont, x, font._xftfont->ascent + y,
(FcChar8*)string.c_str(), string.bytes());
- printf("DRAW A STRING!: %s\n", string.c_str());
return;
}
sf.setPixmap(texture.color());
- int width = sf.width(), height = sf.height();
+ int width = sf.size().width(), height = sf.size().height();
int left = 0, top = 0, right = width - 1, bottom = height - 1;
if (texture.interlaced())
}
}
+void RenderControl::drawMask(Surface &sf, const RenderColor &color,
+ const PixmapMask &mask) const
+{
+ assert(_screen == sf._screen);
+ assert(_screen == color.screen());
+
+ if (mask.mask == None) return; // no mask given
+
+ int width = sf.size().width(), height = sf.size().height();
+
+ // set the clip region
+ int x = (width - mask.w) / 2, y = (height - mask.h) / 2;
+ XSetClipMask(**display, color.gc(), mask.mask);
+ XSetClipOrigin(**display, color.gc(), x, y);
+
+ // fill in the clipped region
+ XFillRectangle(**display, sf.pixmap(), color.gc(), x, y,
+ x + mask.w, y + mask.h);
+
+ // unset the clip region
+ XSetClipMask(**display, color.gc(), None);
+ XSetClipOrigin(**display, color.gc(), 0, 0);
+}
+
}