aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorFlorin Malita <fmalita@chromium.org>2019-01-10 15:24:15 -0500
committerSkia Commit-Bot <skia-commit-bot@chromium.org>2019-01-10 21:50:54 +0000
commit760a052c1e75a2daeb5af11eb2429cb9b908646b (patch)
treee6d7cc05f6d9fdb60f88232178503fe717f2561b /modules
parent14e9177492e631a5e55132a0580ece0f45d48e79 (diff)
downloadskqp-760a052c1e75a2daeb5af11eb2429cb9b908646b.tar.gz
[sksg] Consolidate Matrix node implementations
Matrix and Matrix44 look almost identical -- consolidate as a template class. TBR= Change-Id: I8f299a6138f190eb18de2e67b051307cf6a33383 Reviewed-on: https://skia-review.googlesource.com/c/182973 Reviewed-by: Florin Malita <fmalita@chromium.org> Commit-Queue: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'modules')
-rw-r--r--modules/skottie/src/Skottie.cpp4
-rw-r--r--modules/skottie/src/SkottieAdapter.cpp4
-rw-r--r--modules/skottie/src/SkottieAdapter.h10
-rw-r--r--modules/skottie/src/SkottiePriv.h1
-rw-r--r--modules/sksg/include/SkSGGeometryTransform.h9
-rw-r--r--modules/sksg/include/SkSGTransform.h59
-rw-r--r--modules/sksg/samples/SampleSVGPong.cpp16
-rw-r--r--modules/sksg/src/SkSGGeometryTransform.cpp1
-rw-r--r--modules/sksg/src/SkSGTransform.cpp36
-rw-r--r--modules/sksg/tests/SGTest.cpp6
10 files changed, 49 insertions, 97 deletions
diff --git a/modules/skottie/src/Skottie.cpp b/modules/skottie/src/Skottie.cpp
index 516d0eb886..c60857236f 100644
--- a/modules/skottie/src/Skottie.cpp
+++ b/modules/skottie/src/Skottie.cpp
@@ -67,7 +67,7 @@ sk_sp<sksg::Transform> AnimationBuilder::attachMatrix2D(const skjson::ObjectValu
static const VectorValue g_default_vec_0 = { 0, 0},
g_default_vec_100 = {100, 100};
- auto matrix = sksg::Matrix::Make(SkMatrix::I());
+ auto matrix = sksg::Matrix<SkMatrix>::Make(SkMatrix::I());
auto adapter = sk_make_sp<TransformAdapter2D>(matrix);
auto bound = this->bindProperty<VectorValue>(t["a"], ascope,
@@ -115,7 +115,7 @@ sk_sp<sksg::Transform> AnimationBuilder::attachMatrix3D(const skjson::ObjectValu
static const VectorValue g_default_vec_0 = { 0, 0, 0},
g_default_vec_100 = {100, 100, 100};
- auto matrix = sksg::Matrix44::Make(SkMatrix::I());
+ auto matrix = sksg::Matrix<SkMatrix44>::Make(SkMatrix::I());
auto adapter = sk_make_sp<TransformAdapter3D>(matrix);
auto bound = this->bindProperty<VectorValue>(t["a"], ascope,
diff --git a/modules/skottie/src/SkottieAdapter.cpp b/modules/skottie/src/SkottieAdapter.cpp
index 805f693bba..8e8b93dcdf 100644
--- a/modules/skottie/src/SkottieAdapter.cpp
+++ b/modules/skottie/src/SkottieAdapter.cpp
@@ -47,7 +47,7 @@ void RRectAdapter::apply() {
fRRectNode->setRRect(rr);
}
-TransformAdapter2D::TransformAdapter2D(sk_sp<sksg::Matrix> matrix)
+TransformAdapter2D::TransformAdapter2D(sk_sp<sksg::Matrix<SkMatrix>> matrix)
: fMatrixNode(std::move(matrix)) {}
TransformAdapter2D::~TransformAdapter2D() = default;
@@ -73,7 +73,7 @@ TransformAdapter3D::Vec3::Vec3(const VectorValue& v) {
fZ = v.size() > 2 ? v[2] : 0;
}
-TransformAdapter3D::TransformAdapter3D(sk_sp<sksg::Matrix44> matrix)
+TransformAdapter3D::TransformAdapter3D(sk_sp<sksg::Matrix<SkMatrix44>> matrix)
: fMatrixNode(std::move(matrix)) {}
TransformAdapter3D::~TransformAdapter3D() = default;
diff --git a/modules/skottie/src/SkottieAdapter.h b/modules/skottie/src/SkottieAdapter.h
index 42ea7f8127..35e4ac3ecf 100644
--- a/modules/skottie/src/SkottieAdapter.h
+++ b/modules/skottie/src/SkottieAdapter.h
@@ -20,8 +20,8 @@ class Draw;
class Gradient;
class Group;
class LinearGradient;
+template <typename>
class Matrix;
-class Matrix44;
class Path;
class RadialGradient;
class RRect;
@@ -86,7 +86,7 @@ private:
class TransformAdapter2D final : public SkNVRefCnt<TransformAdapter2D> {
public:
- explicit TransformAdapter2D(sk_sp<sksg::Matrix>);
+ explicit TransformAdapter2D(sk_sp<sksg::Matrix<SkMatrix>>);
~TransformAdapter2D();
ADAPTER_PROPERTY(AnchorPoint, SkPoint , SkPoint::Make(0, 0))
@@ -101,12 +101,12 @@ public:
private:
void apply();
- sk_sp<sksg::Matrix> fMatrixNode;
+ sk_sp<sksg::Matrix<SkMatrix>> fMatrixNode;
};
class TransformAdapter3D final : public SkNVRefCnt<TransformAdapter3D> {
public:
- explicit TransformAdapter3D(sk_sp<sksg::Matrix44>);
+ explicit TransformAdapter3D(sk_sp<sksg::Matrix<SkMatrix44>>);
~TransformAdapter3D();
struct Vec3 {
@@ -130,7 +130,7 @@ public:
private:
void apply();
- sk_sp<sksg::Matrix44> fMatrixNode;
+ sk_sp<sksg::Matrix<SkMatrix44>> fMatrixNode;
};
class GradientAdapter : public SkRefCnt {
diff --git a/modules/skottie/src/SkottiePriv.h b/modules/skottie/src/SkottiePriv.h
index f6cdfa33e0..659d222b09 100644
--- a/modules/skottie/src/SkottiePriv.h
+++ b/modules/skottie/src/SkottiePriv.h
@@ -30,7 +30,6 @@ class Value;
namespace sksg {
class Color;
-class Matrix;
class Path;
class RenderNode;
class Transform;
diff --git a/modules/sksg/include/SkSGGeometryTransform.h b/modules/sksg/include/SkSGGeometryTransform.h
index a0c45acfd6..bf297ebf2a 100644
--- a/modules/sksg/include/SkSGGeometryTransform.h
+++ b/modules/sksg/include/SkSGGeometryTransform.h
@@ -11,10 +11,13 @@
#include "SkSGGeometryNode.h"
#include "SkPath.h"
-#include "SkSGTransform.h"
+
+class SkMatrix;
namespace sksg {
+class Transform;
+
/**
* Concrete Effect node, binding a Matrix to a GeometryNode.
*/
@@ -27,10 +30,6 @@ public:
: nullptr;
}
- static sk_sp<GeometryTransform> Make(sk_sp<GeometryNode> child, const SkMatrix& m) {
- return Make(std::move(child), Matrix::Make(m));
- }
-
~GeometryTransform() override;
const sk_sp<Transform>& getTransform() const { return fTransform; }
diff --git a/modules/sksg/include/SkSGTransform.h b/modules/sksg/include/SkSGTransform.h
index 9f0fd77a0c..3153a7ea02 100644
--- a/modules/sksg/include/SkSGTransform.h
+++ b/modules/sksg/include/SkSGTransform.h
@@ -38,51 +38,40 @@ private:
};
/**
- * Concrete, SkMatrix-backed transformation.
+ * Concrete, matrix-backed Transform.
+ *
+ * Supported instantiations: SkMatrix, SkMatrix44.
+ *
+ * Sample use:
+ *
+ * auto m33 = Matrix<SkMatrix>::Make(SkMatrix::I());
+ * ...
+ * m33->setMatrix(SkMatrix::MakeTrans(10, 10));
+ *
*/
+template <typename T>
class Matrix final : public Transform {
public:
- static sk_sp<Matrix> Make(const SkMatrix& m);
-
- SG_ATTRIBUTE(Matrix, SkMatrix, fMatrix)
-
-protected:
- explicit Matrix(const SkMatrix&);
-
- SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
-
- bool is44() const override { return false; }
-
- SkMatrix asMatrix () const override;
- SkMatrix44 asMatrix44() const override;
-
-private:
- SkMatrix fMatrix;
-
- using INHERITED = Transform;
-};
-
-/**
- * Concrete, SkMatrix44-backed transformation.
- */
-class Matrix44 final : public Transform {
-public:
- static sk_sp<Matrix44> Make(const SkMatrix44& m);
+ template <typename = std::enable_if<std::is_same<T, SkMatrix >::value ||
+ std::is_same<T, SkMatrix44>::value>>
+ static sk_sp<Matrix> Make(const T& m) { return sk_sp<Matrix>(new Matrix(m)); }
- SG_ATTRIBUTE(Matrix, SkMatrix44, fMatrix)
+ SG_ATTRIBUTE(Matrix, T, fMatrix)
protected:
- explicit Matrix44(const SkMatrix44&);
+ explicit Matrix(const T& m) : fMatrix(m) {}
- SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) override {
+ return SkRect::MakeEmpty();
+ }
- bool is44() const override { return true; }
+ bool is44() const override { return std::is_same<T, SkMatrix44>::value; }
- SkMatrix asMatrix () const override;
- SkMatrix44 asMatrix44() const override;
+ SkMatrix asMatrix () const override { return fMatrix; }
+ SkMatrix44 asMatrix44() const override { return fMatrix; }
private:
- SkMatrix44 fMatrix;
+ T fMatrix;
using INHERITED = Transform;
};
@@ -99,7 +88,7 @@ public:
}
static sk_sp<TransformEffect> Make(sk_sp<RenderNode> child, const SkMatrix& m) {
- return Make(std::move(child), Matrix::Make(m));
+ return Make(std::move(child), Matrix<SkMatrix>::Make(m));
}
~TransformEffect() override;
diff --git a/modules/sksg/samples/SampleSVGPong.cpp b/modules/sksg/samples/SampleSVGPong.cpp
index a849add372..7869607ca2 100644
--- a/modules/sksg/samples/SampleSVGPong.cpp
+++ b/modules/sksg/samples/SampleSVGPong.cpp
@@ -140,7 +140,7 @@ protected:
group->addChild(sksg::Draw::Make(fBall.objectNode, ball_paint));
// Handle everything in a normalized 1x1 space.
- fContentMatrix = sksg::Matrix::Make(
+ fContentMatrix = sksg::Matrix<SkMatrix>::Make(
SkMatrix::MakeRectToRect(SkRect::MakeWH(1, 1),
SkRect::MakeIWH(this->width(), this->height()),
SkMatrix::kFill_ScaleToFit));
@@ -283,14 +283,14 @@ private:
catcher->spd.fY = (yIntercept - catcher->pos.fY) / t;
}
- std::unique_ptr<sksg::Scene> fScene;
- sk_sp<sksg::Matrix> fContentMatrix;
- Object fPaddle0, fPaddle1, fBall;
- SkRandom fRand;
+ std::unique_ptr<sksg::Scene> fScene;
+ sk_sp<sksg::Matrix<SkMatrix>> fContentMatrix;
+ Object fPaddle0, fPaddle1, fBall;
+ SkRandom fRand;
- SkMSec fLastTick = 0;
- SkScalar fTimeScale = 1.0f;
- bool fShowInval = false;
+ SkMSec fLastTick = 0;
+ SkScalar fTimeScale = 1.0f;
+ bool fShowInval = false;
typedef Sample INHERITED;
};
diff --git a/modules/sksg/src/SkSGGeometryTransform.cpp b/modules/sksg/src/SkSGGeometryTransform.cpp
index 2602a46346..6e71dc62a3 100644
--- a/modules/sksg/src/SkSGGeometryTransform.cpp
+++ b/modules/sksg/src/SkSGGeometryTransform.cpp
@@ -8,6 +8,7 @@
#include "SkSGGeometryTransform.h"
#include "SkCanvas.h"
+#include "SkSGTransform.h"
#include "SkSGTransformPriv.h"
namespace sksg {
diff --git a/modules/sksg/src/SkSGTransform.cpp b/modules/sksg/src/SkSGTransform.cpp
index c36205de3b..6834fc9067 100644
--- a/modules/sksg/src/SkSGTransform.cpp
+++ b/modules/sksg/src/SkSGTransform.cpp
@@ -79,42 +79,6 @@ sk_sp<Transform> Transform::MakeConcat(sk_sp<Transform> a, sk_sp<Transform> b) {
: sk_sp<Transform>(new Concat<SkMatrix >(std::move(a), std::move(b)));
}
-sk_sp<Matrix> Matrix::Make(const SkMatrix& m) {
- return sk_sp<Matrix>(new Matrix(m));
-}
-
-Matrix::Matrix(const SkMatrix& m) : fMatrix(m) {}
-
-SkMatrix Matrix::asMatrix() const {
- return fMatrix;
-}
-
-SkMatrix44 Matrix::asMatrix44() const {
- return fMatrix;
-}
-
-SkRect Matrix::onRevalidate(InvalidationController*, const SkMatrix&) {
- return SkRect::MakeEmpty();
-}
-
-sk_sp<Matrix44> Matrix44::Make(const SkMatrix44& m) {
- return sk_sp<Matrix44>(new Matrix44(m));
-}
-
-Matrix44::Matrix44(const SkMatrix44& m) : fMatrix(m) {}
-
-SkMatrix Matrix44::asMatrix() const {
- return fMatrix;
-}
-
-SkMatrix44 Matrix44::asMatrix44() const {
- return fMatrix;
-}
-
-SkRect Matrix44::onRevalidate(InvalidationController*, const SkMatrix&) {
- return SkRect::MakeEmpty();
-}
-
TransformEffect::TransformEffect(sk_sp<RenderNode> child, sk_sp<Transform> transform)
: INHERITED(std::move(child))
, fTransform(std::move(transform)) {
diff --git a/modules/sksg/tests/SGTest.cpp b/modules/sksg/tests/SGTest.cpp
index 0d614ff133..25e62efe7d 100644
--- a/modules/sksg/tests/SGTest.cpp
+++ b/modules/sksg/tests/SGTest.cpp
@@ -60,7 +60,7 @@ static void inval_test1(skiatest::Reporter* reporter) {
auto r1 = sksg::Rect::Make(SkRect::MakeWH(100, 100)),
r2 = sksg::Rect::Make(SkRect::MakeWH(100, 100));
auto grp = sksg::Group::Make();
- auto matrix = sksg::Matrix::Make(SkMatrix::I());
+ auto matrix = sksg::Matrix<SkMatrix>::Make(SkMatrix::I());
auto root = sksg::TransformEffect::Make(grp, matrix);
grp->addChild(sksg::Draw::Make(r1, color));
@@ -128,8 +128,8 @@ static void inval_test1(skiatest::Reporter* reporter) {
static void inval_test2(skiatest::Reporter* reporter) {
auto color = sksg::Color::Make(0xff000000);
auto rect = sksg::Rect::Make(SkRect::MakeWH(100, 100));
- auto m1 = sksg::Matrix::Make(SkMatrix::I()),
- m2 = sksg::Matrix::Make(SkMatrix::I());
+ auto m1 = sksg::Matrix<SkMatrix>::Make(SkMatrix::I()),
+ m2 = sksg::Matrix<SkMatrix>::Make(SkMatrix::I());
auto t1 = sksg::TransformEffect::Make(sksg::Draw::Make(rect, color),
sksg::Transform::MakeConcat(m1, m2)),
t2 = sksg::TransformEffect::Make(sksg::Draw::Make(rect, color), m1);