diff options
author | Dennis Francis <dennis.francis@collabora.com> | 2022-02-09 12:31:49 +0530 |
---|---|---|
committer | Dennis Francis <dennis.francis@collabora.com> | 2022-02-11 05:39:00 +0100 |
commit | 59460f4e02cc312062d76a8fc315800129bb9219 (patch) | |
tree | dc5e6506cdf29c57c925ba99dd47f8e73932de31 /sfx2 | |
parent | 0613c89308c3d37c7631a9af3605b31abcff6980 (diff) |
lokCalcRTL: global RTL: fix chart edit mode rendering
If global RTL flag is set, vcl-window X offset of chart window is
mirrored w.r.t parent window rectangle. This has to be undone to get the
correct chart bounding box in negative X document coordinates so that
the offset calculations for tile rendering remains the same for RTL
documents irrespective of the system/global RTL setting.
Conflicts:
include/sfx2/lokcharthelper.hxx
sfx2/source/view/lokcharthelper.cxx
Change-Id: I3e1666681af4e7ab1257bcc88d44bbdb053a7d47
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129704
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
(cherry picked from commit 4fd2a14c6ee68f0574766ec7ec3dca35debe9d20)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129778
Tested-by: Jenkins
Reviewed-by: Dennis Francis <dennis.francis@collabora.com>
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/view/lokcharthelper.cxx | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/sfx2/source/view/lokcharthelper.cxx b/sfx2/source/view/lokcharthelper.cxx index a87388832755..c7941e6aa2ac 100644 --- a/sfx2/source/view/lokcharthelper.cxx +++ b/sfx2/source/view/lokcharthelper.cxx @@ -127,7 +127,17 @@ tools::Rectangle LokChartHelper::GetChartBoundingBox() const auto nYNum = p.first * scaleY.GetDenominator(); const auto nYDen = p.second * scaleY.GetNumerator(); - Point aOffset = pWindow->GetOffsetPixelFrom(*pRootWin).scale(nXNum, nXDen, nYNum, nYDen); + Point aOffset = pWindow->GetOffsetPixelFrom(*pRootWin); + if (mbNegativeX && AllSettings::GetLayoutRTL()) + { + // If global RTL flag is set, vcl-window X offset of chart window is + // mirrored w.r.t parent window rectangle. This needs to be reverted. + aOffset.setX(pRootWin->GetOutOffXPixel() + pRootWin->GetSizePixel().Width() + - pWindow->GetOutOffXPixel() - pWindow->GetSizePixel().Width()); + + } + + aOffset = aOffset.scale(nXNum, nXDen, nYNum, nYDen); Size aSize = pWindow->GetSizePixel().scale(nXNum, nXDen, nYNum, nYDen); aBBox = tools::Rectangle(aOffset, aSize); } @@ -158,7 +168,7 @@ bool LokChartHelper::Hit(const Point& aPos) return false; } -bool LokChartHelper::HitAny(const Point& aPos) +bool LokChartHelper::HitAny(const Point& aPos, bool bNegativeX) { SfxViewShell* pCurView = SfxViewShell::Current(); int nPartForCurView = pCurView ? pCurView->getPart() : -1; @@ -167,7 +177,7 @@ bool LokChartHelper::HitAny(const Point& aPos) { if (pViewShell->GetDocId() == pCurView->GetDocId() && pViewShell->getPart() == nPartForCurView) { - LokChartHelper aChartHelper(pViewShell); + LokChartHelper aChartHelper(pViewShell, bNegativeX); if (aChartHelper.Hit(aPos)) return true; } @@ -253,7 +263,7 @@ void LokChartHelper::PaintAllChartsOnTile(VirtualDevice& rDevice, { if (pCurView && pViewShell->GetDocId() == pCurView->GetDocId() && pViewShell->getPart() == nPartForCurView) { - LokChartHelper aChartHelper(pViewShell); + LokChartHelper aChartHelper(pViewShell, bNegativeX); aChartHelper.PaintTile(rDevice, aTileRect); } pViewShell = SfxViewShell::GetNext(*pViewShell); |