diff options
Diffstat (limited to 'sw/source/filter/ww8/ww8atr.cxx')
-rw-r--r-- | sw/source/filter/ww8/ww8atr.cxx | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx index f6c40194bf5e..9f1419f75209 100644 --- a/sw/source/filter/ww8/ww8atr.cxx +++ b/sw/source/filter/ww8/ww8atr.cxx @@ -3959,25 +3959,25 @@ void WW8AttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLR ) } else if ( m_rWW8Export.m_bOutPageDescs ) // PageDescs { - sal_uInt16 nLDist, nRDist; - const SfxPoolItem* pItem = m_rWW8Export.HasItem( RES_BOX ); - if ( pItem ) + m_pageMargins.nLeft = 0; + m_pageMargins.nRight = 0; + + if ( auto pBoxItem = static_cast<const SvxBoxItem*>(m_rWW8Export.HasItem( RES_BOX )) ) { - nRDist = static_cast<const SvxBoxItem*>(pItem)->CalcLineSpace( SvxBoxItemLine::LEFT, /*bEvenIfNoLine*/true ); - nLDist = static_cast<const SvxBoxItem*>(pItem)->CalcLineSpace( SvxBoxItemLine::RIGHT, /*bEvenIfNoLine*/true ); + m_pageMargins.nRight = pBoxItem->CalcLineSpace( SvxBoxItemLine::LEFT, /*bEvenIfNoLine*/true ); + m_pageMargins.nLeft = pBoxItem->CalcLineSpace( SvxBoxItemLine::RIGHT, /*bEvenIfNoLine*/true ); } - else - nLDist = nRDist = 0; - nLDist = nLDist + static_cast<sal_uInt16>(rLR.GetLeft()); - nRDist = nRDist + static_cast<sal_uInt16>(rLR.GetRight()); + + m_pageMargins.nLeft += sal::static_int_cast<sal_uInt16>(rLR.GetLeft()); + m_pageMargins.nRight += sal::static_int_cast<sal_uInt16>(rLR.GetRight()); // sprmSDxaLeft m_rWW8Export.InsUInt16( NS_sprm::sprmSDxaLeft ); - m_rWW8Export.InsUInt16( nLDist ); + m_rWW8Export.InsUInt16( m_pageMargins.nLeft ); // sprmSDxaRight m_rWW8Export.InsUInt16( NS_sprm::sprmSDxaRight ); - m_rWW8Export.InsUInt16( nRDist ); + m_rWW8Export.InsUInt16( m_pageMargins.nRight ); } else { // normal paragraphs @@ -4024,6 +4024,7 @@ void WW8AttributeOutput::FormatULSpace( const SvxULSpaceItem& rUL ) // sprmSDyaTop m_rWW8Export.InsUInt16( NS_sprm::sprmSDyaTop ); m_rWW8Export.InsUInt16( aDistances.dyaTop ); + m_pageMargins.nTop = aDistances.dyaTop; if ( aDistances.HasFooter() ) { @@ -4035,6 +4036,7 @@ void WW8AttributeOutput::FormatULSpace( const SvxULSpaceItem& rUL ) //sprmSDyaBottom m_rWW8Export.InsUInt16( NS_sprm::sprmSDyaBottom ); m_rWW8Export.InsUInt16( aDistances.dyaBottom ); + m_pageMargins.nBottom = aDistances.dyaBottom; } else { @@ -4461,7 +4463,21 @@ void WW8AttributeOutput::FormatBox( const SvxBoxItem& rBox ) && ( p->GetWidth() != 0 ); } - m_rWW8Export.Out_SwFormatBox( rBox, bShadow ); + SvxBoxItem aBox(rBox); + if (m_rWW8Export.m_bOutPageDescs) + { + editeng::WordBorderDistances aDistances; + editeng::BorderDistancesToWord(aBox, m_pageMargins, aDistances); + + aBox.SetDistance(aDistances.nTop, SvxBoxItemLine::TOP); + aBox.SetDistance(aDistances.nLeft, SvxBoxItemLine::LEFT); + aBox.SetDistance(aDistances.nBottom, SvxBoxItemLine::BOTTOM); + aBox.SetDistance(aDistances.nRight, SvxBoxItemLine::RIGHT); + + m_bFromEdge = aDistances.bFromEdge; + } + + m_rWW8Export.Out_SwFormatBox( aBox, bShadow ); } } |