[sksg] 4x4 matrix support
Refactor the scene graph transform hierarchy to support 4x4 matrices:
* rename current Transform to TransformEffect (operates as a render tree effect)
* introduce a new Transform abstract base class, to replace current Matrix
* refactor existing Matrix as a Transform specialization
* introduce a new Matrix44 Transform specialization
* refactor the existing composition helper (ComposedMatrix) as Concat,
a Transform specialization (using composition instead of Matrix inheritance)
Change-Id: Ic3c1b499e10a0a229a7a76d4bef3dbc6a8b49194
Reviewed-on: https://skia-review.googlesource.com/c/182666
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/tools/viewer/SlideDir.cpp b/tools/viewer/SlideDir.cpp
index 09ecd7c..54db653 100644
--- a/tools/viewer/SlideDir.cpp
+++ b/tools/viewer/SlideDir.cpp
@@ -101,9 +101,10 @@
} // namespace
struct SlideDir::Rec {
- sk_sp<Slide> fSlide;
- sk_sp<sksg::Transform> fTransform;
- SkRect fRect;
+ sk_sp<Slide> fSlide;
+ sk_sp<sksg::RenderNode> fSlideRoot;
+ sk_sp<sksg::Matrix> fMatrix;
+ SkRect fRect;
};
class SlideDir::FocusController final : public sksg::Animator {
@@ -128,9 +129,9 @@
fTarget = target;
// Move the shade & slide to front.
- fDir->fRoot->removeChild(fTarget->fTransform);
+ fDir->fRoot->removeChild(fTarget->fSlideRoot);
fDir->fRoot->addChild(fShade);
- fDir->fRoot->addChild(fTarget->fTransform);
+ fDir->fRoot->addChild(fTarget->fSlideRoot);
fM0 = SlideMatrix(fTarget->fSlide, fTarget->fRect);
fM1 = SlideMatrix(fTarget->fSlide, fRect);
@@ -197,7 +198,7 @@
}
SkASSERT(fTarget);
- fTarget->fTransform->getMatrix()->setMatrix(m);
+ fTarget->fMatrix->setMatrix(m);
const auto shadeOpacity = fOpacity0 + map_t * (fOpacity1 - fOpacity0);
fShadePaint->setOpacity(shadeOpacity);
@@ -305,7 +306,7 @@
fCellSize.height()),
slideRect = cell.makeInset(kPadding.width(), kPadding.height());
- auto slideMatrix = SlideMatrix(slide, slideRect);
+ auto slideMatrix = sksg::Matrix::Make(SlideMatrix(slide, slideRect));
auto adapter = sk_make_sp<SlideAdapter>(slide);
auto slideGrp = sksg::Group::Make();
slideGrp->addChild(sksg::Draw::Make(sksg::Rect::Make(SkRect::MakeIWH(slideSize.width(),
@@ -314,13 +315,13 @@
slideGrp->addChild(adapter);
slideGrp->addChild(MakeLabel(slide->getName(),
SkPoint::Make(slideSize.width() / 2, slideSize.height()),
- slideMatrix));
- auto slideTransform = sksg::Transform::Make(std::move(slideGrp), slideMatrix);
+ slideMatrix->getMatrix()));
+ auto slideRoot = sksg::TransformEffect::Make(std::move(slideGrp), slideMatrix);
sceneAnimators.push_back(adapter->makeForwardingAnimator());
- fRoot->addChild(slideTransform);
- fRecs.push_back({ slide, slideTransform, slideRect });
+ fRoot->addChild(slideRoot);
+ fRecs.push_back({ slide, slideRoot, slideMatrix, slideRect });
}
fScene = sksg::Scene::Make(fRoot, std::move(sceneAnimators));