diff options
author | Justin Luth <justin_luth@sil.org> | 2015-10-28 11:12:17 +0300 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2016-02-02 14:20:28 +0100 |
commit | 20fb85681a9320abeeada5b801cb78be66f15155 (patch) | |
tree | b7d56f441092b0e14de3e79fdacbf7cda17d432f | |
parent | a8c96a18704c8bc6b06b102b70a035bbac48b48b (diff) |
tdf#93637 TAB_OVER_MARGIN support for a few more cases
Extending nMaxRight when TAB_OVER_MARGIN compatibility is set and
the right tabstop goes beyond the right margin fixes PDF output
as well as certain cases of screen display.
Reviewed-on: https://gerrit.libreoffice.org/19635
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
(cherry picked from commit d1bd4465be649a4078c3a2f85a64c8a6300dd65d)
Reviewed-on: https://gerrit.libreoffice.org/21561
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
(cherry picked from commit 8c564a1fd313da29088bed6453c5e16876690d24)
Change-Id: Ida4b4f399f06670d9bdefdc21978adf19a81d53a
Reviewed-on: https://gerrit.libreoffice.org/21694
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
(cherry picked from commit 7b644045bebcd70e7324beac793b5018da1c4de5)
-rw-r--r-- | sw/source/core/text/itrpaint.cxx | 19 | ||||
-rw-r--r-- | sw/source/core/text/porlin.hxx | 1 |
2 files changed, 19 insertions, 1 deletions
diff --git a/sw/source/core/text/itrpaint.cxx b/sw/source/core/text/itrpaint.cxx index 2461b8b4af25..c4b20d10254c 100644 --- a/sw/source/core/text/itrpaint.cxx +++ b/sw/source/core/text/itrpaint.cxx @@ -37,6 +37,7 @@ #include <tgrditem.hxx> #include <EnhancedPDFExportHelper.hxx> +#include <IDocumentSettingAccess.hxx> #include "flyfrms.hxx" #include "viewsh.hxx" @@ -161,8 +162,24 @@ void SwTextPainter::DrawTextLine( const SwRect &rPaint, SwSaveClip &rClip, SwLinePortion *pPor = bEndPor ? pCurr->GetFirstPortion() : CalcPaintOfst( rPaint ); // Optimization! - const SwTwips nMaxRight = std::min( rPaint.Right(), Right() ); + SwTwips nMaxRight = std::min( rPaint.Right(), Right() ); const SwTwips nTmpLeft = GetInfo().X(); + //compatibility setting: allow tabstop text to exceed right margin + if( GetInfo().GetTextFrm()->GetTextNode()->getIDocumentSettingAccess()->get(DocumentSettingId::TAB_OVER_MARGIN) ) + { + SwLinePortion* pPorIter = pPor; + while( pPorIter ) + { + if( pPorIter->IsTabRightPortion() ) + { + const SwTabRightPortion *pRightTabPor = static_cast<SwTabRightPortion*>(pPorIter); + const SwTwips nTabPos = nTmpLeft + pRightTabPor->GetTabPos(); + if( nMaxRight < nTabPos ) + nMaxRight = std::min( rPaint.Right(), nTabPos ); + } + pPorIter = pPorIter->GetPortion(); + } + } if( !bEndPor && nTmpLeft >= nMaxRight ) return; diff --git a/sw/source/core/text/porlin.hxx b/sw/source/core/text/porlin.hxx index 792c9ef3b63e..1a3f4f8a5f30 100644 --- a/sw/source/core/text/porlin.hxx +++ b/sw/source/core/text/porlin.hxx @@ -130,6 +130,7 @@ public: inline bool IsTabCntPortion() const { return nWhichPor == POR_TABCENTER; } inline bool IsTabDecimalPortion() const { return nWhichPor == POR_TABDECIMAL; } inline bool IsTabLeftPortion() const { return nWhichPor == POR_TABLEFT; } + inline bool IsTabRightPortion() const { return nWhichPor == POR_TABRIGHT; } inline bool IsFootnoteNumPortion() const { return nWhichPor == POR_FTNNUM; } inline bool IsFootnotePortion() const { return nWhichPor == POR_FTN; } inline bool IsTmpEndPortion() const { return nWhichPor == POR_TMPEND; } |