drawinglayer/source/texture/texture.cxx |   30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

New commits:
commit dabaf2879673fe4bbe874a2917e7a9200737ba81
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Sep 2 12:03:26 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Sep 2 13:22:13 2022 +0200

    tdf#136370 Very large Shape with pattern/hatch makes scrolling slow
    
    reduce some time spent in the 3-d rendering
    
    Change-Id: I5d622799bc101b5b988d382a039b5a3b03818d1c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139256
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/drawinglayer/source/texture/texture.cxx 
b/drawinglayer/source/texture/texture.cxx
index b3477f642880..4a92e443c275 100644
--- a/drawinglayer/source/texture/texture.cxx
+++ b/drawinglayer/source/texture/texture.cxx
@@ -627,8 +627,34 @@ namespace drawinglayer::texture
 
         double GeoTexSvxHatch::getDistanceToHatch(const basegfx::B2DPoint& 
rUV) const
         {
-            const basegfx::B2DPoint aCoor(getBackTextureTransform() * rUV);
-            return fmod(aCoor.getY(), mfDistance);
+            // the below is an inlined and optimised version of
+            //     const basegfx::B2DPoint aCoor(getBackTextureTransform() * 
rUV);
+            //     return fmod(aCoor.getY(), mfDistance);
+
+            const basegfx::B2DHomMatrix& rMat = getBackTextureTransform();
+            double fX = rUV.getX();
+            double fY = rUV.getY();
+
+            double fTempY(
+                rMat.get(1, 0) * fX +
+                rMat.get(1, 1) * fY +
+                rMat.get(1, 2));
+
+            if(!rMat.isLastLineDefault())
+            {
+                const double fOne(1.0);
+                const double fTempM(
+                    rMat.get(2, 0) * fX +
+                    rMat.get(2, 1) * fY +
+                    rMat.get(2, 2));
+
+                if(!basegfx::fTools::equalZero(fTempM) && 
!basegfx::fTools::equal(fOne, fTempM))
+                {
+                    fTempY /= fTempM;
+                }
+            }
+
+            return fmod(fTempY, mfDistance);
         }
 
         const basegfx::B2DHomMatrix& GeoTexSvxHatch::getBackTextureTransform() 
const

Reply via email to