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