aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental/sksg/geometry
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/sksg/geometry')
-rw-r--r--experimental/sksg/geometry/SkSGGeometryTransform.cpp12
-rw-r--r--experimental/sksg/geometry/SkSGGeometryTransform.h4
-rw-r--r--experimental/sksg/geometry/SkSGMerge.cpp4
-rw-r--r--experimental/sksg/geometry/SkSGMerge.h1
-rw-r--r--experimental/sksg/geometry/SkSGPath.cpp4
-rw-r--r--experimental/sksg/geometry/SkSGPath.h1
-rw-r--r--experimental/sksg/geometry/SkSGRect.cpp8
-rw-r--r--experimental/sksg/geometry/SkSGRect.h2
-rw-r--r--experimental/sksg/geometry/SkSGTrimEffect.cpp4
-rw-r--r--experimental/sksg/geometry/SkSGTrimEffect.h1
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;