no bug - Import translations from android-l10n r=release a=l10n CLOSED TREE
[gecko.git] / gfx / 2d / DrawTargetOffset.h
blob3356cc15bf873cd951fcaee9837e8b7c590b2ae6
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_
10 #include "2D.h"
12 #include "mozilla/Vector.h"
14 #include "Filters.h"
15 #include "Logging.h"
17 #include <vector>
19 namespace mozilla {
20 namespace gfx {
22 class SourceSurfaceOffset : public SourceSurface {
23 public:
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();
44 private:
45 RefPtr<SourceSurface> mSurface;
46 IntPoint mOffset;
49 class DrawTargetOffset : public DrawTarget {
50 public:
51 DrawTargetOffset();
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,
75 const Rect& aSource,
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,
145 aFormat);
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);
183 private:
184 RefPtr<DrawTarget> mDrawTarget;
185 IntPoint mOrigin;
188 } // namespace gfx
189 } // namespace mozilla
191 #endif