add RenderControl::drawMask
This commit is contained in:
parent
58847af218
commit
2808ab5bad
2 changed files with 35 additions and 3 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue