commit b6f0c1de3d31b33452ad87a3a416731907e3c52e
Author: Juergen Spitzmueller <[email protected]>
Date: Wed Jul 10 14:50:08 2019 +0200
Fix right and left layout alignment (in workarea) with RTL
Fixes: #11606
---
src/Paragraph.cpp | 18 ++++++++++++++++--
src/Paragraph.h | 4 +++-
src/TextMetrics.cpp | 4 ++--
src/frontends/qt4/GuiParagraph.cpp | 8 +-------
src/frontends/qt4/GuiParagraph.h | 2 --
src/output_latex.cpp | 12 ++++++------
6 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 4900104..ab5aeb9 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1983,15 +1983,29 @@ depth_type Paragraph::getMaxDepthAfter() const
}
-LyXAlignment Paragraph::getAlign() const
+LyXAlignment Paragraph::getAlign(BufferParams const & bparams) const
{
if (d->params_.align() == LYX_ALIGN_LAYOUT)
- return d->layout_->align;
+ return getDefaultAlign(bparams);
else
return d->params_.align();
}
+LyXAlignment Paragraph::getDefaultAlign(BufferParams const & bparams) const
+{
+ LyXAlignment res = layout().align;
+ if (isRTL(bparams)) {
+ // Swap sides
+ if (res == LYX_ALIGN_LEFT)
+ res = LYX_ALIGN_RIGHT;
+ else if (res == LYX_ALIGN_RIGHT)
+ res = LYX_ALIGN_LEFT;
+ }
+ return res;
+}
+
+
docstring const & Paragraph::labelString() const
{
return d->params_.labelString();
diff --git a/src/Paragraph.h b/src/Paragraph.h
index 2f61083..dbf7f2a 100644
--- a/src/Paragraph.h
+++ b/src/Paragraph.h
@@ -312,7 +312,9 @@ public:
/// Set label width string.
void setLabelWidthString(docstring const & s);
/// Actual paragraph alignment used
- LyXAlignment getAlign() const;
+ LyXAlignment getAlign(BufferParams const &) const;
+ /// Default paragraph alignment as determined by layout
+ LyXAlignment getDefaultAlign(BufferParams const &) const;
/// The nesting depth of a paragraph
depth_type getDepth() const;
/// The maximal possible depth of a paragraph after this one
diff --git a/src/TextMetrics.cpp b/src/TextMetrics.cpp
index 739b980..d07c550 100644
--- a/src/TextMetrics.cpp
+++ b/src/TextMetrics.cpp
@@ -595,7 +595,7 @@ bool TextMetrics::redoParagraph(pit_type const pit, bool
const align_rows)
LyXAlignment TextMetrics::getAlign(Paragraph const & par, Row const & row)
const
{
- LyXAlignment align = par.getAlign();
+ LyXAlignment align = par.getAlign(bv_->buffer().params());
// handle alignment inside tabular cells
Inset const & owner = text_->inset();
@@ -1755,7 +1755,7 @@ int TextMetrics::leftMargin(pit_type const pit, pos_type
const pos) const
if (!par.params().leftIndent().zero())
l_margin += par.params().leftIndent().inPixels(max_width_,
lfm.em());
- LyXAlignment align = par.getAlign();
+ LyXAlignment align = par.getAlign(bv_->buffer().params());
// set the correct parindent
if (pos == 0
diff --git a/src/frontends/qt4/GuiParagraph.cpp
b/src/frontends/qt4/GuiParagraph.cpp
index ab6c9ae..0b54d7a 100644
--- a/src/frontends/qt4/GuiParagraph.cpp
+++ b/src/frontends/qt4/GuiParagraph.cpp
@@ -125,7 +125,7 @@ void GuiParagraph::checkAlignmentRadioButtons()
alignDefaultRB->setText(alignDefaultLabel_);
else
alignDefaultRB->setText(alignDefaultLabel_ + " ("
- + labelMap_[alignDefault()] + ")");
+ +
labelMap_[bufferview()->cursor().innerParagraph().getDefaultAlign(buffer().params())]
+ ")");
}
@@ -372,12 +372,6 @@ LyXAlignment GuiParagraph::alignPossible() const
}
-LyXAlignment GuiParagraph::alignDefault() const
-{
- return bufferview()->cursor().innerParagraph().layout().align;
-}
-
-
bool GuiParagraph::hasLabelwidth() const
{
Layout layout = bufferview()->cursor().innerParagraph().layout();
diff --git a/src/frontends/qt4/GuiParagraph.h b/src/frontends/qt4/GuiParagraph.h
index 132e916..49e0074 100644
--- a/src/frontends/qt4/GuiParagraph.h
+++ b/src/frontends/qt4/GuiParagraph.h
@@ -60,8 +60,6 @@ private:
bool hasLabelwidth() const;
///
LyXAlignment alignPossible() const;
- ///
- LyXAlignment alignDefault() const;
private Q_SLOTS:
///
diff --git a/src/output_latex.cpp b/src/output_latex.cpp
index ed11307..41e579a 100644
--- a/src/output_latex.cpp
+++ b/src/output_latex.cpp
@@ -1402,20 +1402,20 @@ void TeXOnePar(Buffer const & buf,
&& !text.inset().getLayout().parbreakIgnored()
&& style.latextype != LATEX_ITEM_ENVIRONMENT
&& style.latextype != LATEX_LIST_ENVIRONMENT
- && style.align == par.getAlign()
+ && style.align == par.getAlign(bparams)
&& nextpar->getDepth() == par.getDepth()
- && nextpar->getAlign() == par.getAlign())
+ && nextpar->getAlign(bparams) ==
par.getAlign(bparams))
|| (!next_layout.isEnvironment()
&& nextpar->getDepth() > par.getDepth()
- && nextpar->getAlign() == next_layout.align)
+ && nextpar->getAlign(bparams) ==
next_layout.align)
|| (!style.isEnvironment()
&& next_layout.latextype == LATEX_ENVIRONMENT
&& nextpar->getDepth() < par.getDepth())
|| (style.isCommand()
&& !next_layout.isEnvironment()
- && style.align == par.getAlign()
- && next_layout.align == nextpar->getAlign())
- || (style.align != par.getAlign()
+ && style.align == par.getAlign(bparams)
+ && next_layout.align ==
nextpar->getAlign(bparams))
+ || (style.align != par.getAlign(bparams)
&& tclass.isDefaultLayout(next_layout))) {
os << '\n';
}