Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Side by Side Diff: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h

Issue 1710633002: Pull up a subset of CanvasRenderingContext2D into BaseRenderingContext2D. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: now with moar copy detection. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 * Copyright (C) 2006, 2007, 2009, 2010, 2011, 2012 Apple Inc. All rights reserv ed. 2 // Use of this source code is governed by a BSD-style license that can be
3 * 3 // found in the LICENSE file.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25 4
26 #ifndef CanvasRenderingContext2D_h 5 #ifndef BaseRenderingContext2D_h
27 #define CanvasRenderingContext2D_h 6 #define BaseRenderingContext2D_h
28 7
29 #include "bindings/core/v8/ScriptWrappable.h" 8 #include "bindings/core/v8/UnionTypesCore.h"
30 #include "bindings/modules/v8/UnionTypesModules.h" 9 #include "bindings/modules/v8/UnionTypesModules.h"
31 #include "core/html/canvas/CanvasContextCreationAttributes.h"
32 #include "core/html/canvas/CanvasRenderingContext.h" 10 #include "core/html/canvas/CanvasRenderingContext.h"
33 #include "core/html/canvas/CanvasRenderingContextFactory.h"
34 #include "core/svg/SVGResourceClient.h"
35 #include "modules/ModulesExport.h" 11 #include "modules/ModulesExport.h"
36 #include "modules/canvas2d/Canvas2DContextAttributes.h"
37 #include "modules/canvas2d/CanvasPathMethods.h" 12 #include "modules/canvas2d/CanvasPathMethods.h"
38 #include "modules/canvas2d/CanvasRenderingContext2DState.h" 13 #include "modules/canvas2d/CanvasRenderingContext2DState.h"
39 #include "platform/graphics/GraphicsTypes.h"
40 #include "platform/heap/GarbageCollected.h"
41 #include "public/platform/WebThread.h"
42 #include "wtf/Vector.h"
43 #include "wtf/text/WTFString.h"
44
45 namespace blink { class WebLayer; }
46 14
47 namespace blink { 15 namespace blink {
48 16
49 class CanvasImageSource; 17 class CanvasImageSource;
50 class Element; 18 class Color;
51 class ExceptionState; 19 class Image;
52 class FloatRect; 20 class ImageBuffer;
53 class FloatSize;
54 class Font;
55 class FontMetrics;
56 class HitRegion;
57 class HitRegionOptions;
58 class HitRegionManager;
59 class ImageData;
60 class Path2D; 21 class Path2D;
61 class SVGMatrixTearOff; 22 class SVGMatrixTearOff;
62 class TextMetrics;
63 23
64 typedef HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap Canva sImageSourceUnion; 24 typedef HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap Canva sImageSourceUnion;
65 25
66 class MODULES_EXPORT CanvasRenderingContext2D final : public CanvasRenderingCont ext, public CanvasPathMethods, public WebThread::TaskObserver, public SVGResourc eClient { 26 class MODULES_EXPORT BaseRenderingContext2D : public WillBeGarbageCollectedMixin , public CanvasPathMethods {
67 DEFINE_WRAPPERTYPEINFO();
68 USING_PRE_FINALIZER(CanvasRenderingContext2D, dispose);
69 public: 27 public:
70 class Factory : public CanvasRenderingContextFactory { 28 ~BaseRenderingContext2D() override;
71 WTF_MAKE_NONCOPYABLE(Factory);
72 public:
73 Factory() {}
74 ~Factory() override {}
75
76 PassOwnPtrWillBeRawPtr<CanvasRenderingContext> create(HTMLCanvasElement* canvas, const CanvasContextCreationAttributes& attrs, Document& document) overr ide
77 {
78 return adoptPtrWillBeNoop(new CanvasRenderingContext2D(canvas, attrs , document));
79 }
80 CanvasRenderingContext::ContextType contextType() const override { retur n CanvasRenderingContext::Context2d; }
81 void onError(HTMLCanvasElement*, const String& error) override { }
82 };
83
84 ~CanvasRenderingContext2D() override;
85 29
86 void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const; 30 void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const;
87 void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&); 31 void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&);
88 32
89 void fillStyle(StringOrCanvasGradientOrCanvasPattern&) const; 33 void fillStyle(StringOrCanvasGradientOrCanvasPattern&) const;
90 void setFillStyle(const StringOrCanvasGradientOrCanvasPattern&); 34 void setFillStyle(const StringOrCanvasGradientOrCanvasPattern&);
91 35
92 double lineWidth() const; 36 double lineWidth() const;
93 void setLineWidth(double); 37 void setLineWidth(double);
94 38
(...skipping 20 matching lines...) Expand all
115 59
116 double shadowBlur() const; 60 double shadowBlur() const;
117 void setShadowBlur(double); 61 void setShadowBlur(double);
118 62
119 String shadowColor() const; 63 String shadowColor() const;
120 void setShadowColor(const String&); 64 void setShadowColor(const String&);
121 65
122 double globalAlpha() const; 66 double globalAlpha() const;
123 void setGlobalAlpha(double); 67 void setGlobalAlpha(double);
124 68
125 bool isContextLost() const override;
126
127 bool shouldAntialias() const;
128 void setShouldAntialias(bool) override;
129
130 String globalCompositeOperation() const; 69 String globalCompositeOperation() const;
131 void setGlobalCompositeOperation(const String&); 70 void setGlobalCompositeOperation(const String&);
132 71
133 String filter() const; 72 String filter() const;
134 void setFilter(const String&); 73 void setFilter(const String&);
135 74
136 void save(); 75 void save();
137 void restore(); 76 void restore();
138 77
139 PassRefPtrWillBeRawPtr<SVGMatrixTearOff> currentTransform() const; 78 PassRefPtrWillBeRawPtr<SVGMatrixTearOff> currentTransform() const;
(...skipping 13 matching lines...) Expand all
153 void stroke(); 92 void stroke();
154 void stroke(Path2D*); 93 void stroke(Path2D*);
155 void clip(const String& winding = "nonzero"); 94 void clip(const String& winding = "nonzero");
156 void clip(Path2D*, const String& winding = "nonzero"); 95 void clip(Path2D*, const String& winding = "nonzero");
157 96
158 bool isPointInPath(const double x, const double y, const String& winding = " nonzero"); 97 bool isPointInPath(const double x, const double y, const String& winding = " nonzero");
159 bool isPointInPath(Path2D*, const double x, const double y, const String& wi nding = "nonzero"); 98 bool isPointInPath(Path2D*, const double x, const double y, const String& wi nding = "nonzero");
160 bool isPointInStroke(const double x, const double y); 99 bool isPointInStroke(const double x, const double y);
161 bool isPointInStroke(Path2D*, const double x, const double y); 100 bool isPointInStroke(Path2D*, const double x, const double y);
162 101
163 void scrollPathIntoView(); 102 void clearRect(double x, double y, double width, double height);
164 void scrollPathIntoView(Path2D*);
165
166 void clearRect(double x, double y, double width, double height) override;
167 void fillRect(double x, double y, double width, double height); 103 void fillRect(double x, double y, double width, double height);
168 void strokeRect(double x, double y, double width, double height); 104 void strokeRect(double x, double y, double width, double height);
169 105
170 void drawImage(const CanvasImageSourceUnion&, double x, double y, ExceptionS tate&); 106 void drawImage(const CanvasImageSourceUnion&, double x, double y, ExceptionS tate&);
171 void drawImage(const CanvasImageSourceUnion&, double x, double y, double wid th, double height, ExceptionState&); 107 void drawImage(const CanvasImageSourceUnion&, double x, double y, double wid th, double height, ExceptionState&);
172 void drawImage(const CanvasImageSourceUnion&, double sx, double sy, double s w, double sh, double dx, double dy, double dw, double dh, ExceptionState&); 108 void drawImage(const CanvasImageSourceUnion&, double sx, double sy, double s w, double sh, double dx, double dy, double dw, double dh, ExceptionState&);
173 void drawImage(CanvasImageSource*, double sx, double sy, double sw, double s h, double dx, double dy, double dw, double dh, ExceptionState&); 109 void drawImage(CanvasImageSource*, double sx, double sy, double sw, double s h, double dx, double dy, double dw, double dh, ExceptionState&);
174 110
175 CanvasGradient* createLinearGradient(double x0, double y0, double x1, double y1); 111 CanvasGradient* createLinearGradient(double x0, double y0, double x1, double y1);
176 CanvasGradient* createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState&); 112 CanvasGradient* createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState&);
177 CanvasPattern* createPattern(const CanvasImageSourceUnion&, const String& re petitionType, ExceptionState&); 113 CanvasPattern* createPattern(const CanvasImageSourceUnion&, const String& re petitionType, ExceptionState&);
178 114
179 ImageData* createImageData(ImageData*) const; 115 ImageData* createImageData(ImageData*) const;
180 ImageData* createImageData(double width, double height, ExceptionState&) con st; 116 ImageData* createImageData(double width, double height, ExceptionState&) con st;
181 ImageData* getImageData(double sx, double sy, double sw, double sh, Exceptio nState&) const; 117 ImageData* getImageData(double sx, double sy, double sw, double sh, Exceptio nState&) const;
182 void putImageData(ImageData*, double dx, double dy, ExceptionState&); 118 void putImageData(ImageData*, double dx, double dy, ExceptionState&);
183 void putImageData(ImageData*, double dx, double dy, double dirtyX, double di rtyY, double dirtyWidth, double dirtyHeight, ExceptionState&); 119 void putImageData(ImageData*, double dx, double dy, double dirtyX, double di rtyY, double dirtyWidth, double dirtyHeight, ExceptionState&);
184 120
185 void reset() override;
186
187 String font() const;
188 void setFont(const String&) override;
189
190 String textAlign() const;
191 void setTextAlign(const String&);
192
193 String textBaseline() const;
194 void setTextBaseline(const String&);
195
196 String direction() const;
197 void setDirection(const String&);
198
199 void fillText(const String& text, double x, double y);
200 void fillText(const String& text, double x, double y, double maxWidth);
201 void strokeText(const String& text, double x, double y);
202 void strokeText(const String& text, double x, double y, double maxWidth);
203 TextMetrics* measureText(const String& text);
204
205 bool imageSmoothingEnabled() const; 121 bool imageSmoothingEnabled() const;
206 void setImageSmoothingEnabled(bool); 122 void setImageSmoothingEnabled(bool);
207 String imageSmoothingQuality() const; 123 String imageSmoothingQuality() const;
208 void setImageSmoothingQuality(const String&); 124 void setImageSmoothingQuality(const String&);
209 125
210 void getContextAttributes(Canvas2DContextAttributes&) const; 126 virtual bool originClean() const = 0;
127 virtual void setOriginTainted() = 0;
128 virtual bool wouldTaintOrigin(CanvasImageSource*) = 0;
211 129
212 void drawFocusIfNeeded(Element*); 130 virtual int width() const = 0;
213 void drawFocusIfNeeded(Path2D*, Element*); 131 virtual int height() const = 0;
214 132
215 void addHitRegion(const HitRegionOptions&, ExceptionState&); 133 virtual bool hasImageBuffer() const = 0;
216 void removeHitRegion(const String& id); 134 virtual ImageBuffer* imageBuffer() const = 0;
217 void clearHitRegions();
218 HitRegion* hitRegionAtPoint(const FloatPoint&);
219 unsigned hitRegionsCount() const override;
220 135
221 void loseContext(LostContextMode) override; 136 virtual bool parseColorOrCurrentColor(Color&, const String& colorString) con st = 0;
222 void didSetSurfaceSize() override;
223 137
224 void restoreCanvasMatrixClipStack(SkCanvas*) const override; 138 virtual SkCanvas* drawingCanvas() const = 0;
139 virtual SkCanvas* existingDrawingCanvas() const = 0;
140 virtual void disableDeferral(DisableDeferralReason) = 0;
225 141
226 // TaskObserver implementation 142 virtual AffineTransform baseTransform() const = 0;
227 void didProcessTask() override;
228 void willProcessTask() override { }
229 143
230 void styleDidChange(const ComputedStyle* oldStyle, const ComputedStyle& newS tyle) override; 144 virtual void didDraw(const SkIRect& dirtyRect) = 0;
231 145
232 // SVGResourceClient implementation 146 virtual bool stateHasFilter() = 0;
233 void filterNeedsInvalidation() override; 147 virtual SkImageFilter* stateGetFilter() = 0;
234 148
235 private: 149 virtual void validateStateStack() = 0;
236 friend class CanvasRenderingContext2DAutoRestoreSkCanvas;
237 150
238 CanvasRenderingContext2D(HTMLCanvasElement*, const CanvasContextCreationAttr ibutes& attrs, Document&); 151 virtual bool hasAlpha() const = 0;
239 152
240 void dispose(); 153 virtual bool isContextLost() const = 0;
154
155 DECLARE_VIRTUAL_TRACE();
156
157 protected:
158 BaseRenderingContext2D();
241 159
242 CanvasRenderingContext2DState& modifiableState(); 160 CanvasRenderingContext2DState& modifiableState();
243 const CanvasRenderingContext2DState& state() const { return *m_stateStack.la st(); } 161 const CanvasRenderingContext2DState& state() const { return *m_stateStack.la st(); }
244 162
245 void setShadow(const FloatSize& offset, double blur, RGBA32 color);
246
247 void dispatchContextLostEvent(Timer<CanvasRenderingContext2D>*);
248 void dispatchContextRestoredEvent(Timer<CanvasRenderingContext2D>*);
249 void tryRestoreContextEvent(Timer<CanvasRenderingContext2D>*);
250
251 bool computeDirtyRect(const FloatRect& localBounds, SkIRect*); 163 bool computeDirtyRect(const FloatRect& localBounds, SkIRect*);
252 bool computeDirtyRect(const FloatRect& localBounds, const SkIRect& transform edClipBounds, SkIRect*); 164 bool computeDirtyRect(const FloatRect& localBounds, const SkIRect& transform edClipBounds, SkIRect*);
253 void didDraw(const SkIRect&);
254 165
255 SkCanvas* drawingCanvas() const; 166 void drawForText(const Font&, const TextRunPaintInfo&, const FloatPoint& loc ation, CanvasRenderingContext2DState::PaintType);
256 167
257 void unwindStateStack(); 168 void inflateStrokeRect(FloatRect&) const;
169
170 enum DrawType {
171 ClipFill, // Fill that is already known to cover the current clip
172 UntransformedUnclippedFill
173 };
174
175 void checkOverdraw(const SkRect&, const SkPaint*, CanvasRenderingContext2DSt ate::ImageType, DrawType);
176
177 WillBeHeapVector<OwnPtrWillBeMember<CanvasRenderingContext2DState>> m_stateS tack;
178 AntiAliasingMode m_clipAntialiasing;
179
180 private:
258 void realizeSaves(); 181 void realizeSaves();
259 182
260 void pruneLocalFontCache(size_t targetSize);
261 void schedulePruneLocalFontCacheIfNeeded();
262
263 bool shouldDrawImageAntialiased(const FloatRect& destRect) const; 183 bool shouldDrawImageAntialiased(const FloatRect& destRect) const;
264 184
265 template<typename DrawFunc, typename ContainsFunc> 185 template<typename DrawFunc, typename ContainsFunc>
266 bool draw(const DrawFunc&, const ContainsFunc&, const SkRect& bounds, Canvas RenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType = C anvasRenderingContext2DState::NoImage); 186 bool draw(const DrawFunc&, const ContainsFunc&, const SkRect& bounds, Canvas RenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType = C anvasRenderingContext2DState::NoImage);
267 void drawPathInternal(const Path&, CanvasRenderingContext2DState::PaintType, SkPath::FillType = SkPath::kWinding_FillType); 187 void drawPathInternal(const Path&, CanvasRenderingContext2DState::PaintType, SkPath::FillType = SkPath::kWinding_FillType);
268 void drawImageInternal(SkCanvas*, CanvasImageSource*, Image*, const FloatRec t& srcRect, const FloatRect& dstRect, const SkPaint*); 188 void drawImageInternal(SkCanvas*, CanvasImageSource*, Image*, const FloatRec t& srcRect, const FloatRect& dstRect, const SkPaint*);
269 void clipInternal(const Path&, const String& windingRuleString); 189 void clipInternal(const Path&, const String& windingRuleString);
270 190
271 bool isPointInPathInternal(const Path&, const double x, const double y, cons t String& windingRuleString); 191 bool isPointInPathInternal(const Path&, const double x, const double y, cons t String& windingRuleString);
272 bool isPointInStrokeInternal(const Path&, const double x, const double y); 192 bool isPointInStrokeInternal(const Path&, const double x, const double y);
273 193
274 void scrollPathIntoViewInternal(const Path&);
275
276 void drawTextInternal(const String&, double x, double y, CanvasRenderingCont ext2DState::PaintType, double* maxWidth = nullptr);
277
278 const Font& accessFont();
279 int getFontBaseline(const FontMetrics&) const;
280
281 void clearCanvas();
282 bool rectContainsTransformedRect(const FloatRect&, const SkIRect&) const;
283
284 void inflateStrokeRect(FloatRect&) const;
285
286 template<typename DrawFunc> 194 template<typename DrawFunc>
287 void compositedDraw(const DrawFunc&, SkCanvas*, CanvasRenderingContext2DStat e::PaintType, CanvasRenderingContext2DState::ImageType); 195 void compositedDraw(const DrawFunc&, SkCanvas*, CanvasRenderingContext2DStat e::PaintType, CanvasRenderingContext2DState::ImageType);
288 196
289 void drawFocusIfNeededInternal(const Path&, Element*); 197 void clearCanvas();
290 bool focusRingCallIsValid(const Path&, Element*); 198 bool rectContainsTransformedRect(const FloatRect&, const SkIRect&) const;
291 void drawFocusRing(const Path&);
292 void updateElementAccessibility(const Path&, Element*);
293
294 void validateStateStack();
295
296 enum DrawType {
297 ClipFill, // Fill that is already known to cover the current clip
298 UntransformedUnclippedFill
299 };
300
301 void checkOverdraw(const SkRect&, const SkPaint*, CanvasRenderingContext2DSt ate::ImageType, DrawType);
302
303 CanvasRenderingContext::ContextType contextType() const override { return Ca nvasRenderingContext::Context2d; }
304 bool is2d() const override { return true; }
305 bool isAccelerated() const override;
306 bool hasAlpha() const override { return m_hasAlpha; }
307 void setIsHidden(bool) override;
308 void stop() final;
309 DECLARE_VIRTUAL_TRACE();
310
311 virtual bool isTransformInvertible() const;
312
313 WebLayer* platformLayer() const override;
314
315 WillBeHeapVector<OwnPtrWillBeMember<CanvasRenderingContext2DState>> m_stateS tack;
316 PersistentWillBeMember<HitRegionManager> m_hitRegionManager;
317 AntiAliasingMode m_clipAntialiasing;
318 bool m_hasAlpha;
319 LostContextMode m_contextLostMode;
320 bool m_contextRestorable;
321 unsigned m_tryRestoreContextAttemptCount;
322 Timer<CanvasRenderingContext2D> m_dispatchContextLostEventTimer;
323 Timer<CanvasRenderingContext2D> m_dispatchContextRestoredEventTimer;
324 Timer<CanvasRenderingContext2D> m_tryRestoreContextEventTimer;
325
326 HashMap<String, Font> m_fontsResolvedUsingCurrentStyle;
327 bool m_pruneLocalFontCacheScheduled;
328 ListHashSet<String> m_fontLRUList;
329 }; 199 };
330 200
331 DEFINE_TYPE_CASTS(CanvasRenderingContext2D, CanvasRenderingContext, context, con text->is2d(), context.is2d());
332
333 } // namespace blink 201 } // namespace blink
334 202
335 #endif // CanvasRenderingContext2D_h 203 #endif // BaseRenderingContext2D_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698