From b6f0c1de3d31b33452ad87a3a416731907e3c52e Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Wed, 10 Jul 2019 14:50:08 +0200 Subject: [PATCH] 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 4900104e69..ab5aeb95eb 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 2f61083b80..dbf7f2a51c 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 739b980dcc..d07c5500ee 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 ab6c9aef8b..0b54d7aaa4 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 132e916509..49e0074d64 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 ed11307f14..41e579a554 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'; } -- 2.39.5