| /* |
| * Copyright 2017 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "modules/sksg/include/SkSGPath.h" |
| |
| #include "include/core/SkCanvas.h" |
| #include "include/core/SkPaint.h" |
| #include "src/core/SkRectPriv.h" |
| |
| namespace sksg { |
| |
| Path::Path(const SkPath& path) : fPath(path) {} |
| |
| void Path::onClip(SkCanvas* canvas, bool antiAlias) const { |
| canvas->clipPath(fPath, SkClipOp::kIntersect, antiAlias); |
| } |
| |
| void Path::onDraw(SkCanvas* canvas, const SkPaint& paint) const { |
| canvas->drawPath(fPath, paint); |
| } |
| |
| bool Path::onContains(const SkPoint& p) const { |
| return fPath.contains(p.x(), p.y()); |
| } |
| |
| SkRect Path::onRevalidate(InvalidationController*, const SkMatrix&) { |
| SkASSERT(this->hasInval()); |
| |
| const auto ft = fPath.getFillType(); |
| return (ft == SkPathFillType::kWinding || ft == SkPathFillType::kEvenOdd) |
| // "Containing" fills have finite bounds. |
| ? fPath.computeTightBounds() |
| // Inverse fills are "infinite". |
| : SkRectPriv::MakeLargeS32(); |
| } |
| |
| SkPath Path::onAsPath() const { |
| return fPath; |
| } |
| |
| } // namespace sksg |