summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorJustin Luth <justin.luth@collabora.com>2024-03-05 19:05:29 -0500
committerMiklos Vajna <vmiklos@collabora.com>2024-03-06 11:22:31 +0100
commite0ef7d54b4e4ccbaaada5d2c4a42ba41d961ea69 (patch)
treeb5d6e6b29afc56baef48b295c787b0f6f3c9c085 /oox
parent0d94f6c90788b1d9e90afb3314ffe165c2eafb96 (diff)
tdf#160049 oox import: use margins with left/right HoriOrientRelation
I'm really surprised this wasn't found much earlier. Even DOC format isn't handling this. make CppunitTest_sw_ooxmlexport21 \ CPPUNIT_TEST_NAME=testTdf160049_anchorMarginVML Change-Id: I92ee8eceb6c6bab5f027663bae94d7acdf01be3d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164442 Tested-by: Jenkins Reviewed-by: Justin Luth <jluth@mail.com> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/vml/vmlshape.cxx17
1 files changed, 14 insertions, 3 deletions
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
index 5284de176839..8f16c6267211 100644
--- a/oox/source/vml/vmlshape.cxx
+++ b/oox/source/vml/vmlshape.cxx
@@ -647,8 +647,13 @@ static void lcl_SetAnchorType(PropertySet& rPropSet, const ShapeTypeModel& rType
rPropSet.setAnyProperty(PROP_VertOrient, Any(text::VertOrientation::TOP));
}
+ // if the anchor is not inline, and is relative to left or right, then apply the margins
+ bool bHonorMargins = rTypeModel.maPosition == "relative" || rTypeModel.maPosition == "absolute";
if ( rTypeModel.maPositionHorizontal == "center" )
+ {
rPropSet.setAnyProperty(PROP_HoriOrient, Any(text::HoriOrientation::CENTER));
+ bHonorMargins = false;
+ }
else if ( rTypeModel.maPositionHorizontal == "left" )
rPropSet.setAnyProperty(PROP_HoriOrient, Any(text::HoriOrientation::LEFT));
else if ( rTypeModel.maPositionHorizontal == "right" )
@@ -663,6 +668,8 @@ static void lcl_SetAnchorType(PropertySet& rPropSet, const ShapeTypeModel& rType
rPropSet.setAnyProperty(PROP_HoriOrient, Any(text::HoriOrientation::RIGHT));
rPropSet.setAnyProperty(PROP_PageToggle, Any(true));
}
+ else
+ bHonorMargins = false;
if ( rTypeModel.maPositionHorizontalRelative == "page" )
rPropSet.setAnyProperty(PROP_HoriOrientRelation, Any(text::RelOrientation::PAGE_FRAME));
@@ -674,9 +681,13 @@ static void lcl_SetAnchorType(PropertySet& rPropSet, const ShapeTypeModel& rType
else if (rTypeModel.maPositionHorizontalRelative == "left-margin-area" ||
rTypeModel.maPositionHorizontalRelative == "outer-margin-area")
rPropSet.setProperty(PROP_HoriOrientRelation, text::RelOrientation::PAGE_LEFT);
- else if ( rTypeModel.maPositionHorizontalRelative == "text" )
- rPropSet.setProperty(PROP_HoriOrientRelation, text::RelOrientation::FRAME);
-
+ else // "text"
+ {
+ if (bHonorMargins)
+ rPropSet.setProperty(PROP_HoriOrientRelation, text::RelOrientation::PRINT_AREA);
+ else
+ rPropSet.setProperty(PROP_HoriOrientRelation, text::RelOrientation::FRAME);
+ }
if ( rTypeModel.maPositionVertical == "center" )
rPropSet.setAnyProperty(PROP_VertOrient, Any(text::VertOrientation::CENTER));
else if ( rTypeModel.maPositionVertical == "top" )