author Andrzej Hunt <>
Tue, 15 Mar 2016 14:44:13 -0700
changeset 323712 876a1f819d83ef8035e579dd9247693c9526875b
parent 319759 5df2781a3b0cf59ba594359e8fc674c0f903e3c0
child 361417 a0eeb7cf36fcb149a424879abe81bb59dc15b1d3
permissions -rw-r--r--
Bug 1254797 - Post: Ensure we ignore deleted sites in pinned query r=rnewman, a=ritu Pinned sites should be deleted directly, however I'm not confident enough in my knowledge of sync to be certain that we won't end up with deleted pinned sites in our table. (We use normal bookmark deletion for removing pinned sites.) MozReview-Commit-ID: SSLDkSXWlI

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at */


#include <ApplicationServices/ApplicationServices.h>
#include <CoreGraphics/CoreGraphics.h>

#include "2D.h"

namespace mozilla {
namespace gfx {

class PathCG;

class PathBuilderCG : public PathBuilder
  // absorbs a reference of aPath
  PathBuilderCG(CGMutablePathRef aPath, FillRule aFillRule)
    : mFillRule(aFillRule)
      mCGPath = aPath;

  explicit PathBuilderCG(FillRule aFillRule)
    : mFillRule(aFillRule)
      mCGPath = CGPathCreateMutable();

  virtual ~PathBuilderCG();

  virtual void MoveTo(const Point &aPoint);
  virtual void LineTo(const Point &aPoint);
  virtual void BezierTo(const Point &aCP1,
                        const Point &aCP2,
                        const Point &aCP3);
  virtual void QuadraticBezierTo(const Point &aCP1,
                                 const Point &aCP2);
  virtual void Close();
  virtual void Arc(const Point &aOrigin, Float aRadius, Float aStartAngle,
                   Float aEndAngle, bool aAntiClockwise = false);
  virtual Point CurrentPoint() const;

  virtual already_AddRefed<Path> Finish();

  virtual BackendType GetBackendType() const { return BackendType::COREGRAPHICS; }

  friend class PathCG;
  friend class ScaledFontMac;

  void EnsureActive(const Point &aPoint);

  CGMutablePathRef mCGPath;
  Point mCurrentPoint;
  Point mBeginPoint;
  FillRule mFillRule;

class PathCG : public Path
  PathCG(CGMutablePathRef aPath, FillRule aFillRule)
    : mPath(aPath)
    , mFillRule(aFillRule)
  virtual ~PathCG() { CGPathRelease(mPath); }

  // Paths will always return BackendType::COREGRAPHICS, but note that they
  // are compatible with BackendType::COREGRAPHICS_ACCELERATED backend.
  virtual BackendType GetBackendType() const { return BackendType::COREGRAPHICS; }

  virtual already_AddRefed<PathBuilder> CopyToBuilder(FillRule aFillRule) const;
  virtual already_AddRefed<PathBuilder> TransformedCopyToBuilder(const Matrix &aTransform,
                                                             FillRule aFillRule) const;

  virtual bool ContainsPoint(const Point &aPoint, const Matrix &aTransform) const;
  virtual bool StrokeContainsPoint(const StrokeOptions &aStrokeOptions,
                                   const Point &aPoint,
                                   const Matrix &aTransform) const;
  virtual Rect GetBounds(const Matrix &aTransform = Matrix()) const;
  virtual Rect GetStrokedBounds(const StrokeOptions &aStrokeOptions,
                                const Matrix &aTransform = Matrix()) const;

  virtual void StreamToSink(PathSink *aSink) const;

  virtual FillRule GetFillRule() const { return mFillRule; }

  CGMutablePathRef GetPath() const { return mPath; }

  friend class DrawTargetCG;

  CGMutablePathRef mPath;
  Point mEndPoint;
  FillRule mFillRule;

} // namespace gfx
} // namespace mozilla