// -*- 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"
: _screen(screen)
{
printf("Initializing RenderControl\n");
-
-
}
RenderControl::~RenderControl()
{
printf("Destroying RenderControl\n");
-
-
}
void RenderControl::drawRoot(const RenderColor &color) const
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);
+}
+
}