]> Dogcows Code - chaz/openbox/commitdiff
add RenderControl::drawMask
authorDana Jansens <danakj@orodu.net>
Tue, 11 Feb 2003 22:10:50 +0000 (22:10 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 11 Feb 2003 22:10:50 +0000 (22:10 +0000)
otk/rendercontrol.cc
otk/rendercontrol.hh

index 58c8f555732d8fdd405b010d14c68e7d90ee61dc..edf4a470d5bff80f17d04f1b17ec7a2ffe4ce1a1 100644 (file)
@@ -190,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);
+}
+
 }
index 7d629b6ce34ec8d527016cc24a44ef2d52aaed8d..c8e74b19c1b0a59c49dba598269fa44fcffe9f82 100644 (file)
@@ -16,6 +16,7 @@ class RenderTexture;
 class Font;
 class RenderColor;
 class ustring;
+class PixmapMask;
 
 class RenderControl {
 protected:
@@ -74,14 +75,21 @@ public:
 
   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;
 };
 
 }
This page took 0.02794 seconds and 4 git commands to generate.