diff options
Diffstat (limited to 'sw/source/core/layout/calcmove.cxx')
-rw-r--r-- | sw/source/core/layout/calcmove.cxx | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx index e13fdf012143..081472b98ee3 100644 --- a/sw/source/core/layout/calcmove.cxx +++ b/sw/source/core/layout/calcmove.cxx @@ -1076,6 +1076,38 @@ bool SwFrame::IsCollapse() const return pTextFrame->GetText().isEmpty() && pTextNode && pTextNode->IsCollapse(); } +bool SwFrame::IsCollapseUpper() const +{ + const SwTextFrame* pTextFrame = DynCastTextFrame(); + if (!pTextFrame) + { + return false; + } + + const SwDoc& rDoc = pTextFrame->GetDoc(); + const IDocumentSettingAccess& rIDSA = rDoc.getIDocumentSettingAccess(); + if (!rIDSA.get(DocumentSettingId::TAB_OVER_SPACING) || rIDSA.get(DocumentSettingId::TAB_OVER_MARGIN)) + { + // Writer or Word Word <= 2010 style: upper margin is never ignored. + return false; + } + + // Word >= 2013 style: when we're at the top of the page, but not on the first page, then ignore + // the upper margin for paragraphs. + if (GetPrev()) + { + return false; + } + + const SwPageFrame* pPageFrame = FindPageFrame(); + if (!pPageFrame || !pPageFrame->GetPrev()) + { + return false; + } + + return true; +} + void SwContentFrame::MakePrtArea( const SwBorderAttrs &rAttrs ) { if ( isFramePrintAreaValid() ) |