add RenderControl::drawMask

This commit is contained in:
Dana Jansens 2003-02-11 22:10:50 +00:00
parent 58847af218
commit 2808ab5bad
2 changed files with 35 additions and 3 deletions

View 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);
}
}

View 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;
};
}