diff options
author | Florin Malita <fmalita@chromium.org> | 2019-01-10 15:24:15 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-10 21:50:54 +0000 |
commit | 760a052c1e75a2daeb5af11eb2429cb9b908646b (patch) | |
tree | e6d7cc05f6d9fdb60f88232178503fe717f2561b /modules | |
parent | 14e9177492e631a5e55132a0580ece0f45d48e79 (diff) | |
download | skqp-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.cpp | 4 | ||||
-rw-r--r-- | modules/skottie/src/SkottieAdapter.cpp | 4 | ||||
-rw-r--r-- | modules/skottie/src/SkottieAdapter.h | 10 | ||||
-rw-r--r-- | modules/skottie/src/SkottiePriv.h | 1 | ||||
-rw-r--r-- | modules/sksg/include/SkSGGeometryTransform.h | 9 | ||||
-rw-r--r-- | modules/sksg/include/SkSGTransform.h | 59 | ||||
-rw-r--r-- | modules/sksg/samples/SampleSVGPong.cpp | 16 | ||||
-rw-r--r-- | modules/sksg/src/SkSGGeometryTransform.cpp | 1 | ||||
-rw-r--r-- | modules/sksg/src/SkSGTransform.cpp | 36 | ||||
-rw-r--r-- | modules/sksg/tests/SGTest.cpp | 6 |
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); |