summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2018-03-15 20:48:53 +0300
committerJan Holesovsky <kendy@collabora.com>2018-07-20 12:13:51 +0200
commited6bcf7185cd2a650f304a065aa60114ac2d3fb7 (patch)
tree2b24b64c06c109382709935573eac3137f5cf4e8 /writerfilter
parent0f3ba021f7a9072306beec3d279179f4bae35afc (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> Reviewed-on: https://gerrit.libreoffice.org/57704 Tested-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx34
1 files changed, 5 insertions, 29 deletions
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 88e6deea5090..4d3af4df742e 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>
@@ -646,8 +647,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 );
@@ -655,35 +654,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;
+ editeng::BorderDistanceFromWord(eOffsetFrom == BorderOffsetFrom::Edge, nMargin, nDistance,
+ nLineWidth);
- switch (eOffsetFrom)
- {
- case BorderOffsetFrom::Text:
- nNewMargin -= nDistance + nLineWidth;
- break;
- case BorderOffsetFrom::Edge:
- nNewMargin = nDistance;
- nNewDist = nMargin - nDistance - nLineWidth;
- break;
- }
- // Ensure corrent 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;
- }
// 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()