summaryrefslogtreecommitdiff
path: root/starmath
diff options
context:
space:
mode:
authorKhaled Hosny <khaled@libreoffice.org>2023-08-29 20:51:06 +0300
committerخالد حسني <khaled@libreoffice.org>2023-09-04 18:18:37 +0200
commitf80c2c70756e3620daed6675c8546caca4153d4b (patch)
tree31ce340cf6b0bb52a3d08b1da78a567b1606f3aa /starmath
parentfe3098b4c4b5b8099e43279044db9ae7a1e0999d (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.hxx2
-rw-r--r--starmath/source/document.cxx24
-rw-r--r--starmath/source/visitors.cxx8
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