X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Frendercontrol.cc;h=edf4a470d5bff80f17d04f1b17ec7a2ffe4ce1a1;hb=2808ab5bad8ff49a1af909c2515288310cc89378;hp=ebd2cfc84b12711b8fbde0fcd21fbfccef9c3401;hpb=e6bfddf849009bef7bbb75be5147b4a533fa1ad2;p=chaz%2Fopenbox diff --git a/otk/rendercontrol.cc b/otk/rendercontrol.cc index ebd2cfc8..edf4a470 100644 --- a/otk/rendercontrol.cc +++ b/otk/rendercontrol.cc @@ -1,14 +1,13 @@ // -*- 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" @@ -38,7 +37,7 @@ RenderControl *RenderControl::getRenderControl(int 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); @@ -50,15 +49,11 @@ RenderControl::RenderControl(int screen) : _screen(screen) { printf("Initializing RenderControl\n"); - - } RenderControl::~RenderControl() { printf("Destroying RenderControl\n"); - - } void RenderControl::drawRoot(const RenderColor &color) const @@ -120,7 +115,7 @@ void RenderControl::drawSolidBackground(Surface& sf, 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()) @@ -195,4 +190,28 @@ void RenderControl::drawSolidBackground(Surface& sf, } } +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); +} + }