Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
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
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();
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;
59 };
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 {}
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;
104 };
106 }
107 }
109 #endif /* MOZILLA_GFX_PATHD2D_H_ */