Index: third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h |
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c5790fef0b63583e607132f8ee35baebe8b507a9 |
--- /dev/null |
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h |
@@ -0,0 +1,195 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef BaseRenderingContext2D_h |
+#define BaseRenderingContext2D_h |
+ |
+#include "bindings/core/v8/UnionTypesCore.h" |
+#include "bindings/modules/v8/UnionTypesModules.h" |
+#include "core/html/canvas/CanvasRenderingContext.h" |
+#include "modules/ModulesExport.h" |
+#include "modules/canvas2d/CanvasPathMethods.h" |
+#include "modules/canvas2d/CanvasRenderingContext2DState.h" |
+ |
+namespace blink { |
+ |
+class CanvasImageSource; |
+class Color; |
+class Image; |
+class ImageBuffer; |
+class Path2D; |
+class SVGMatrixTearOff; |
+ |
+typedef HTMLImageElementOrHTMLVideoElementOrHTMLCanvasElementOrImageBitmap CanvasImageSourceUnion; |
+ |
+class MODULES_EXPORT BaseRenderingContext2D : public WillBeGarbageCollectedMixin, public CanvasPathMethods { |
+public: |
+ ~BaseRenderingContext2D() override; |
+ |
+ void strokeStyle(StringOrCanvasGradientOrCanvasPattern&) const; |
+ void setStrokeStyle(const StringOrCanvasGradientOrCanvasPattern&); |
+ |
+ void fillStyle(StringOrCanvasGradientOrCanvasPattern&) const; |
+ void setFillStyle(const StringOrCanvasGradientOrCanvasPattern&); |
+ |
+ double lineWidth() const; |
+ void setLineWidth(double); |
+ |
+ String lineCap() const; |
+ void setLineCap(const String&); |
+ |
+ String lineJoin() const; |
+ void setLineJoin(const String&); |
+ |
+ double miterLimit() const; |
+ void setMiterLimit(double); |
+ |
+ const Vector<double>& getLineDash() const; |
+ void setLineDash(const Vector<double>&); |
+ |
+ double lineDashOffset() const; |
+ void setLineDashOffset(double); |
+ |
+ double shadowOffsetX() const; |
+ void setShadowOffsetX(double); |
+ |
+ double shadowOffsetY() const; |
+ void setShadowOffsetY(double); |
+ |
+ double shadowBlur() const; |
+ void setShadowBlur(double); |
+ |
+ String shadowColor() const; |
+ void setShadowColor(const String&); |
+ |
+ double globalAlpha() const; |
+ void setGlobalAlpha(double); |
+ |
+ String globalCompositeOperation() const; |
+ void setGlobalCompositeOperation(const String&); |
+ |
+ String filter() const; |
+ void setFilter(const String&); |
+ |
+ void save(); |
+ void restore(); |
+ |
+ PassRefPtrWillBeRawPtr<SVGMatrixTearOff> currentTransform() const; |
+ void setCurrentTransform(PassRefPtrWillBeRawPtr<SVGMatrixTearOff>); |
+ |
+ void scale(double sx, double sy); |
+ void rotate(double angleInRadians); |
+ void translate(double tx, double ty); |
+ void transform(double m11, double m12, double m21, double m22, double dx, double dy); |
+ void setTransform(double m11, double m12, double m21, double m22, double dx, double dy); |
+ void resetTransform(); |
+ |
+ void beginPath(); |
+ |
+ void fill(const String& winding = "nonzero"); |
+ void fill(Path2D*, const String& winding = "nonzero"); |
+ void stroke(); |
+ void stroke(Path2D*); |
+ void clip(const String& winding = "nonzero"); |
+ void clip(Path2D*, const String& winding = "nonzero"); |
+ |
+ bool isPointInPath(const double x, const double y, const String& winding = "nonzero"); |
+ bool isPointInPath(Path2D*, const double x, const double y, const String& winding = "nonzero"); |
+ bool isPointInStroke(const double x, const double y); |
+ bool isPointInStroke(Path2D*, const double x, const double y); |
+ |
+ void clearRect(double x, double y, double width, double height); |
+ void fillRect(double x, double y, double width, double height); |
+ void strokeRect(double x, double y, double width, double height); |
+ |
+ void drawImage(const CanvasImageSourceUnion&, double x, double y, ExceptionState&); |
+ void drawImage(const CanvasImageSourceUnion&, double x, double y, double width, double height, ExceptionState&); |
+ void drawImage(const CanvasImageSourceUnion&, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh, ExceptionState&); |
+ void drawImage(CanvasImageSource*, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh, ExceptionState&); |
+ |
+ CanvasGradient* createLinearGradient(double x0, double y0, double x1, double y1); |
+ CanvasGradient* createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1, ExceptionState&); |
+ CanvasPattern* createPattern(const CanvasImageSourceUnion&, const String& repetitionType, ExceptionState&); |
+ |
+ bool imageSmoothingEnabled() const; |
+ void setImageSmoothingEnabled(bool); |
+ String imageSmoothingQuality() const; |
+ void setImageSmoothingQuality(const String&); |
+ |
+ virtual bool originClean() const = 0; |
+ virtual void setOriginTainted() = 0; |
+ virtual bool wouldTaintOrigin(CanvasImageSource*) = 0; |
+ |
+ virtual int width() const = 0; |
+ virtual int height() const = 0; |
+ |
+ virtual bool hasImageBuffer() const = 0; |
+ virtual ImageBuffer* imageBuffer() const = 0; |
+ |
+ virtual bool parseColorOrCurrentColor(Color&, const String& colorString) const = 0; |
+ |
+ virtual SkCanvas* drawingCanvas() const = 0; |
+ virtual SkCanvas* existingDrawingCanvas() const = 0; |
+ virtual void disableDeferral(DisableDeferralReason) = 0; |
+ |
+ virtual AffineTransform baseTransform() const = 0; |
+ |
+ virtual void didDraw(const SkIRect& dirtyRect) = 0; |
+ |
+ virtual bool stateHasFilter() = 0; |
+ virtual SkImageFilter* stateGetFilter() = 0; |
+ |
+ virtual void validateStateStack() = 0; |
+ |
+ virtual bool hasAlpha() const = 0; |
+ |
+ DECLARE_VIRTUAL_TRACE(); |
+ |
+protected: |
+ BaseRenderingContext2D(); |
+ |
+ CanvasRenderingContext2DState& modifiableState(); |
+ const CanvasRenderingContext2DState& state() const { return *m_stateStack.last(); } |
+ |
+ bool computeDirtyRect(const FloatRect& localBounds, SkIRect*); |
+ bool computeDirtyRect(const FloatRect& localBounds, const SkIRect& transformedClipBounds, SkIRect*); |
+ |
+ void drawForText(const Font&, const TextRunPaintInfo&, const FloatPoint& location, CanvasRenderingContext2DState::PaintType); |
+ |
+ void inflateStrokeRect(FloatRect&) const; |
+ |
+ enum DrawType { |
+ ClipFill, // Fill that is already known to cover the current clip |
+ UntransformedUnclippedFill |
+ }; |
+ |
+ void checkOverdraw(const SkRect&, const SkPaint*, CanvasRenderingContext2DState::ImageType, DrawType); |
+ |
+ WillBeHeapVector<OwnPtrWillBeMember<CanvasRenderingContext2DState>> m_stateStack; |
+ AntiAliasingMode m_clipAntialiasing; |
+ |
+private: |
+ void realizeSaves(); |
+ |
+ bool shouldDrawImageAntialiased(const FloatRect& destRect) const; |
+ |
+ template<typename DrawFunc, typename ContainsFunc> |
+ bool draw(const DrawFunc&, const ContainsFunc&, const SkRect& bounds, CanvasRenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType = CanvasRenderingContext2DState::NoImage); |
+ void drawPathInternal(const Path&, CanvasRenderingContext2DState::PaintType, SkPath::FillType = SkPath::kWinding_FillType); |
+ void drawImageInternal(SkCanvas*, CanvasImageSource*, Image*, const FloatRect& srcRect, const FloatRect& dstRect, const SkPaint*); |
+ void clipInternal(const Path&, const String& windingRuleString); |
+ |
+ bool isPointInPathInternal(const Path&, const double x, const double y, const String& windingRuleString); |
+ bool isPointInStrokeInternal(const Path&, const double x, const double y); |
+ |
+ template<typename DrawFunc> |
+ void compositedDraw(const DrawFunc&, SkCanvas*, CanvasRenderingContext2DState::PaintType, CanvasRenderingContext2DState::ImageType); |
+ |
+ void clearCanvas(); |
+ bool rectContainsTransformedRect(const FloatRect&, const SkIRect&) const; |
+}; |
+ |
+} // namespace blink |
+ |
+#endif // BaseRenderingContext2D_h |