[Libreoffice-commits] core.git: drawinglayer/inc drawinglayer/source

Mark Hung (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 14 07:29:12 UTC 2020


 drawinglayer/inc/texture/texture.hxx    |    6 ++-
 drawinglayer/source/texture/texture.cxx |   50 +++++++++-----------------------
 2 files changed, 19 insertions(+), 37 deletions(-)

New commits:
commit 6ab37705448393c2d4253fb9970caf73142a99f0
Author:     Mark Hung <marklh9 at gmail.com>
AuthorDate: Fri Apr 3 23:42:09 2020 +0800
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Tue Apr 14 09:28:41 2020 +0200

    drawinglayer: refactor GeoTexSvxTiled::iterateTiles
    
    to provide a more generic callback interface and expose
    it as public to allow other usage.
    
    Change-Id: I6bc62a05fee750586f7281d8c24f2133884e77ba
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92134
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/drawinglayer/inc/texture/texture.hxx b/drawinglayer/inc/texture/texture.hxx
index c61d8d2b1674..64595a46222c 100644
--- a/drawinglayer/inc/texture/texture.hxx
+++ b/drawinglayer/inc/texture/texture.hxx
@@ -26,6 +26,7 @@
 #include <basegfx/color/bcolor.hxx>
 #include <basegfx/utils/gradienttools.hxx>
 #include <vector>
+#include <functional>
 
 
 namespace drawinglayer
@@ -317,8 +318,6 @@ namespace drawinglayer
             double                          mfOffsetX;
             double                          mfOffsetY;
 
-            sal_Int32 iterateTiles(::std::vector< basegfx::B2DHomMatrix >* pMatrices) const;
-
         public:
             GeoTexSvxTiled(
                 const basegfx::B2DRange& rRange,
@@ -329,6 +328,9 @@ namespace drawinglayer
             // compare operator
             virtual bool operator==(const GeoTexSvx& rGeoTexSvx) const override;
 
+            // Iterate over created tiles with callback provided.
+            void iterateTiles(std::function<void(double fPosX, double fPosY)> aFunc) const;
+
             void appendTransformations(::std::vector< basegfx::B2DHomMatrix >& rMatrices) const;
             sal_uInt32 getNumberOfTiles() const;
         };
diff --git a/drawinglayer/source/texture/texture.cxx b/drawinglayer/source/texture/texture.cxx
index e3cbc14e4fac..4787718195d8 100644
--- a/drawinglayer/source/texture/texture.cxx
+++ b/drawinglayer/source/texture/texture.cxx
@@ -677,18 +677,27 @@ namespace drawinglayer::texture
 
         sal_uInt32 GeoTexSvxTiled::getNumberOfTiles() const
         {
-            return iterateTiles(nullptr);
+            sal_Int32 nTiles = 0;
+            iterateTiles([&](double, double) { ++nTiles; });
+            return nTiles;
         }
 
         void GeoTexSvxTiled::appendTransformations(std::vector< basegfx::B2DHomMatrix >& rMatrices) const
         {
-            iterateTiles(&rMatrices);
+            const double fWidth(maRange.getWidth());
+            const double fHeight(maRange.getHeight());
+            iterateTiles([&](double fPosX, double fPosY) {
+                rMatrices.push_back(basegfx::utils::createScaleTranslateB2DHomMatrix(
+                                        fWidth,
+                                        fHeight,
+                                        fPosX,
+                                        fPosY));
+                });
         }
 
-        sal_Int32 GeoTexSvxTiled::iterateTiles(std::vector< basegfx::B2DHomMatrix >* pMatrices) const
+        void GeoTexSvxTiled::iterateTiles(std::function<void(double fPosX, double fPosY)> aFunc) const
         {
             const double fWidth(maRange.getWidth());
-            sal_Int32 nTiles = 0;
 
             if(!basegfx::fTools::equalZero(fWidth))
             {
@@ -739,21 +748,7 @@ namespace drawinglayer::texture
                         {
                             for(double fPosY((nPosX % 2) ? fStartY - fHeight + (mfOffsetY * fHeight) : fStartY);
                                 basegfx::fTools::less(fPosY, 1.0); fPosY += fHeight)
-                            {
-                                if(pMatrices)
-                                {
-                                    pMatrices->push_back(
-                                        basegfx::utils::createScaleTranslateB2DHomMatrix(
-                                            fWidth,
-                                            fHeight,
-                                            fPosX,
-                                            fPosY));
-                                }
-                                else
-                                {
-                                    nTiles++;
-                                }
-                            }
+                                aFunc(fPosX, fPosY);
                         }
                     }
                     else
@@ -762,27 +757,12 @@ namespace drawinglayer::texture
                         {
                             for(double fPosX((nPosY % 2) ? fStartX - fWidth + (mfOffsetX * fWidth) : fStartX);
                                 basegfx::fTools::less(fPosX, 1.0); fPosX += fWidth)
-                            {
-                                if(pMatrices)
-                                {
-                                    pMatrices->push_back(
-                                        basegfx::utils::createScaleTranslateB2DHomMatrix(
-                                            fWidth,
-                                            fHeight,
-                                            fPosX,
-                                            fPosY));
-                                }
-                                else
-                                {
-                                    nTiles++;
-                                }
-                            }
+                                aFunc(fPosX, fPosY);
                         }
                     }
                 }
             }
 
-            return nTiles;
         }
 
 } // end of namespace


More information about the Libreoffice-commits mailing list