all repos — openbox @ 2808ab5bad8ff49a1af909c2515288310cc89378

openbox fork - make it a bit more like ryudo

add RenderControl::drawMask
Dana Jansens danakj@orodu.net
commit

2808ab5bad8ff49a1af909c2515288310cc89378

parent

58847af218e486f5c1a34ffe947a961a74f97c0a

2 files changed, 35 insertions(+), 3 deletions(-)

jump to
M otk/rendercontrol.ccotk/rendercontrol.cc

@@ -190,4 +190,28 @@ assert(false); // unhandled RenderTexture::ReliefType

} } +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); +} + }
M otk/rendercontrol.hhotk/rendercontrol.hh

@@ -16,6 +16,7 @@ class RenderTexture;

class Font; class RenderColor; class ustring; +class PixmapMask; class RenderControl { protected:

@@ -74,14 +75,21 @@ static RenderControl *getRenderControl(int screen);

virtual void drawRoot(const RenderColor &color) const; + //! Draws a background onto a Surface, as specified by a RenderTexture + /*! + This function will overwrite the entire surface. + */ + virtual void drawBackground(Surface &sf, + const RenderTexture &texture) const = 0; + //! Draws a string onto a Surface virtual void drawString(Surface &sf, const Font &font, int x, int y, const RenderColor &color, const ustring &string) const; - //! Draws a background onto a Surface, as specified by a RenderTexture - virtual void drawBackground(Surface &sf, - const RenderTexture &texture) const = 0; + //! Draws a PixmapMask with a specified color onto a Surface + virtual void drawMask(Surface &sf, const RenderColor &color, + const PixmapMask &mask) const; }; }