[Libreoffice-commits] core.git: Branch 'feature/drawinglayercore' - sd/source

Tomaž Vajngerl (via logerrit) logerrit at kemper.freedesktop.org
Fri May 29 06:35:20 UTC 2020


 sd/source/ui/view/Outliner.cxx |   61 ++++++++++++++++++++---------------------
 1 file changed, 30 insertions(+), 31 deletions(-)

New commits:
commit 27c7753fd6d959ed5b49e516e27b965df8b3e2c1
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri May 29 08:33:42 2020 +0200
Commit:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
CommitDate: Fri May 29 08:33:42 2020 +0200

    sd: remove code dupl. when getting PDF text selection for LOK
    
    Change-Id: I61d0a9851e9cfe60e9672acec38946b0b25f310f

diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx
index 28b73bc708b2..e6dfcb27bc0a 100644
--- a/sd/source/ui/view/Outliner.cxx
+++ b/sd/source/ui/view/Outliner.cxx
@@ -704,11 +704,16 @@ basegfx::B2DRange b2DRectangleFromRectangle( const ::tools::Rectangle& rRect )
                                  rRect.IsHeightEmpty() ? rRect.Top() : rRect.Bottom());
 }
 
-void getPDFSelections(std::vector<basegfx::B2DRectangle> & rSubSelections,
-                      std::unique_ptr<VectorGraphicSearch> & rVectorGraphicSearch,
-                      SdrObject* pObject)
+basegfx::B2DRectangle getPDFSelection(std::unique_ptr<VectorGraphicSearch> & rVectorGraphicSearch,
+                                       SdrObject* pObject)
 {
-    basegfx::B2DSize aPdfPageSize = rVectorGraphicSearch->pageSize();
+    basegfx::B2DRectangle aSelection;
+
+    auto const & rTextRectangles = rVectorGraphicSearch->getTextRectangles();
+    if (rTextRectangles.empty())
+        return aSelection;
+
+    basegfx::B2DSize aPdfPageSizeHMM = rVectorGraphicSearch->pageSize();
 
     basegfx::B2DRectangle aObjectB2DRectHMM(b2DRectangleFromRectangle(pObject->GetLogicRect()));
 
@@ -716,23 +721,23 @@ void getPDFSelections(std::vector<basegfx::B2DRectangle> & rSubSelections,
     // coordinates to the page relative coordinates
     basegfx::B2DHomMatrix aB2DMatrix;
 
-    aB2DMatrix.scale(aObjectB2DRectHMM.getWidth() / aPdfPageSize.getX(),
-                     aObjectB2DRectHMM.getHeight() / aPdfPageSize.getY());
+    aB2DMatrix.scale(aObjectB2DRectHMM.getWidth() / aPdfPageSizeHMM.getX(),
+                     aObjectB2DRectHMM.getHeight() / aPdfPageSizeHMM.getY());
 
     aB2DMatrix.translate(aObjectB2DRectHMM.getMinX(), aObjectB2DRectHMM.getMinY());
 
-    basegfx::B2DRectangle aCombined;
 
-    for (auto aRectangle : rVectorGraphicSearch->getTextRectangles())
+    for (auto aRectangle : rTextRectangles)
     {
         aRectangle *= aB2DMatrix;
-        if (aCombined.isEmpty())
-            aCombined = aRectangle;
+
+        if (aSelection.isEmpty())
+            aSelection = aRectangle;
         else
-            aCombined.expand(aRectangle);
+            aSelection.expand(aRectangle);
     }
 
-    rSubSelections.push_back(aCombined);
+    return aSelection;
 }
 
 } // end namespace
@@ -744,24 +749,13 @@ void SdOutliner::sendLOKSearchResultCallback(std::shared_ptr<sd::ViewShell> & pV
     std::vector<::tools::Rectangle> aLogicRects;
     if (mpImpl->mbCurrentIsVectorGraphic)
     {
-        basegfx::B2DSize aPdfPageSize = mpImpl->mpVectorGraphicSearch->pageSize();
-
-        tools::Rectangle aObjectRectTwip = OutputDevice::LogicToLogic(mpObj->GetLogicRect(), MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip));
-        basegfx::B2DRectangle aObjectB2DRectTwip(b2DRectangleFromRectangle(aObjectRectTwip));
-
-        // Setup coordinate conversion matrix to convert the inner PDF
-        // coordinates to the page relative coordinates
-        basegfx::B2DHomMatrix aB2DMatrix;
-
-        aB2DMatrix.scale(aObjectB2DRectTwip.getWidth() / aPdfPageSize.getX(),
-                         aObjectB2DRectTwip.getHeight() / aPdfPageSize.getY());
-
-        aB2DMatrix.translate(aObjectB2DRectTwip.getMinX(), aObjectB2DRectTwip.getMinY());
-
-        for (auto aRectangle : mpImpl->mpVectorGraphicSearch->getTextRectangles())
+        basegfx::B2DRectangle aB2DRectangle = getPDFSelection(mpImpl->mpVectorGraphicSearch, mpObj);
+        if (!aB2DRectangle.isEmpty())
         {
-            aRectangle *= aB2DMatrix;
-            aLogicRects.emplace_back(Point(aRectangle.getMinX(), aRectangle.getMinY()), Size(aRectangle.getWidth(), aRectangle.getHeight()));
+            tools::Rectangle aSelection(Point(aB2DRectangle.getMinX(), aB2DRectangle.getMinY()),
+                                        Size(aB2DRectangle.getWidth(), aB2DRectangle.getHeight()));
+            aSelection = OutputDevice::LogicToLogic(aSelection, MapMode(MapUnit::Map100thMM), MapMode(MapUnit::MapTwip));
+            aLogicRects.push_back(aSelection);
         }
     }
     else
@@ -860,7 +854,9 @@ bool SdOutliner::SearchAndReplaceOnce(std::vector<sd::SearchSelection>* pSelecti
                     mpView->UnmarkAllObj(pPageView);
 
                     std::vector<basegfx::B2DRectangle> aSubSelections;
-                    getPDFSelections(aSubSelections, mpImpl->mpVectorGraphicSearch, mpObj);
+                    basegfx::B2DRectangle aSubSelection = getPDFSelection(mpImpl->mpVectorGraphicSearch, mpObj);
+                    if (!aSubSelection.isEmpty())
+                        aSubSelections.push_back(aSubSelection);
                     mpView->MarkObj(mpObj, pPageView, false, false, aSubSelections);
                 }
             }
@@ -1261,7 +1257,10 @@ void SdOutliner::ProvideNextTextObject()
                             mpView->UnmarkAllObj(pPageView);
 
                             std::vector<basegfx::B2DRectangle> aSubSelections;
-                            getPDFSelections(aSubSelections, mpImpl->mpVectorGraphicSearch, mpObj);
+                            basegfx::B2DRectangle aSubSelection = getPDFSelection(mpImpl->mpVectorGraphicSearch, mpObj);
+                            if (!aSubSelection.isEmpty())
+                                aSubSelections.push_back(aSubSelection);
+
                             mpView->MarkObj(mpObj, pPageView, false, false, aSubSelections);
 
                             mpDrawDocument->GetDocSh()->SetWaitCursor( false );


More information about the Libreoffice-commits mailing list