Flutter Engine
path.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_LIB_UI_PAINTING_PATH_H_
6 #define FLUTTER_LIB_UI_PAINTING_PATH_H_
7 
8 #include "flutter/lib/ui/dart_wrapper.h"
9 #include "flutter/lib/ui/painting/rrect.h"
10 #include "third_party/skia/include/core/SkPath.h"
11 #include "third_party/skia/include/pathops/SkPathOps.h"
13 
14 namespace tonic {
15 class DartLibraryNatives;
16 } // namespace tonic
17 
18 namespace flutter {
19 
20 class CanvasPath : public RefCountedDartWrappable<CanvasPath> {
23 
24  public:
25  ~CanvasPath() override;
26  static fml::RefPtr<CanvasPath> CreateNew(Dart_Handle path_handle) {
27  return fml::MakeRefCounted<CanvasPath>();
28  }
29 
30  static fml::RefPtr<CanvasPath> Create(Dart_Handle path_handle) {
31  auto path = fml::MakeRefCounted<CanvasPath>();
32  path->AssociateWithDartWrapper(path_handle);
33  return path;
34  }
35 
36  static fml::RefPtr<CanvasPath> CreateFrom(Dart_Handle path_handle,
37  const SkPath& src) {
38  fml::RefPtr<CanvasPath> path = CanvasPath::Create(path_handle);
39  path->path_ = src;
40  return path;
41  }
42 
43  int getFillType();
44  void setFillType(int fill_type);
45 
46  void moveTo(float x, float y);
47  void relativeMoveTo(float x, float y);
48  void lineTo(float x, float y);
49  void relativeLineTo(float x, float y);
50  void quadraticBezierTo(float x1, float y1, float x2, float y2);
51  void relativeQuadraticBezierTo(float x1, float y1, float x2, float y2);
52  void cubicTo(float x1, float y1, float x2, float y2, float x3, float y3);
53  void relativeCubicTo(float x1,
54  float y1,
55  float x2,
56  float y2,
57  float x3,
58  float y3);
59  void conicTo(float x1, float y1, float x2, float y2, float w);
60  void relativeConicTo(float x1, float y1, float x2, float y2, float w);
61  void arcTo(float left,
62  float top,
63  float right,
64  float bottom,
65  float startAngle,
66  float sweepAngle,
67  bool forceMoveTo);
68  void arcToPoint(float arcEndX,
69  float arcEndY,
70  float radiusX,
71  float radiusY,
72  float xAxisRotation,
73  bool isLargeArc,
74  bool isClockwiseDirection);
75  void relativeArcToPoint(float arcEndDeltaX,
76  float arcEndDeltaY,
77  float radiusX,
78  float radiusY,
79  float xAxisRotation,
80  bool isLargeArc,
81  bool isClockwiseDirection);
82  void addRect(float left, float top, float right, float bottom);
83  void addOval(float left, float top, float right, float bottom);
84  void addArc(float left,
85  float top,
86  float right,
87  float bottom,
88  float startAngle,
89  float sweepAngle);
90  void addPolygon(const tonic::Float32List& points, bool close);
91  void addRRect(const RRect& rrect);
92  void addPath(CanvasPath* path, double dx, double dy);
93  void addPathWithMatrix(CanvasPath* path,
94  double dx,
95  double dy,
96  tonic::Float64List& matrix4);
97  void extendWithPath(CanvasPath* path, double dx, double dy);
98  void extendWithPathAndMatrix(CanvasPath* path,
99  double dx,
100  double dy,
101  tonic::Float64List& matrix4);
102  void close();
103  void reset();
104  bool contains(double x, double y);
105  void shift(Dart_Handle path_handle, double dx, double dy);
106  void transform(Dart_Handle path_handle, tonic::Float64List& matrix4);
107  tonic::Float32List getBounds();
108  bool op(CanvasPath* path1, CanvasPath* path2, int operation);
109  void clone(Dart_Handle path_handle);
110 
111  const SkPath& path() const { return path_; }
112 
113  size_t GetAllocationSize() const override;
114 
115  static void RegisterNatives(tonic::DartLibraryNatives* natives);
116 
117  private:
118  CanvasPath();
119 
120  SkPath path_;
121 };
122 
123 } // namespace flutter
124 
125 #endif // FLUTTER_LIB_UI_PAINTING_PATH_H_
DEF_SWITCHES_START snapshot asset path
Definition: switches.h:32
static fml::RefPtr< CanvasPath > Create(Dart_Handle path_handle)
Definition: path.h:30
#define DEFINE_WRAPPERTYPEINFO()
#define FML_FRIEND_MAKE_REF_COUNTED(T)
Definition: ref_counted.h:131
const SkPath & path() const
Definition: path.h:111
static fml::RefPtr< CanvasPath > CreateNew(Dart_Handle path_handle)
Definition: path.h:26
static fml::RefPtr< CanvasPath > CreateFrom(Dart_Handle path_handle, const SkPath &src)
Definition: path.h:36