diff options
Diffstat (limited to 'experimental/sksg/geometry')
-rw-r--r-- | experimental/sksg/geometry/SkSGGeometryTransform.cpp | 12 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGGeometryTransform.h | 4 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGMerge.cpp | 4 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGMerge.h | 1 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGPath.cpp | 4 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGPath.h | 1 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGRect.cpp | 8 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGRect.h | 2 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGTrimEffect.cpp | 4 | ||||
-rw-r--r-- | experimental/sksg/geometry/SkSGTrimEffect.h | 1 |
10 files changed, 36 insertions, 5 deletions
diff --git a/experimental/sksg/geometry/SkSGGeometryTransform.cpp b/experimental/sksg/geometry/SkSGGeometryTransform.cpp index 91367d48d6..5b366b9620 100644 --- a/experimental/sksg/geometry/SkSGGeometryTransform.cpp +++ b/experimental/sksg/geometry/SkSGGeometryTransform.cpp @@ -23,6 +23,14 @@ GeometryTransform::~GeometryTransform() { this->unobserveInval(fMatrix); } +void GeometryTransform::onClip(SkCanvas* canvas, bool antiAlias) const { + canvas->clipPath(fTransformed, SkClipOp::kIntersect, antiAlias); +} + +void GeometryTransform::onDraw(SkCanvas* canvas, const SkPaint& paint) const { + canvas->drawPath(fTransformed, paint); +} + SkRect GeometryTransform::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { SkASSERT(this->hasInval()); @@ -42,8 +50,4 @@ SkPath GeometryTransform::onAsPath() const { return fTransformed; } -void GeometryTransform::onDraw(SkCanvas* canvas, const SkPaint& paint) const { - canvas->drawPath(fTransformed, paint); -} - } // namespace sksg diff --git a/experimental/sksg/geometry/SkSGGeometryTransform.h b/experimental/sksg/geometry/SkSGGeometryTransform.h index 31a3371408..ea990c6f29 100644 --- a/experimental/sksg/geometry/SkSGGeometryTransform.h +++ b/experimental/sksg/geometry/SkSGGeometryTransform.h @@ -37,9 +37,11 @@ public: const sk_sp<Matrix>& getMatrix() const { return fMatrix; } protected: + void onClip(SkCanvas*, bool antiAlias) const override; + void onDraw(SkCanvas*, const SkPaint&) const override; + SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; SkPath onAsPath() const override; - void onDraw(SkCanvas*, const SkPaint&) const override; private: GeometryTransform(sk_sp<GeometryNode>, sk_sp<Matrix>); diff --git a/experimental/sksg/geometry/SkSGMerge.cpp b/experimental/sksg/geometry/SkSGMerge.cpp index 49e780413d..be1ff4123a 100644 --- a/experimental/sksg/geometry/SkSGMerge.cpp +++ b/experimental/sksg/geometry/SkSGMerge.cpp @@ -26,6 +26,10 @@ Merge::~Merge() { } } +void Merge::onClip(SkCanvas* canvas, bool antiAlias) const { + canvas->clipPath(fMerged, SkClipOp::kIntersect, antiAlias); +} + void Merge::onDraw(SkCanvas* canvas, const SkPaint& paint) const { canvas->drawPath(fMerged, paint); } diff --git a/experimental/sksg/geometry/SkSGMerge.h b/experimental/sksg/geometry/SkSGMerge.h index b0cb40de9c..69f824e011 100644 --- a/experimental/sksg/geometry/SkSGMerge.h +++ b/experimental/sksg/geometry/SkSGMerge.h @@ -43,6 +43,7 @@ public: ~Merge() override; protected: + void onClip(SkCanvas*, bool antiAlias) const override; void onDraw(SkCanvas*, const SkPaint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; diff --git a/experimental/sksg/geometry/SkSGPath.cpp b/experimental/sksg/geometry/SkSGPath.cpp index 2b7dc94952..8d5a25373a 100644 --- a/experimental/sksg/geometry/SkSGPath.cpp +++ b/experimental/sksg/geometry/SkSGPath.cpp @@ -14,6 +14,10 @@ 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); } diff --git a/experimental/sksg/geometry/SkSGPath.h b/experimental/sksg/geometry/SkSGPath.h index 18caa10f2a..6dd259394b 100644 --- a/experimental/sksg/geometry/SkSGPath.h +++ b/experimental/sksg/geometry/SkSGPath.h @@ -28,6 +28,7 @@ public: SG_ATTRIBUTE(Path, SkPath, fPath) protected: + void onClip(SkCanvas*, bool antiAlias) const override; void onDraw(SkCanvas*, const SkPaint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; diff --git a/experimental/sksg/geometry/SkSGRect.cpp b/experimental/sksg/geometry/SkSGRect.cpp index 532a604af4..16f0a6f1e1 100644 --- a/experimental/sksg/geometry/SkSGRect.cpp +++ b/experimental/sksg/geometry/SkSGRect.cpp @@ -15,6 +15,10 @@ namespace sksg { Rect::Rect(const SkRect& rect) : fRect(rect) {} +void Rect::onClip(SkCanvas* canvas, bool antiAlias) const { + canvas->clipRect(fRect, SkClipOp::kIntersect, antiAlias); +} + void Rect::onDraw(SkCanvas* canvas, const SkPaint& paint) const { canvas->drawRect(fRect, paint); } @@ -33,6 +37,10 @@ SkPath Rect::onAsPath() const { RRect::RRect(const SkRRect& rr) : fRRect(rr) {} +void RRect::onClip(SkCanvas* canvas, bool antiAlias) const { + canvas->clipRRect(fRRect, SkClipOp::kIntersect, antiAlias); +} + void RRect::onDraw(SkCanvas* canvas, const SkPaint& paint) const { canvas->drawRRect(fRRect, paint); } diff --git a/experimental/sksg/geometry/SkSGRect.h b/experimental/sksg/geometry/SkSGRect.h index ad27910da9..a99c76ab98 100644 --- a/experimental/sksg/geometry/SkSGRect.h +++ b/experimental/sksg/geometry/SkSGRect.h @@ -32,6 +32,7 @@ public: SG_ATTRIBUTE(B, SkScalar, fRect.fBottom) protected: + void onClip(SkCanvas*, bool antiAlias) const override; void onDraw(SkCanvas*, const SkPaint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; @@ -54,6 +55,7 @@ public: SG_ATTRIBUTE(RRect, SkRRect, fRRect) protected: + void onClip(SkCanvas*, bool antiAlias) const override; void onDraw(SkCanvas*, const SkPaint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; diff --git a/experimental/sksg/geometry/SkSGTrimEffect.cpp b/experimental/sksg/geometry/SkSGTrimEffect.cpp index afcc7e46b6..0b664fd436 100644 --- a/experimental/sksg/geometry/SkSGTrimEffect.cpp +++ b/experimental/sksg/geometry/SkSGTrimEffect.cpp @@ -22,6 +22,10 @@ TrimEffect::~TrimEffect() { this->unobserveInval(fChild); } +void TrimEffect::onClip(SkCanvas* canvas, bool antiAlias) const { + canvas->clipPath(fChild->asPath(), SkClipOp::kIntersect, antiAlias); +} + // TODO // This is a quick hack to get something on the screen. What we really want here is to apply // the geometry transformation and cache the result on revalidation. Or an SkTrimPathEffect. diff --git a/experimental/sksg/geometry/SkSGTrimEffect.h b/experimental/sksg/geometry/SkSGTrimEffect.h index 77da3ab2d0..860cfafc25 100644 --- a/experimental/sksg/geometry/SkSGTrimEffect.h +++ b/experimental/sksg/geometry/SkSGTrimEffect.h @@ -33,6 +33,7 @@ public: SG_ATTRIBUTE(Offset, SkScalar, fOffset) protected: + void onClip(SkCanvas*, bool antiAlias) const override; void onDraw(SkCanvas*, const SkPaint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; |