diff options
Diffstat (limited to 'Source/WebCore/platform/graphics/cairo/PlatformContextCairo.h')
-rw-r--r-- | Source/WebCore/platform/graphics/cairo/PlatformContextCairo.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/cairo/PlatformContextCairo.h b/Source/WebCore/platform/graphics/cairo/PlatformContextCairo.h index c6cceda..937417a 100644 --- a/Source/WebCore/platform/graphics/cairo/PlatformContextCairo.h +++ b/Source/WebCore/platform/graphics/cairo/PlatformContextCairo.h @@ -31,6 +31,25 @@ namespace WebCore { +// In Cairo image masking is immediate, so to emulate image clipping we must save masking +// details as part of the context state and apply them during platform restore. +class ImageMaskInformation { +public: + void update(cairo_surface_t* maskSurface, const FloatRect& maskRect) + { + m_maskSurface = maskSurface; + m_maskRect = maskRect; + } + + bool isValid() const { return m_maskSurface; } + cairo_surface_t* maskSurface() const { return m_maskSurface.get(); } + const FloatRect& maskRect() const { return m_maskRect; } + +private: + RefPtr<cairo_surface_t> m_maskSurface; + FloatRect m_maskRect; +}; + // Much like PlatformContextSkia in the Skia port, this class holds information that // would normally be private to GraphicsContext, except that we want to allow access // to it in Font and Image code. This allows us to separate the concerns of Cairo-specific @@ -40,11 +59,17 @@ class PlatformContextCairo { WTF_MAKE_NONCOPYABLE(PlatformContextCairo); public: PlatformContextCairo(cairo_t*); + cairo_t* cr() { return m_cr.get(); } void setCr(cairo_t* cr) { m_cr = cr; } + void save(); + void restore(); + void pushImageMask(cairo_surface_t*, const FloatRect&); + private: RefPtr<cairo_t> m_cr; + Vector<ImageMaskInformation> m_maskImageStack; }; } // namespace WebCore |