From 8805e10f5887df66edfd0a2fa4b70e87f0c74700 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Thu, 15 Mar 2018 20:48:53 +0300 Subject: tdf#112118: DOC: properly import/export border distance DOCX part was done in fb959e581c900b392efd0bb329b7cf30c8ed56a5. This commit fixes DOC part. Line width wasn't taken into account on import; and export was done only with "from text" distance, which gave poor interoperability with Word, where the borders were close to page edge. The common code is moved to editeng/source/items/frmitems.cxx and include/editeng/boxitem.hxx. Change-Id: I3d1d1312cb9dc9a9e00d9847ec11234cd787df60 Reviewed-on: https://gerrit.libreoffice.org/51366 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- writerfilter/source/dmapper/PropertyMap.cxx | 36 +++++------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) (limited to 'writerfilter') diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx index 2447ee40aeb9..76851c428438 100644 --- a/writerfilter/source/dmapper/PropertyMap.cxx +++ b/writerfilter/source/dmapper/PropertyMap.cxx @@ -20,6 +20,7 @@ #include #include "DomainMapper_Impl.hxx" #include "ConversionHelper.hxx" +#include #include #include #include @@ -647,8 +648,6 @@ void SectionPropertyMap::SetBorderDistance( const uno::Reference< beans::XProper BorderOffsetFrom eOffsetFrom, sal_uInt32 nLineWidth ) { - // See https://wiki.openoffice.org/wiki/Writer/MSInteroperability/PageBorder - if (!xStyle.is()) return; const OUString sMarginName = getPropertyName( eMarginId ); @@ -656,35 +655,12 @@ void SectionPropertyMap::SetBorderDistance( const uno::Reference< beans::XProper uno::Any aMargin = xStyle->getPropertyValue( sMarginName ); sal_Int32 nMargin = 0; aMargin >>= nMargin; - sal_Int32 nNewMargin = nMargin; - sal_Int32 nNewDist = nDistance; - - switch (eOffsetFrom) - { - case BorderOffsetFrom::Text: - nNewMargin -= nDistance + nLineWidth; - break; - case BorderOffsetFrom::Edge: - nNewMargin = nDistance; - nNewDist = nMargin - nDistance - nLineWidth; - break; - } - // Ensure correct distance from page edge to text in cases not supported by us: - // when border is outside entire page area (eOffsetFrom == Text && nDistance > nMargin), - // and when border is inside page body area (eOffsetFrom == Edge && nDistance > nMargin) - if (nNewMargin < 0) - { - nNewMargin = 0; - nNewDist = std::max(nMargin - nLineWidth, 0); - } - else if (nNewDist < 0) - { - nNewMargin = std::max(nMargin - nLineWidth, 0); - nNewDist = 0; - } + editeng::BorderDistanceFromWord(eOffsetFrom == BorderOffsetFrom::Edge, nMargin, nDistance, + nLineWidth); + // Change the margins with the border distance - xStyle->setPropertyValue( sMarginName, uno::makeAny( nNewMargin ) ); - xStyle->setPropertyValue( sBorderDistanceName, uno::makeAny( nNewDist ) ); + xStyle->setPropertyValue( sMarginName, uno::makeAny( nMargin ) ); + xStyle->setPropertyValue( sBorderDistanceName, uno::makeAny( nDistance ) ); } void SectionPropertyMap::DontBalanceTextColumns() -- cgit