1 /* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkSGPath.h" 9 10 #include "SkCanvas.h" 11 #include "SkPaint.h" 12 #include "SkRectPriv.h" 13 14 namespace sksg { 15 16 Path::Path(const SkPath& path) : fPath(path) {} 17 18 void Path::onClip(SkCanvas* canvas, bool antiAlias) const { 19 canvas->clipPath(fPath, SkClipOp::kIntersect, antiAlias); 20 } 21 22 void Path::onDraw(SkCanvas* canvas, const SkPaint& paint) const { 23 canvas->drawPath(fPath, paint); 24 } 25 26 bool Path::onContains(const SkPoint& p) const { 27 return fPath.contains(p.x(), p.y()); 28 } 29 30 SkRect Path::onRevalidate(InvalidationController*, const SkMatrix&) { 31 SkASSERT(this->hasInval()); 32 33 const auto ft = fPath.getFillType(); 34 return (ft == SkPath::kWinding_FillType || ft == SkPath::kEvenOdd_FillType) 35 // "Containing" fills have finite bounds. 36 ? fPath.computeTightBounds() 37 // Inverse fills are "infinite". 38 : SkRectPriv::MakeLargeS32(); 39 } 40 41 SkPath Path::onAsPath() const { 42 return fPath; 43 } 44 45 } // namespace sksg 46