diff options
author | Mark Hung <marklh9@gmail.com> | 2020-04-03 23:42:09 +0800 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-04-14 09:28:41 +0200 |
commit | 6ab37705448393c2d4253fb9970caf73142a99f0 (patch) | |
tree | 0c864818e7d31c6fd7687ccce6216761475f1186 /drawinglayer | |
parent | 6de9dc3c949391ea8c6f68e7ca2b0df992fadb9c (diff) |
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@collabora.co.uk>
Diffstat (limited to 'drawinglayer')
-rw-r--r-- | drawinglayer/inc/texture/texture.hxx | 6 | ||||
-rw-r--r-- | drawinglayer/source/texture/texture.cxx | 50 |
2 files changed, 19 insertions, 37 deletions
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 |