diff options
author | Khaled Hosny <khaled@libreoffice.org> | 2023-08-29 20:51:06 +0300 |
---|---|---|
committer | خالد حسني <khaled@libreoffice.org> | 2023-09-04 18:18:37 +0200 |
commit | f80c2c70756e3620daed6675c8546caca4153d4b (patch) | |
tree | 31ce340cf6b0bb52a3d08b1da78a567b1606f3aa /starmath | |
parent | fe3098b4c4b5b8099e43279044db9ae7a1e0999d (diff) |
tdf#134193: Fix inline editing with RTL direction
Change-Id: I65d3ed0d7c56839ce3674318144269719b043ba5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156261
Tested-by: Jenkins
Reviewed-by: خالد حسني <khaled@libreoffice.org>
Diffstat (limited to 'starmath')
-rw-r--r-- | starmath/inc/visitors.hxx | 2 | ||||
-rw-r--r-- | starmath/source/document.cxx | 24 | ||||
-rw-r--r-- | starmath/source/visitors.cxx | 8 |
3 files changed, 23 insertions, 11 deletions
diff --git a/starmath/inc/visitors.hxx b/starmath/inc/visitors.hxx index c1a2a8983286..338e93432ba1 100644 --- a/starmath/inc/visitors.hxx +++ b/starmath/inc/visitors.hxx @@ -219,7 +219,7 @@ public: , maPosition( position ) , mrFormat( rFormat ) { - if (mrFormat.IsRightToLeft()) + if (mrFormat.IsRightToLeft() && mrDev.GetOutDevType() != OUTDEV_WINDOW) mrDev.ReMirror(maPosition); pTree->Accept( this ); } diff --git a/starmath/source/document.cxx b/starmath/source/document.cxx index 9bdaad7530e6..8f8e184470a0 100644 --- a/starmath/source/document.cxx +++ b/starmath/source/document.cxx @@ -332,8 +332,10 @@ void SmDocShell::DrawFormula(OutputDevice &rDev, Point &rPosition, bool bDrawSel rPosition.AdjustY(maFormat.GetDistance( DIS_TOPSPACE ) ); Point aPosition(rPosition); - if (bRTL) - aPosition.AdjustX(GetSize().Width() - maFormat.GetDistance(DIS_LEFTSPACE) - maFormat.GetDistance(DIS_RIGHTSPACE)); + if (bRTL && rDev.GetOutDevType() != OUTDEV_WINDOW) + aPosition.AdjustX(GetSize().Width() + - maFormat.GetDistance(DIS_LEFTSPACE) + - maFormat.GetDistance(DIS_RIGHTSPACE)); //! in case of high contrast-mode (accessibility option!) //! the draw mode needs to be set to default, because when embedding @@ -353,11 +355,21 @@ void SmDocShell::DrawFormula(OutputDevice &rDev, Point &rPosition, bool bDrawSel vcl::PushFlags::RTLENABLED); // We want the device to always be LTR, we handle RTL formulas ourselves. - rDev.EnableRTL(false); + if (rDev.GetOutDevType() == OUTDEV_WINDOW) + rDev.EnableRTL(bRTL); + else + rDev.EnableRTL(false); - // For RTL formulas, we want the brackets to be mirrored. - rDev.SetLayoutMode(bRTL ? vcl::text::ComplexTextLayoutFlags::BiDiRtl - : vcl::text::ComplexTextLayoutFlags::Default); + auto nLayoutFlags = vcl::text::ComplexTextLayoutFlags::Default; + if (bRTL) + { + // For RTL formulas, we want the brackets to be mirrored. + nLayoutFlags |= vcl::text::ComplexTextLayoutFlags::BiDiRtl; + if (rDev.GetOutDevType() == OUTDEV_WINDOW) + nLayoutFlags |= vcl::text::ComplexTextLayoutFlags::TextOriginLeft; + } + + rDev.SetLayoutMode(nLayoutFlags); // Numbers should not be converted, for now. rDev.SetDigitLanguage( LANGUAGE_ENGLISH ); diff --git a/starmath/source/visitors.cxx b/starmath/source/visitors.cxx index cece754de276..732c27f9840f 100644 --- a/starmath/source/visitors.cxx +++ b/starmath/source/visitors.cxx @@ -438,7 +438,7 @@ void SmDrawingVisitor::Visit( SmRootSymbolNode* pNode ) tools::Rectangle aBar( aBarPos, Size( nBarWidth, nBarHeight ) ); - if (mrFormat.IsRightToLeft()) + if (mrFormat.IsRightToLeft() && mrDev.GetOutDevType() != OUTDEV_WINDOW) mrDev.ReMirror(aBar); //! avoid GROWING AND SHRINKING of drawn rectangle when constantly @@ -465,7 +465,7 @@ void SmDrawingVisitor::Visit( SmPolyLineNode* pNode ) + Point( nBorderwidth, nBorderwidth ) ), aPos ( maPosition + aOffset ); - if (mrFormat.IsRightToLeft()) + if (mrFormat.IsRightToLeft() && mrDev.GetOutDevType() != OUTDEV_WINDOW) mrDev.ReMirror(aPos); pNode->GetPolygon( ).Move( aPos.X( ), aPos.Y( ) ); //Works because Polygon wraps a pointer @@ -497,7 +497,7 @@ void SmDrawingVisitor::Visit( SmRectangleNode* pNode ) SAL_WARN_IF( aTmp.IsEmpty(), "starmath", "Empty rectangle" ); - if (mrFormat.IsRightToLeft()) + if (mrFormat.IsRightToLeft() && mrDev.GetOutDevType() != OUTDEV_WINDOW) mrDev.ReMirror(aTmp); //! avoid GROWING AND SHRINKING of drawn rectangle when constantly @@ -521,7 +521,7 @@ void SmDrawingVisitor::DrawTextNode( SmTextNode* pNode ) Point aPos ( maPosition ); aPos.AdjustY(pNode->GetBaselineOffset( ) ); - if (mrFormat.IsRightToLeft()) + if (mrFormat.IsRightToLeft() && mrDev.GetOutDevType() != OUTDEV_WINDOW) mrDev.ReMirror(aPos); // round to pixel coordinate |