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_
18 class PathBuilderD2D
: public PathBuilder
21 MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PathBuilderD2D
)
22 PathBuilderD2D(ID2D1GeometrySink
*aSink
, ID2D1PathGeometry
*aGeom
, FillRule aFillRule
)
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
,
36 virtual void QuadraticBezierTo(const Point
&aCP1
,
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
; }
50 void EnsureActive(const Point
&aPoint
);
52 RefPtr
<ID2D1GeometrySink
> mSink
;
53 RefPtr
<ID2D1PathGeometry
> mGeometry
;
61 class PathD2D
: public Path
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
,
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
; }
97 friend class DrawTargetD2D
;
98 friend class DrawTargetD2D1
;
100 mutable RefPtr
<ID2D1PathGeometry
> mGeometry
;
109 #endif /* MOZILLA_GFX_PATHD2D_H_ */