1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkSGPath_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkSGPath_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPath.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "modules/sksg/include/SkSGGeometryNode.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "modules/sksg/include/SkSGNode.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class SkCanvas; 18*c8dee2aaSAndroid Build Coastguard Worker class SkMatrix; 19*c8dee2aaSAndroid Build Coastguard Worker class SkPaint; 20*c8dee2aaSAndroid Build Coastguard Worker enum class SkPathFillType; 21*c8dee2aaSAndroid Build Coastguard Worker struct SkPoint; 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker namespace sksg { 24*c8dee2aaSAndroid Build Coastguard Worker class InvalidationController; 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker /** 27*c8dee2aaSAndroid Build Coastguard Worker * Concrete Geometry node, wrapping an SkPath. 28*c8dee2aaSAndroid Build Coastguard Worker */ 29*c8dee2aaSAndroid Build Coastguard Worker class Path : public GeometryNode { 30*c8dee2aaSAndroid Build Coastguard Worker public: Make()31*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<Path> Make() { return sk_sp<Path>(new Path(SkPath())); } Make(const SkPath & r)32*c8dee2aaSAndroid Build Coastguard Worker static sk_sp<Path> Make(const SkPath& r) { return sk_sp<Path>(new Path(r)); } 33*c8dee2aaSAndroid Build Coastguard Worker SG_ATTRIBUTE(Path,SkPath,fPath)34*c8dee2aaSAndroid Build Coastguard Worker SG_ATTRIBUTE(Path, SkPath, fPath) 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker // Temporarily inlined for SkPathFillType staging 37*c8dee2aaSAndroid Build Coastguard Worker // SG_MAPPED_ATTRIBUTE(FillType, SkPathFillType, fPath) 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker SkPathFillType getFillType() const { 40*c8dee2aaSAndroid Build Coastguard Worker return fPath.getFillType(); 41*c8dee2aaSAndroid Build Coastguard Worker } 42*c8dee2aaSAndroid Build Coastguard Worker setFillType(SkPathFillType fillType)43*c8dee2aaSAndroid Build Coastguard Worker void setFillType(SkPathFillType fillType) { 44*c8dee2aaSAndroid Build Coastguard Worker if (fillType != fPath.getFillType()) { 45*c8dee2aaSAndroid Build Coastguard Worker fPath.setFillType(fillType); 46*c8dee2aaSAndroid Build Coastguard Worker this->invalidate(); 47*c8dee2aaSAndroid Build Coastguard Worker } 48*c8dee2aaSAndroid Build Coastguard Worker } 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker protected: 51*c8dee2aaSAndroid Build Coastguard Worker void onClip(SkCanvas*, bool antiAlias) const override; 52*c8dee2aaSAndroid Build Coastguard Worker void onDraw(SkCanvas*, const SkPaint&) const override; 53*c8dee2aaSAndroid Build Coastguard Worker bool onContains(const SkPoint&) const override; 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; 56*c8dee2aaSAndroid Build Coastguard Worker SkPath onAsPath() const override; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker private: 59*c8dee2aaSAndroid Build Coastguard Worker explicit Path(const SkPath&); 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker SkPath fPath; 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GeometryNode; 64*c8dee2aaSAndroid Build Coastguard Worker }; 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker } // namespace sksg 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker #endif // SkSGPath_DEFINED 69