gfx/2d/PathD2D.h

branch
TOR_BUG_9701
changeset 8
97036ab72558
equal deleted inserted replaced
-1:000000000000 0:c05b220431d8
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/. */
5
6 #ifndef MOZILLA_GFX_PATHD2D_H_
7 #define MOZILLA_GFX_PATHD2D_H_
8
9 #include <d2d1.h>
10
11 #include "2D.h"
12
13 namespace mozilla {
14 namespace gfx {
15
16 class PathD2D;
17
18 class PathBuilderD2D : public PathBuilder
19 {
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)
27 {
28 }
29 virtual ~PathBuilderD2D();
30
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;
42
43 virtual TemporaryRef<Path> Finish();
44
45 ID2D1GeometrySink *GetSink() { return mSink; }
46
47 private:
48 friend class PathD2D;
49
50 void EnsureActive(const Point &aPoint);
51
52 RefPtr<ID2D1GeometrySink> mSink;
53 RefPtr<ID2D1PathGeometry> mGeometry;
54
55 bool mFigureActive;
56 Point mCurrentPoint;
57 Point mBeginPoint;
58 FillRule mFillRule;
59 };
60
61 class PathD2D : public Path
62 {
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)
71 {}
72
73 virtual BackendType GetBackendType() const { return BackendType::DIRECT2D; }
74
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;
78
79 virtual bool ContainsPoint(const Point &aPoint, const Matrix &aTransform) const;
80
81 virtual bool StrokeContainsPoint(const StrokeOptions &aStrokeOptions,
82 const Point &aPoint,
83 const Matrix &aTransform) const;
84
85 virtual Rect GetBounds(const Matrix &aTransform = Matrix()) const;
86
87 virtual Rect GetStrokedBounds(const StrokeOptions &aStrokeOptions,
88 const Matrix &aTransform = Matrix()) const;
89
90 virtual void StreamToSink(PathSink *aSink) const;
91
92 virtual FillRule GetFillRule() const { return mFillRule; }
93
94 ID2D1Geometry *GetGeometry() { return mGeometry; }
95
96 private:
97 friend class DrawTargetD2D;
98 friend class DrawTargetD2D1;
99
100 mutable RefPtr<ID2D1PathGeometry> mGeometry;
101 bool mEndedActive;
102 Point mEndPoint;
103 FillRule mFillRule;
104 };
105
106 }
107 }
108
109 #endif /* MOZILLA_GFX_PATHD2D_H_ */

mercurial