diff options
author | Florin Malita <fmalita@chromium.org> | 2019-01-09 15:37:57 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2019-01-10 02:06:54 +0000 |
commit | 919e209d1a21a79ece32d0a1aeaeaaa832abd5b7 (patch) | |
tree | 723636b36c3f96b99fe4ce0faae89dbb73b4d0bc /tools | |
parent | d2fa7e33798c8b6bee0533e3dad02380d27bcfbe (diff) | |
download | platform_external_skqp-919e209d1a21a79ece32d0a1aeaeaaa832abd5b7.tar.gz platform_external_skqp-919e209d1a21a79ece32d0a1aeaeaaa832abd5b7.tar.bz2 platform_external_skqp-919e209d1a21a79ece32d0a1aeaeaaa832abd5b7.zip |
[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>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/viewer/SlideDir.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/tools/viewer/SlideDir.cpp b/tools/viewer/SlideDir.cpp index 09ecd7ce14..54db653c5a 100644 --- a/tools/viewer/SlideDir.cpp +++ b/tools/viewer/SlideDir.cpp @@ -101,9 +101,10 @@ SkMatrix SlideMatrix(const sk_sp<Slide>& slide, const SkRect& dst) { } // 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 @@ public: 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 @@ protected: } 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 @@ void SlideDir::load(SkScalar winWidth, SkScalar winHeight) { 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 @@ void SlideDir::load(SkScalar winWidth, SkScalar winHeight) { 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)); |