Bumping manifests a=b2g-bump
[gecko.git] / gfx / 2d / PathD2D.h
blobd27f1746f49cf82756ef1bec4185686125803d6d
1 /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef MOZILLA_GFX_PATHD2D_H_
7 #define MOZILLA_GFX_PATHD2D_H_
9 #include <d2d1.h>
11 #include "2D.h"
13 namespace mozilla {
14 namespace gfx {
16 class PathD2D;
18 class PathBuilderD2D : public PathBuilder
20 public:
21 MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathBuilderD2D)
22 PathBuilderD2D(ID2D1GeometrySink *aSink, ID2D1PathGeometry *aGeom, FillRule aFillRule)
23 : mSink(aSink)
24 , mGeometry(aGeom)
25 , mFigureActive(false)
26 , mFillRule(aFillRule)
29 virtual ~PathBuilderD2D();
31 virtual void MoveTo(const Point &aPoint);
32 virtual void LineTo(const Point &aPoint);
33 virtual void BezierTo(const Point &aCP1,
34 const Point &aCP2,
35 const Point &aCP3);
36 virtual void QuadraticBezierTo(const Point &aCP1,
37 const Point &aCP2);
38 virtual void Close();
39 virtual void Arc(const Point &aOrigin, Float aRadius, Float aStartAngle,
40 Float aEndAngle, bool aAntiClockwise = false);
41 virtual Point CurrentPoint() const;
43 virtual TemporaryRef<Path> Finish();
45 ID2D1GeometrySink *GetSink() { return mSink; }
47 private:
48 friend class PathD2D;
50 void EnsureActive(const Point &aPoint);
52 RefPtr<ID2D1GeometrySink> mSink;
53 RefPtr<ID2D1PathGeometry> mGeometry;
55 bool mFigureActive;
56 Point mCurrentPoint;
57 Point mBeginPoint;
58 FillRule mFillRule;
61 class PathD2D : public Path
63 public:
64 MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathD2D)
65 PathD2D(ID2D1PathGeometry *aGeometry, bool aEndedActive,
66 const Point &aEndPoint, FillRule aFillRule)
67 : mGeometry(aGeometry)
68 , mEndedActive(aEndedActive)
69 , mEndPoint(aEndPoint)
70 , mFillRule(aFillRule)
73 virtual BackendType GetBackendType() const { return BackendType::DIRECT2D; }
75 virtual TemporaryRef<PathBuilder> CopyToBuilder(FillRule aFillRule = FillRule::FILL_WINDING) const;
76 virtual TemporaryRef<PathBuilder> TransformedCopyToBuilder(const Matrix &aTransform,
77 FillRule aFillRule = FillRule::FILL_WINDING) const;
79 virtual bool ContainsPoint(const Point &aPoint, const Matrix &aTransform) const;
81 virtual bool StrokeContainsPoint(const StrokeOptions &aStrokeOptions,
82 const Point &aPoint,
83 const Matrix &aTransform) const;
85 virtual Rect GetBounds(const Matrix &aTransform = Matrix()) const;
87 virtual Rect GetStrokedBounds(const StrokeOptions &aStrokeOptions,
88 const Matrix &aTransform = Matrix()) const;
90 virtual void StreamToSink(PathSink *aSink) const;
92 virtual FillRule GetFillRule() const { return mFillRule; }
94 ID2D1Geometry *GetGeometry() { return mGeometry; }
96 private:
97 friend class DrawTargetD2D;
98 friend class DrawTargetD2D1;
100 mutable RefPtr<ID2D1PathGeometry> mGeometry;
101 bool mEndedActive;
102 Point mEndPoint;
103 FillRule mFillRule;
109 #endif /* MOZILLA_GFX_PATHD2D_H_ */