diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2018-03-15 20:48:53 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2018-03-16 04:54:47 +0100 |
commit | 8805e10f5887df66edfd0a2fa4b70e87f0c74700 (patch) | |
tree | 6754af5d8450787a2aab415a864377f704a84af1 /writerfilter | |
parent | 2537d6897ae516d3b4d50f0e2885dc24949841bf (diff) |
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 <ci@libreoffice.org>
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.cxx | 36 |
1 files changed, 6 insertions, 30 deletions
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 <ooxml/resourceids.hxx> #include "DomainMapper_Impl.hxx" #include "ConversionHelper.hxx" +#include <editeng/boxitem.hxx> #include <i18nutil/paper.hxx> #include <osl/diagnose.h> #include <rtl/ustring.hxx> @@ -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<sal_Int32>(nMargin - nLineWidth, 0); - } - else if (nNewDist < 0) - { - nNewMargin = std::max<sal_Int32>(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() |