gfx/2d/PathD2D.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

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_ */

mercurial