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);
 

Reply via email to