diff --git a/bsc1177955.diff b/bsc1177955.diff new file mode 100644 index 0000000..a0b5480 --- /dev/null +++ b/bsc1177955.diff @@ -0,0 +1,136 @@ +From e80fb99133a8edf4c0b03319c7296889b0e52d54 Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Wed, 20 Jan 2021 11:15:34 +0100 +Subject: [PATCH] bsc1177955.diff + +This is a combination of 2 commits. +This is the 1st commit message: + +loplugin:flatten + +(cherry picked from commit 2d582244680e7f6dec6e4a466e276f93ccb01dc9) + +This is the commit message #2: + +oox smartart: composite algo: handle right constraint when left+width is given + +The bugdoc had this constraint: + + + +While img has no "r", it has: + + + + +Which is enough to fix the x position of the text to not overlap with +img. + +(cherry picked from commit 1359e8c566970fcef860f7ba7f54a07d8e6e0513) + +Change-Id: I80db290bd1695884ffb7b1eabaffa09462e8883d +--- + .../drawingml/diagram/diagramlayoutatoms.cxx | 78 ++++++++++++++----- + 1 file changed, 60 insertions(+), 18 deletions(-) + +diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +index 24acaf176491..3492ccefaa1a 100644 +--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx ++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +@@ -452,6 +452,37 @@ sal_Int32 AlgAtom::getVerticalShapesCount(const ShapePtr& rShape) + + namespace + { ++/** ++ * Decides if a certain reference type (e.g. "right") can be inferred from the available properties ++ * in rMap (e.g. left and width). Returns true if rValue is written to. ++ */ ++bool InferFromLayoutProperty(const LayoutProperty& rMap, sal_Int32 nRefType, sal_Int32& rValue) ++{ ++ switch (nRefType) ++ { ++ case XML_r: ++ { ++ auto it = rMap.find(XML_l); ++ if (it == rMap.end()) ++ { ++ return false; ++ } ++ sal_Int32 nLeft = it->second; ++ it = rMap.find(XML_w); ++ if (it == rMap.end()) ++ { ++ return false; ++ } ++ rValue = nLeft + it->second; ++ return true; ++ } ++ default: ++ break; ++ } ++ ++ return false; ++} ++ + /** + * Apply rConstraint to the rProperties shared layout state. + * +@@ -468,26 +499,37 @@ void ApplyConstraintToLayout(const Constraint& rConstraint, LayoutPropertyMap& r + } + + const LayoutPropertyMap::const_iterator aRef = rProperties.find(rConstraint.msRefForName); +- if (aRef != rProperties.end()) ++ if (aRef == rProperties.end()) ++ return; ++ ++ const LayoutProperty::const_iterator aRefType = aRef->second.find(rConstraint.mnRefType); ++ sal_Int32 nInferredValue = 0; ++ if (aRefType != aRef->second.end()) ++ { ++ // Reference is found directly. ++ rProperties[rConstraint.msForName][rConstraint.mnType] ++ = aRefType->second * rConstraint.mfFactor; ++ } ++ else if (InferFromLayoutProperty(aRef->second, rConstraint.mnRefType, nInferredValue)) ++ { ++ // Reference can be inferred. ++ rProperties[rConstraint.msForName][rConstraint.mnType] ++ = nInferredValue * rConstraint.mfFactor; ++ } ++ else + { +- const LayoutProperty::const_iterator aRefType = aRef->second.find(rConstraint.mnRefType); +- if (aRefType != aRef->second.end()) +- rProperties[rConstraint.msForName][rConstraint.mnType] +- = aRefType->second * rConstraint.mfFactor; ++ // Reference not found, assume a fixed value. ++ // Values are never in EMU, while oox::drawingml::Shape position and size are always in ++ // EMU. ++ double fUnitFactor = 0; ++ if (isFontUnit(rConstraint.mnRefType)) ++ // Points -> EMU. ++ fUnitFactor = EMU_PER_PT; + else +- { +- // Values are never in EMU, while oox::drawingml::Shape position and size are always in +- // EMU. +- double fUnitFactor = 0; +- if (isFontUnit(rConstraint.mnRefType)) +- // Points -> EMU. +- fUnitFactor = EMU_PER_PT; +- else +- // Millimeters -> EMU. +- fUnitFactor = EMU_PER_HMM * 100; +- rProperties[rConstraint.msForName][rConstraint.mnType] +- = rConstraint.mfValue * fUnitFactor; +- } ++ // Millimeters -> EMU. ++ fUnitFactor = EMU_PER_HMM * 100; ++ rProperties[rConstraint.msForName][rConstraint.mnType] ++ = rConstraint.mfValue * fUnitFactor; + } + } + +-- +2.26.2 + diff --git a/libreoffice.changes b/libreoffice.changes index 94a16d9..5d2c010 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Jan 28 21:17:13 UTC 2021 - Andras Timar + +- Fix bsc#1177955 - LO-L3: SmartArt: text wrongly aligned, background boxes not quite right,... + * bsc1177955.diff + ------------------------------------------------------------------- Sat Jan 23 22:55:19 UTC 2021 - Andras Timar diff --git a/libreoffice.spec b/libreoffice.spec index a7cb7a8..4e28e08 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -107,6 +107,8 @@ Patch6: bsc1178943.diff Patch8: bsc1178807.diff # Bug 1179025 - LO-L3: LibreOffice crashes opening a PPTX Patch9: bsc1179025.diff +# Bug 1177955 - LO-L3: SmartArt: text wrongly aligned, background boxes not quite right,... +Patch10: bsc1177955.diff # try to save space by using hardlinks Patch990: install-with-hardlinks.diff # save time by relying on rpm check rather than doing stupid find+grep @@ -969,6 +971,7 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch6 -p1 %patch8 -p1 %patch9 -p1 +%patch10 -p1 %patch990 -p1 %patch991 -p1