drawinglayer/source/primitive2d/Tools.cxx | 2 + drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx | 19 ++++++++++ drawinglayer/source/processor2d/hittestprocessor2d.cxx | 1 include/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx | 2 - svx/source/sdr/contact/viewobjectcontact.cxx | 1 5 files changed, 24 insertions(+), 1 deletion(-)
New commits: commit b40ecb9bff633ad6f301d8a8bf169a94b52ccbb2 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Tue Jul 16 15:59:23 2024 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Tue Jul 16 18:15:33 2024 +0200 tdf#158397 freeze hovering mouse above animating gif Improve the hit-test machinery so we don't need to rerender the graphic when moving the mouse over it Change-Id: Ide088296aa9c2be1348b8908194f47378454ae40 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/170587 Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> Tested-by: Jenkins diff --git a/drawinglayer/source/primitive2d/Tools.cxx b/drawinglayer/source/primitive2d/Tools.cxx index b13505bc3fd6..631ec63e52c1 100644 --- a/drawinglayer/source/primitive2d/Tools.cxx +++ b/drawinglayer/source/primitive2d/Tools.cxx @@ -235,6 +235,8 @@ OUString idToString(sal_uInt32 nId) return u"EXCLUSIVEEDITVIEWPRIMITIVE2D"_ustr; case PRIMITIVE2D_ID_POLYPOLYGONRGBAGRADIENTPRIMITIVE2D: return u"POLYPOLYGONRGBAGRADIENTPRIMITIVE2D"_ustr; + case PRIMITIVE2D_ID_ANIMATEDGRAPHICPRIMITIVE2D: + return u"ANIMATEDGRAPHICPRIMITIVE2D"_ustr; default: return OUString::number((nId >> 16) & 0xFF) + "|" + OUString::number(nId & 0xFF); } diff --git a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx index f59679e99817..81555bee9fb1 100644 --- a/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx +++ b/drawinglayer/source/primitive2d/graphicprimitivehelper2d.cxx @@ -29,6 +29,7 @@ #include <drawinglayer/primitive2d/transformprimitive2d.hxx> #include <drawinglayer/primitive2d/maskprimitive2d.hxx> #include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> +#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> #include <drawinglayer/geometry/viewinformation2d.hxx> #include <basegfx/polygon/b2dpolygon.hxx> #include <basegfx/polygon/b2dpolygontools.hxx> @@ -360,11 +361,17 @@ namespace drawinglayer::primitive2d /// data read access const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + /// provide unique ID + virtual sal_uInt32 getPrimitive2DID() const override { return PRIMITIVE2D_ID_ANIMATEDGRAPHICPRIMITIVE2D; } + /// compare operator virtual bool operator==(const BasePrimitive2D& rPrimitive) const override; /// override to deliver the correct expected frame dependent of timing virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; + + /// get range + virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; }; } @@ -501,6 +508,18 @@ namespace drawinglayer::primitive2d rVisitor.visit(aRetval); } + basegfx::B2DRange AnimatedGraphicPrimitive2D::getB2DRange(const geometry::ViewInformation2D& rViewInformation) const + { + // get object's range + basegfx::B2DRange aUnitRange(0.0, 0.0, 1.0, 1.0); + aUnitRange.transform(getTransform()); + + // intersect with visible part + aUnitRange.intersect(rViewInformation.getViewport()); + + return aUnitRange; + } + } // end of namespace namespace drawinglayer::primitive2d diff --git a/drawinglayer/source/processor2d/hittestprocessor2d.cxx b/drawinglayer/source/processor2d/hittestprocessor2d.cxx index cf6d3eec9447..a6fc3978b733 100644 --- a/drawinglayer/source/processor2d/hittestprocessor2d.cxx +++ b/drawinglayer/source/processor2d/hittestprocessor2d.cxx @@ -468,6 +468,7 @@ namespace drawinglayer::processor2d case PRIMITIVE2D_ID_FILLHATCHPRIMITIVE2D : case PRIMITIVE2D_ID_PAGEPREVIEWPRIMITIVE2D : case PRIMITIVE2D_ID_MEDIAPRIMITIVE2D: + case PRIMITIVE2D_ID_ANIMATEDGRAPHICPRIMITIVE2D: { if(!getHitTextOnly()) { diff --git a/include/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx b/include/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx index 2345a4b86071..71d0be9988e7 100644 --- a/include/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx +++ b/include/drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx @@ -109,7 +109,7 @@ #define PRIMITIVE2D_ID_SINGLELINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 75) #define PRIMITIVE2D_ID_EXCLUSIVEEDITVIEWPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 76) #define PRIMITIVE2D_ID_POLYPOLYGONRGBAGRADIENTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 77) - +#define PRIMITIVE2D_ID_ANIMATEDGRAPHICPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_DRAWINGLAYER| 78) // When you add a new primitive, please update the drawinglayer::primitive2d::idToString() function // in drawinglayer/source/primitive2d/Tools.cxx. diff --git a/svx/source/sdr/contact/viewobjectcontact.cxx b/svx/source/sdr/contact/viewobjectcontact.cxx index fcac2d021a81..987f51b6d0cb 100644 --- a/svx/source/sdr/contact/viewobjectcontact.cxx +++ b/svx/source/sdr/contact/viewobjectcontact.cxx @@ -99,6 +99,7 @@ void AnimatedExtractingProcessor2D::processBasePrimitive2D(const drawinglayer::p case PRIMITIVE2D_ID_ANIMATEDSWITCHPRIMITIVE2D : case PRIMITIVE2D_ID_ANIMATEDBLINKPRIMITIVE2D : case PRIMITIVE2D_ID_ANIMATEDINTERPOLATEPRIMITIVE2D : + case PRIMITIVE2D_ID_ANIMATEDGRAPHICPRIMITIVE2D : { const drawinglayer::primitive2d::AnimatedSwitchPrimitive2D& rSwitchPrimitive = static_cast< const drawinglayer::primitive2d::AnimatedSwitchPrimitive2D& >(rCandidate);