From e215b7c57ce9563069bb90b7630256abb1cb2e7e Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 19 Jun 2012 16:10:52 +0200 Subject: [PATCH] n#758883 dmapper: take care of border width when setting margins Word handles the "border to page" distance as a subset of the page margin. Writer handles these values separately, and the real margin is the sum of the border width, the margin and the border width itself. The problem was that the width of the border itself wasn't counted, so the real margin was a bit larger than necessary. Change-Id: Id38153308f1e321b6556762b30f3377f2360edf6 --- writerfilter/source/dmapper/PropertyMap.cxx | 13 ++++++++----- writerfilter/source/dmapper/PropertyMap.hxx | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 58dd2b4266f6..913eaac432b0 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -501,17 +501,20 @@ void SectionPropertyMap::ApplyBorderToPageStyles( } if( m_nBorderDistances[nBorder] >= 0 ) { + sal_uInt32 nLineWidth = 0; + if (m_pBorderLines[nBorder]) + nLineWidth = m_pBorderLines[nBorder]->LineWidth; SetBorderDistance( xFirst, aMarginIds[nBorder], aBorderDistanceIds[nBorder], - m_nBorderDistances[nBorder], nOffsetFrom ); + m_nBorderDistances[nBorder], nOffsetFrom, nLineWidth ); if(xSecond.is()) SetBorderDistance( xSecond, aMarginIds[nBorder], aBorderDistanceIds[nBorder], - m_nBorderDistances[nBorder], nOffsetFrom ); + m_nBorderDistances[nBorder], nOffsetFrom, nLineWidth ); } } } void SectionPropertyMap::SetBorderDistance( uno::Reference< beans::XPropertySet > xStyle, - PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom ) + PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom, sal_uInt32 nLineWidth ) { PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier(); @@ -523,8 +526,8 @@ void SectionPropertyMap::SetBorderDistance( uno::Reference< beans::XPropertySet sal_Int32 nMargin = 0; aMargin >>= nMargin; - // Change the margins with the border distance - xStyle->setPropertyValue( sMarginName, uno::makeAny( nDistance ) ); + // Change the margins with the ( border distance - line width ) + xStyle->setPropertyValue( sMarginName, uno::makeAny( nDistance - nLineWidth ) ); // Set the distance to ( Margin - distance ) nDist = nMargin - nDistance; diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx index ba5e1ab90c42..b9a3d5d0ebb5 100644 --- a/writerfilter/source/dmapper/PropertyMap.hxx +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -207,7 +207,7 @@ class SectionPropertyMap : public PropertyMap bool HasFooter( bool bFirstPage ) const; void SetBorderDistance( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle, - PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom ); + PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom, sal_uInt32 nLineWidth ); public: explicit SectionPropertyMap(bool bIsFirstSection);