diff --git a/bsc1178807.diff b/bsc1178807.diff new file mode 100644 index 0000000..a606fc3 --- /dev/null +++ b/bsc1178807.diff @@ -0,0 +1,79 @@ +From 0bd430959f1605cb7ab5ab2efdb4b6fd217cd8c2 Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Wed, 6 Jan 2021 10:23:44 +0100 +Subject: [PATCH] bsc1178807.diff + +tdf#134288 svx: fix rendering of text on a zero-width shape + +We have conflicting requirements here: on one hand, the shape is zero +width, so the text area is also zero. On the other hand, we put some +text on the shape, which should be visible. + +The result was that the left/right text margin (2x250 mm100) was counted +as part of the text area, so we put a few (but not 1) characters / line +for zero width. Fix this to be PowerPoint-compatible: as the width +decreases, we break the text up to more and more lines, but if the width +is 0, then we don't break it up at all. + +An alternative would be to do this later in +SdrTextObj::impDecomposeBlockTextPrimitive(), but there we no longer +know the width is really 0, because the text margins and some small +increase (+1 to be an inclusive range, +1 to have a non-zero scale) is +already added to the original width. + +(cherry picked from commit 65e2ef43f186164729e1cc071b805bc1a7125cfe) + +Conflicts: + svx/qa/unit/sdr.cxx + +Change-Id: Ieaa3e726bc5d37983b6221452e14f01db315f790 +--- + .../sdr/primitive2d/sdrdecompositiontools.cxx | 28 +++++++++++++++++-- + 1 file changed, 26 insertions(+), 2 deletions(-) + +diff --git a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +index 2ee2bb625e2d..801190f5e92a 100644 +--- a/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx ++++ b/svx/source/sdr/primitive2d/sdrdecompositiontools.cxx +@@ -278,12 +278,36 @@ namespace drawinglayer::primitive2d + + // create a range describing the wanted text position and size (aTextAnchorRange). This + // means to use the text distance values here +- const basegfx::B2DPoint aTopLeft(aSnapRange.getMinX() + rText.getTextLeftDistance(), aSnapRange.getMinY() + rText.getTextUpperDistance()); +- const basegfx::B2DPoint aBottomRight(aSnapRange.getMaxX() - rText.getTextRightDistance(), aSnapRange.getMaxY() - rText.getTextLowerDistance()); ++ sal_Int32 nTextLeftDistance = rText.getTextLeftDistance(); ++ // If the margin is larger than the entire width of the text area, then limit the ++ // margin. ++ if (nTextLeftDistance > aSnapRange.getWidth()) ++ nTextLeftDistance = aSnapRange.getWidth(); ++ sal_Int32 nTextRightDistance = rText.getTextRightDistance(); ++ if (nTextRightDistance > aSnapRange.getWidth()) ++ nTextRightDistance = aSnapRange.getWidth(); ++ const basegfx::B2DPoint aTopLeft(aSnapRange.getMinX() + nTextLeftDistance, ++ aSnapRange.getMinY() ++ + rText.getTextUpperDistance()); ++ const basegfx::B2DPoint aBottomRight(aSnapRange.getMaxX() - nTextRightDistance, ++ aSnapRange.getMaxY() ++ - rText.getTextLowerDistance()); + basegfx::B2DRange aTextAnchorRange; + aTextAnchorRange.expand(aTopLeft); + aTextAnchorRange.expand(aBottomRight); + ++ if (aTextAnchorRange.getWidth() == 0) ++ { ++ // If the shape has no width, then don't attempt to break the text into multiple ++ // lines, not a single character would satisfy a zero width requirement. ++ // SdrTextObj::impDecomposeBlockTextPrimitive() uses the same constant to ++ // effectively set no limits. ++ aTextAnchorRange.expand( ++ basegfx::B2DPoint(aTopLeft.getX() - 1000000, aTopLeft.getY())); ++ aTextAnchorRange.expand( ++ basegfx::B2DPoint(aBottomRight.getX() + 1000000, aBottomRight.getY())); ++ } ++ + // now create a transformation from this basic range (aTextAnchorRange) + // #i121494# if we have no scale use at least 1.0 to have a carrier e.g. for + // mirror values, else these will get lost +-- +2.26.2 + diff --git a/bsc1179025.diff b/bsc1179025.diff new file mode 100644 index 0000000..3156fc1 --- /dev/null +++ b/bsc1179025.diff @@ -0,0 +1,43 @@ +From 9a10330ff8fb0499ed8b0a91563b3c7f62b94096 Mon Sep 17 00:00:00 2001 +From: Miklos Vajna +Date: Tue, 12 Jan 2021 10:13:14 +0100 +Subject: [PATCH] bsc1179025.diff + +oox smartart: fix crash in pyra algorithm with a single child shape + +Regression from commit 14a56533ff2c9c859d22cd3039ada75b99e94bc0 +(SmartArt Pyramid: Now lays out shapes, 2018-07-10), the added pyramid +algorithm by first centering the topmost children, then decrementing the +horizontal postion of each additional shape, with the end goal of having +0 horizontal position of the last children. + +This means that simply avoiding the division in the 1-child case leads +to correct results, because in this case the only child is also the last +child at the sane time. + +(cherry picked from commit f2e04fe98e313cffa3f98d55eae641415142a431) + +Change-Id: Ifd0027e9616b0909dbfde43e1555427b50de4dad +--- + oox/source/drawingml/diagram/diagramlayoutatoms.cxx | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +index 7f926cc9a5e8..24acaf176491 100644 +--- a/oox/source/drawingml/diagram/diagramlayoutatoms.cxx ++++ b/oox/source/drawingml/diagram/diagramlayoutatoms.cxx +@@ -1286,7 +1286,10 @@ void AlgAtom::layoutShape(const ShapePtr& rShape, const std::vector& + for (auto & aCurrShape : rShape->getChildren()) + { + aCurrShape->setPosition(aCurrPos); +- aCurrPos.X -= aChildSize.Height/(nCount-1); ++ if (nCount > 1) ++ { ++ aCurrPos.X -= aChildSize.Height / (nCount - 1); ++ } + aChildSize.Width += aChildSize.Height; + aCurrShape->setSize(aChildSize); + aCurrShape->setChildSize(aChildSize); +-- +2.26.2 + diff --git a/icu68.patch b/icu68.patch new file mode 100644 index 0000000..f6fec1b --- /dev/null +++ b/icu68.patch @@ -0,0 +1,37 @@ +From 0b14b9ec55fb2a8dd0ec24e1c03702bc4bbf1878 Mon Sep 17 00:00:00 2001 +From: Rene Engelhard +Date: Sun, 1 Nov 2020 18:30:49 +0100 +Subject: fix build with ICU 68 + +use standard true. + +/home/rene/LibreOffice/git/master/i18npool/source/calendar/calendar_gregorian.cxx: In member function 'virtual void i18npool::Calendar_gregorian::setLocalDateTime(double)': +/home/rene/LibreOffice/git/master/i18npool/source/calendar/calendar_gregorian.cxx:363:40: error: 'TRUE' was not declared in this scope + 363 | body->getTimeZone().getOffset( fR, TRUE, nZoneOffset, nDSTOffset, status ); + | ^~~~ + +/usr/include/unicode/umachine.h says: + +@deprecated ICU 68 Use standard "true" instead. + +Change-Id: I45d2b0afa6a9043767af5c2cf41ba24377f2cdc4 +Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105057 +Tested-by: Jenkins +Reviewed-by: Eike Rathke +--- + i18npool/source/calendar/calendar_gregorian.cxx | 9 ++++++++- + 1 file changed, 8 insertions(+), 1 deletion(-) + +diff --git a/i18npool/source/calendar/calendar_gregorian.cxx b/i18npool/source/calendar/calendar_gregorian.cxx +index b7ae49fbd96e..59ee46fa0e0f 100644 +--- a/i18npool/source/calendar/calendar_gregorian.cxx ++++ b/i18npool/source/calendar/calendar_gregorian.cxx +@@ -347,7 +347,7 @@ Calendar_gregorian::setLocalDateTime( double fTimeInDays ) + "Calendar_gregorian::setLocalDateTime: " << std::fixed << fM << " rounded to " << fR); + int32_t nZoneOffset, nDSTOffset; + UErrorCode status = U_ZERO_ERROR; +- body->getTimeZone().getOffset( fR, TRUE, nZoneOffset, nDSTOffset, status ); ++ body->getTimeZone().getOffset( fR, true, nZoneOffset, nDSTOffset, status ); + if ( !U_SUCCESS(status) ) throw ERROR; + status = U_ZERO_ERROR; + body->setTime( fR - (nZoneOffset + nDSTOffset), status ); diff --git a/libreoffice.changes b/libreoffice.changes index 20c9ca6..bf335bc 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Thu Jan 14 08:44:52 UTC 2021 - Andras Timar + +- Fix bsc#1179025 - LO-L3: LibreOffice crashes opening a PPTX + * bsc1179025.diff + +------------------------------------------------------------------- +Tue Jan 12 10:32:53 UTC 2021 - Andras Timar + +- Fix bsc#1178807 - LO-L3: Text box from PowerPoint renders vertically instead of horizontally + * bsc1178807.diff + +------------------------------------------------------------------- +Sat Jan 2 11:07:57 UTC 2021 - Callum Farmer + +- Add icu68.patch: fix build with ICU 68 + ------------------------------------------------------------------- Sat Dec 19 21:58:35 UTC 2020 - Andras Timar diff --git a/libreoffice.spec b/libreoffice.spec index 56bcb35..3a36d9d 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -1,7 +1,7 @@ # # spec file for package libreoffice # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -102,6 +102,12 @@ Patch4: 0001-Upgrade-liborcus-to-0.16.0.patch # LO-L3: Shadow effect(s) for table completely missing - part 1 and 2 Patch5: bsc1178944.diff Patch6: bsc1178943.diff +# Fix build with ICU 68 +Patch7: icu68.patch +# Bug 1178807 - LO-L3: Text box from PowerPoint renders vertically instead of horizontally +Patch8: bsc1178807.diff +# Bug 1179025 - LO-L3: LibreOffice crashes opening a PPTX +Patch9: bsc1179025.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 @@ -962,6 +968,9 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 %patch990 -p1 %patch991 -p1