From 72385a1ddf68d7c30813b7ca964850c96850a8de Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 13 Nov 2015 14:42:35 +0100 Subject: [PATCH 324/398] editeng lok: respect origin of map mode for TEXT_SELECTION With this, selections of Writer comment text show up at the correct position, not at the top left corner of the window. (cherry picked from commit 22e97c130868fe7d7529cfcfb2a240f775bd8916) Change-Id: If865503d9a02a27730e382d65c42c706dd533a93 --- editeng/source/editeng/impedit.cxx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index 8038ac6d3d41..0207155e4d75 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -327,6 +328,12 @@ void ImpEditView::DrawSelection( EditSelection aTmpSel, vcl::Region* pRegion, Ou if (isTiledRendering() && !pOldRegion) { bool bMm100ToTwip = pOutWin->GetMapMode().GetMapUnit() == MAP_100TH_MM; + + Point aOrigin; + if (pOutWin->GetMapMode().GetMapUnit() == MAP_TWIP) + // Writer comments: they use editeng, but are separate widgets. + aOrigin = pOutWin->GetMapMode().GetOrigin(); + OString sRectangle; // If we are not in selection mode, then the exported selection should be empty. if (pEditEngine->pImpEditEngine->IsInSelectionMode()) @@ -340,26 +347,27 @@ void ImpEditView::DrawSelection( EditSelection aTmpSel, vcl::Region* pRegion, Ou Rectangle aStart = Rectangle(rStart.Left(), rStart.Top(), rStart.Left() + 1, rStart.Bottom()); if (bMm100ToTwip) aStart = OutputDevice::LogicToLogic(aStart, MAP_100TH_MM, MAP_TWIP); + aStart.Move(aOrigin.getX(), aOrigin.getY()); libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION_START, aStart.toString().getStr()); Rectangle& rEnd = aRectangles.back(); Rectangle aEnd = Rectangle(rEnd.Right() - 1, rEnd.Top(), rEnd.Right(), rEnd.Bottom()); if (bMm100ToTwip) aEnd = OutputDevice::LogicToLogic(aEnd, MAP_100TH_MM, MAP_TWIP); + aEnd.Move(aOrigin.getX(), aOrigin.getY()); libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION_END, aEnd.toString().getStr()); } - std::stringstream ss; + std::vector v; for (size_t i = 0; i < aRectangles.size(); ++i) { Rectangle& rRectangle = aRectangles[i]; - if (i) - ss << "; "; if (bMm100ToTwip) rRectangle = OutputDevice::LogicToLogic(rRectangle, MAP_100TH_MM, MAP_TWIP); - ss << rRectangle.toString().getStr(); + rRectangle.Move(aOrigin.getX(), aOrigin.getY()); + v.push_back(rRectangle.toString().getStr()); } - sRectangle = ss.str().c_str(); + sRectangle = comphelper::string::join("; ", v); } libreOfficeKitCallback(LOK_CALLBACK_TEXT_SELECTION, sRectangle.getStr()); } -- 2.12.0