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 Font;
|
||||||
class RenderColor;
|
class RenderColor;
|
||||||
class ustring;
|
class ustring;
|
||||||
|
class PixmapMask;
|
||||||
|
|
||||||
class RenderControl {
|
class RenderControl {
|
||||||
protected:
|
protected:
|
||||||
|
@ -74,14 +75,21 @@ public:
|
||||||
|
|
||||||
virtual void drawRoot(const RenderColor &color) const;
|
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
|
//! Draws a string onto a Surface
|
||||||
virtual void drawString(Surface &sf, const Font &font, int x, int y,
|
virtual void drawString(Surface &sf, const Font &font, int x, int y,
|
||||||
const RenderColor &color,
|
const RenderColor &color,
|
||||||
const ustring &string) const;
|
const ustring &string) const;
|
||||||
|
|
||||||
//! Draws a background onto a Surface, as specified by a RenderTexture
|
//! Draws a PixmapMask with a specified color onto a Surface
|
||||||
virtual void drawBackground(Surface &sf,
|
virtual void drawMask(Surface &sf, const RenderColor &color,
|
||||||
const RenderTexture &texture) const = 0;
|
const PixmapMask &mask) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue