1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef MOZILLA_GFX_DRAWTARGETOFFSET_H_
8 #define MOZILLA_GFX_DRAWTARGETOFFSET_H_
12 #include "mozilla/Vector.h"
22 class SourceSurfaceOffset
: public SourceSurface
{
24 SourceSurfaceOffset(RefPtr
<SourceSurface
> aSurface
, IntPoint aOffset
)
25 : mSurface(aSurface
), mOffset(aOffset
) {
26 MOZ_RELEASE_ASSERT(mSurface
);
29 virtual SurfaceType
GetType() const override
{ return SurfaceType::OFFSET
; }
30 virtual IntSize
GetSize() const override
{ return mSurface
->GetSize(); }
31 virtual IntRect
GetRect() const override
{
32 return mSurface
->GetRect() + mOffset
;
34 virtual SurfaceFormat
GetFormat() const override
{
35 return mSurface
->GetFormat();
37 virtual already_AddRefed
<DataSourceSurface
> GetDataSurface() override
{
38 return mSurface
->GetDataSurface();
40 virtual already_AddRefed
<SourceSurface
> GetUnderlyingSurface() override
{
41 return mSurface
->GetUnderlyingSurface();
45 RefPtr
<SourceSurface
> mSurface
;
49 class DrawTargetOffset
: public DrawTarget
{
53 bool Init(DrawTarget
* aDrawTarget
, IntPoint aOrigin
);
55 // We'll pestimistically return true here
56 virtual bool IsTiledDrawTarget() const override
{ return true; }
58 virtual DrawTargetType
GetType() const override
{
59 return mDrawTarget
->GetType();
61 virtual BackendType
GetBackendType() const override
{
62 return mDrawTarget
->GetBackendType();
64 virtual already_AddRefed
<SourceSurface
> Snapshot() override
;
65 virtual already_AddRefed
<SourceSurface
> IntoLuminanceSource(
66 LuminanceType aLuminanceType
, float aOpacity
) override
;
67 virtual void DetachAllSnapshots() override
;
68 virtual IntSize
GetSize() const override
{ return mDrawTarget
->GetSize(); }
69 virtual IntRect
GetRect() const override
{
70 return mDrawTarget
->GetRect() + mOrigin
;
73 virtual void Flush() override
;
74 virtual void DrawSurface(SourceSurface
* aSurface
, const Rect
& aDest
,
76 const DrawSurfaceOptions
& aSurfOptions
,
77 const DrawOptions
& aOptions
) override
;
78 virtual void DrawFilter(FilterNode
* aNode
, const Rect
& aSourceRect
,
79 const Point
& aDestPoint
,
80 const DrawOptions
& aOptions
= DrawOptions()) override
;
81 virtual void DrawSurfaceWithShadow(
82 SourceSurface
* aSurface
, const Point
& aDest
, const ShadowOptions
& aShadow
,
83 CompositionOp aOperator
) override
{ /* Not implemented */
84 MOZ_CRASH("GFX: DrawSurfaceWithShadow");
87 virtual void ClearRect(const Rect
& aRect
) override
;
88 virtual void MaskSurface(
89 const Pattern
& aSource
, SourceSurface
* aMask
, Point aOffset
,
90 const DrawOptions
& aOptions
= DrawOptions()) override
;
92 virtual void CopySurface(SourceSurface
* aSurface
, const IntRect
& aSourceRect
,
93 const IntPoint
& aDestination
) override
;
95 virtual void FillRect(const Rect
& aRect
, const Pattern
& aPattern
,
96 const DrawOptions
& aOptions
= DrawOptions()) override
;
97 virtual void FillRoundedRect(
98 const RoundedRect
& aRect
, const Pattern
& aPattern
,
99 const DrawOptions
& aOptions
= DrawOptions()) override
;
100 virtual void StrokeRect(const Rect
& aRect
, const Pattern
& aPattern
,
101 const StrokeOptions
& aStrokeOptions
= StrokeOptions(),
102 const DrawOptions
& aOptions
= DrawOptions()) override
;
103 virtual void StrokeLine(const Point
& aStart
, const Point
& aEnd
,
104 const Pattern
& aPattern
,
105 const StrokeOptions
& aStrokeOptions
= StrokeOptions(),
106 const DrawOptions
& aOptions
= DrawOptions()) override
;
107 virtual void Stroke(const Path
* aPath
, const Pattern
& aPattern
,
108 const StrokeOptions
& aStrokeOptions
= StrokeOptions(),
109 const DrawOptions
& aOptions
= DrawOptions()) override
;
110 virtual void Fill(const Path
* aPath
, const Pattern
& aPattern
,
111 const DrawOptions
& aOptions
= DrawOptions()) override
;
112 virtual void FillGlyphs(ScaledFont
* aFont
, const GlyphBuffer
& aBuffer
,
113 const Pattern
& aPattern
,
114 const DrawOptions
& aOptions
= DrawOptions()) override
;
115 virtual void StrokeGlyphs(
116 ScaledFont
* aFont
, const GlyphBuffer
& aBuffer
, const Pattern
& aPattern
,
117 const StrokeOptions
& aStrokeOptions
= StrokeOptions(),
118 const DrawOptions
& aOptions
= DrawOptions()) override
;
119 virtual void Mask(const Pattern
& aSource
, const Pattern
& aMask
,
120 const DrawOptions
& aOptions
= DrawOptions()) override
;
121 virtual void PushClip(const Path
* aPath
) override
;
122 virtual void PushClipRect(const Rect
& aRect
) override
;
123 virtual void PopClip() override
;
124 virtual void PushLayer(bool aOpaque
, Float aOpacity
, SourceSurface
* aMask
,
125 const Matrix
& aMaskTransform
,
126 const IntRect
& aBounds
= IntRect(),
127 bool aCopyBackground
= false) override
;
128 virtual void PushLayerWithBlend(
129 bool aOpaque
, Float aOpacity
, SourceSurface
* aMask
,
130 const Matrix
& aMaskTransform
, const IntRect
& aBounds
= IntRect(),
131 bool aCopyBackground
= false,
132 CompositionOp
= CompositionOp::OP_OVER
) override
;
133 virtual bool Draw3DTransformedSurface(SourceSurface
* aSurface
,
134 const Matrix4x4
& aMatrix
) override
;
135 virtual void PopLayer() override
;
137 virtual void SetTransform(const Matrix
& aTransform
) override
;
139 virtual void SetPermitSubpixelAA(bool aPermitSubpixelAA
) override
;
141 virtual already_AddRefed
<SourceSurface
> CreateSourceSurfaceFromData(
142 unsigned char* aData
, const IntSize
& aSize
, int32_t aStride
,
143 SurfaceFormat aFormat
) const override
{
144 return mDrawTarget
->CreateSourceSurfaceFromData(aData
, aSize
, aStride
,
147 virtual already_AddRefed
<SourceSurface
> OptimizeSourceSurface(
148 SourceSurface
* aSurface
) const override
{
149 return mDrawTarget
->OptimizeSourceSurface(aSurface
);
152 virtual already_AddRefed
<SourceSurface
> CreateSourceSurfaceFromNativeSurface(
153 const NativeSurface
& aSurface
) const override
{
154 return mDrawTarget
->CreateSourceSurfaceFromNativeSurface(aSurface
);
157 virtual already_AddRefed
<DrawTarget
> CreateSimilarDrawTarget(
158 const IntSize
& aSize
, SurfaceFormat aFormat
) const override
{
159 return mDrawTarget
->CreateSimilarDrawTarget(aSize
, aFormat
);
162 virtual bool CanCreateSimilarDrawTarget(
163 const IntSize
& aSize
, SurfaceFormat aFormat
) const override
{
164 return mDrawTarget
->CanCreateSimilarDrawTarget(aSize
, aFormat
);
166 virtual RefPtr
<DrawTarget
> CreateClippedDrawTarget(
167 const Rect
& aBounds
, SurfaceFormat aFormat
) override
;
169 virtual already_AddRefed
<PathBuilder
> CreatePathBuilder(
170 FillRule aFillRule
= FillRule::FILL_WINDING
) const override
{
171 return mDrawTarget
->CreatePathBuilder(aFillRule
);
174 virtual already_AddRefed
<GradientStops
> CreateGradientStops(
175 GradientStop
* aStops
, uint32_t aNumStops
,
176 ExtendMode aExtendMode
= ExtendMode::CLAMP
) const override
{
177 return mDrawTarget
->CreateGradientStops(aStops
, aNumStops
, aExtendMode
);
179 virtual already_AddRefed
<FilterNode
> CreateFilter(FilterType aType
) override
{
180 return mDrawTarget
->CreateFilter(aType
);
184 RefPtr
<DrawTarget
> mDrawTarget
;
189 } // namespace mozilla