Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libreoffice for openSUSE:Factory 
checked in at 2021-03-10 08:49:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libreoffice (Old)
 and      /work/SRC/openSUSE:Factory/.libreoffice.new.2378 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libreoffice"

Wed Mar 10 08:49:09 2021 rev:225 rq:876942 version:7.1.1.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/libreoffice/libreoffice.changes  2021-02-25 
18:25:53.234116414 +0100
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.2378/libreoffice.changes        
2021-03-10 08:49:38.542417504 +0100
@@ -1,0 +2,16 @@
+Mon Mar  1 11:04:00 UTC 2021 - Mark??ta Machov?? <mmach...@suse.com>
+
+- Update to 7.1.1.2 (fixes bsc#1182790)
+  * 7.1.1 final release
+- Drop merged patch bsc1177955.diff
+- Fix bsc#1176547 - Image shown with different aspect ratio
+  * bsc1176547_1.diff
+  * bsc1176547_2.diff
+
+-------------------------------------------------------------------
+Fri Feb 26 15:00:29 UTC 2021 - Andras Timar <andras.ti...@collabora.com>
+
+- Fix bsc#1181644 - LO-L3: Text changes are reproducibly lost (PPTX, SmartArt)
+  * bsc1181644.diff
+
+-------------------------------------------------------------------

Old:
----
  bsc1177955.diff
  libreoffice-7.1.0.3.tar.xz
  libreoffice-7.1.0.3.tar.xz.asc
  libreoffice-help-7.1.0.3.tar.xz
  libreoffice-help-7.1.0.3.tar.xz.asc
  libreoffice-translations-7.1.0.3.tar.xz
  libreoffice-translations-7.1.0.3.tar.xz.asc

New:
----
  bsc1176547_1.diff
  bsc1176547_2.diff
  bsc1181644.diff
  libreoffice-7.1.1.2.tar.xz
  libreoffice-7.1.1.2.tar.xz.asc
  libreoffice-help-7.1.1.2.tar.xz
  libreoffice-help-7.1.1.2.tar.xz.asc
  libreoffice-translations-7.1.1.2.tar.xz
  libreoffice-translations-7.1.1.2.tar.xz.asc

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libreoffice.spec ++++++
--- /var/tmp/diff_new_pack.f181Lo/_old  2021-03-10 08:49:41.358420411 +0100
+++ /var/tmp/diff_new_pack.f181Lo/_new  2021-03-10 08:49:41.362420415 +0100
@@ -46,7 +46,7 @@
 %bcond_with system_gpgme
 %endif
 Name:           libreoffice
-Version:        7.1.0.3
+Version:        7.1.1.2
 Release:        0
 Summary:        A Free Office Suite (Framework)
 License:        LGPL-3.0-or-later AND MPL-2.0+
@@ -101,10 +101,13 @@
 Patch3:         mediawiki-no-broken-help.diff
 # PATCH-FIX-UPSTREAM 
https://github.com/LibreOffice/core/commit/f14b83b38d35a585976ef5d422754d8e0d0266a6
 ucp: fix call to getComponentContext
 Patch4:         use-comphelper.patch
-# Bug 1177955 - LO-L3: SmartArt: text wrongly aligned, background boxes not 
quite right,...
-Patch10:        bsc1177955.diff
 # Bug 1174465 - LO-L3: Impress in TW (7.0.0.0-beta2) messes up bullet points
 Patch11:        bsc1174465.diff
+# Bug 1181644 - LO-L3: Text changes are reproducibly lost (PPTX, SmartArt)
+Patch12:        bsc1181644.diff
+#  Bug 1176547 - Image shown with different aspect ratio (and different 
clipping), some colored instead of grey, one horizontally mirrored
+Patch13:        bsc1176547_1.diff
+Patch14:        bsc1176547_2.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
@@ -964,8 +967,10 @@
 %patch2
 %patch3
 %patch4 -p1
-%patch10 -p1
 %patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
 %patch990 -p1
 %patch991 -p1
 







++++++ bsc1176547_1.diff ++++++
>From 5f4808d7536a4c551c8764ac2ac6be30ad975f69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCl=C5=9Fah=20K=C3=B6se?= <gulsah.k...@collabora.com>
Date: Thu, 28 Jan 2021 09:37:58 +0300
Subject: [PATCH] tdf#134210 Apply mirror property to custom cropped graphic.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Change-Id: I5bf2ba8fa432af8b6a560cc60c18bef799834fd0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110039
Tested-by: Jenkins
Reviewed-by: G??l??ah K??se <gulsah.k...@collabora.com>
Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110972
---
 oox/inc/drawingml/graphicproperties.hxx    |   4 ++-
 oox/source/drawingml/fillproperties.cxx    |  29 ++++++++++++++++++++-
 oox/source/drawingml/shape.cxx             |   9 +++++--
 sd/qa/unit/data/pptx/mirrored-graphic.pptx | Bin 0 -> 173805 bytes
 sd/qa/unit/import-tests.cxx                |  16 ++++++++++++
 5 files changed, 54 insertions(+), 4 deletions(-)
 create mode 100644 sd/qa/unit/data/pptx/mirrored-graphic.pptx

diff --git a/oox/inc/drawingml/graphicproperties.hxx 
b/oox/inc/drawingml/graphicproperties.hxx
index 85b47dbff593..48d1acf61931 100644
--- a/oox/inc/drawingml/graphicproperties.hxx
+++ b/oox/inc/drawingml/graphicproperties.hxx
@@ -43,7 +43,9 @@ struct GraphicProperties
     /** Writes the properties to the passed property map. */
     void                pushToPropMap(
                             PropertyMap& rPropMap,
-                            const GraphicHelper& rGraphicHelper) const;
+                            const GraphicHelper& rGraphicHelper,
+                            bool bFlipH = false,
+                            bool bFlipV = false) const;
 };
 
 } // namespace oox::drawingml
diff --git a/oox/source/drawingml/fillproperties.cxx 
b/oox/source/drawingml/fillproperties.cxx
index 837578ebc807..78ebff7e2122 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -112,6 +112,28 @@ Reference< XGraphic > 
lclCropGraphic(uno::Reference<graphic::XGraphic> const & x
     return aReturnGraphic.GetXGraphic();
 }
 
+Reference< XGraphic > lclMirrorGraphic(uno::Reference<graphic::XGraphic> const 
& xGraphic, bool bFlipH, bool bFlipV)
+{
+    ::Graphic aGraphic(xGraphic);
+    ::Graphic aReturnGraphic;
+
+    assert (aGraphic.GetType() == GraphicType::Bitmap);
+
+    BitmapEx aBitmapEx(aGraphic.GetBitmapEx());
+    BmpMirrorFlags nMirrorFlags = BmpMirrorFlags::NONE;
+
+    if(bFlipH)
+        nMirrorFlags |= BmpMirrorFlags::Horizontal;
+    if(bFlipV)
+        nMirrorFlags |= BmpMirrorFlags::Vertical;
+
+    aBitmapEx.Mirror(nMirrorFlags);
+
+    aReturnGraphic = ::Graphic(aBitmapEx);
+    aReturnGraphic.setOriginURL(aGraphic.getOriginURL());
+
+    return aReturnGraphic.GetXGraphic();
+}
 
 Reference< XGraphic > lclCheckAndApplyChangeColorTransform(const 
BlipFillProperties &aBlipProps, uno::Reference<graphic::XGraphic> const & 
xGraphic,
                                                            const 
GraphicHelper& rGraphicHelper, const ::Color nPhClr)
@@ -755,7 +777,7 @@ void FillProperties::pushToPropMap( ShapePropertyMap& 
rPropMap,
     rPropMap.setProperty( ShapeProperty::FillStyle, eFillStyle );
 }
 
-void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const 
GraphicHelper& rGraphicHelper) const
+void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const 
GraphicHelper& rGraphicHelper, bool bFlipH, bool bFlipV) const
 {
     sal_Int16 nBrightness = getLimitedValue< sal_Int16, sal_Int32 >( 
maBlipProps.moBrightness.get( 0 ) / PER_PERCENT, -100, 100 );
     sal_Int16 nContrast = getLimitedValue< sal_Int16, sal_Int32 >( 
maBlipProps.moContrast.get( 0 ) / PER_PERCENT, -100, 100 );
@@ -805,6 +827,11 @@ void GraphicProperties::pushToPropMap( PropertyMap& 
rPropMap, const GraphicHelpe
                 xGraphic = lclRotateGraphic(xGraphic, Degree10(nAngle/10) );
             }
 
+            // We have not core feature that flips graphic in the shape.
+            // Here we are applying flip property to bitmap directly.
+            if(bFlipH || bFlipV)
+                xGraphic = lclMirrorGraphic(xGraphic, bFlipH, bFlipV );
+
             rPropMap.setProperty(PROP_FillBitmap, xGraphic);
         }
         else
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 4ec4c425c9ce..e711a3261bb3 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1049,8 +1049,13 @@ Reference< XShape > const & Shape::createAndInsert(
         aShapeProps.assignUsed( maDefaultShapeProperties );
         if(mnRotation != 0 && bIsCustomShape)
             aShapeProps.setProperty( PROP_RotateAngle, sal_Int32( 
NormAngle36000( mnRotation / -600 ) ));
-        if ( bIsEmbMedia || aServiceName == 
"com.sun.star.drawing.GraphicObjectShape" || aServiceName == 
"com.sun.star.drawing.OLE2Shape" || bIsCustomShape )
-            mpGraphicPropertiesPtr->pushToPropMap( aShapeProps, rGraphicHelper 
);
+        if( bIsEmbMedia ||
+            bIsCustomShape ||
+            aServiceName == "com.sun.star.drawing.GraphicObjectShape" ||
+            aServiceName == "com.sun.star.drawing.OLE2Shape")
+        {
+            mpGraphicPropertiesPtr->pushToPropMap( aShapeProps, 
rGraphicHelper, mbFlipH, mbFlipV );
+        }
         if ( mpTablePropertiesPtr && aServiceName == 
"com.sun.star.drawing.TableShape" )
             mpTablePropertiesPtr->pushToPropSet( rFilterBase, xSet, 
mpMasterTextListStyle );
 
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index ee75e62a849b..eff937566383 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -216,6 +216,7 @@ class SdImportTest : public SdModelTestBase
     void testTdf128684();
     void testShapeGlowEffectPPTXImpoer();
     void testShapeBlurPPTXImport();
+    void testMirroredGraphic();
 
     bool checkPattern(sd::DrawDocShellRef const & rDocRef, int nShapeNumber, 
std::vector<sal_uInt8>& rExpected);
     void testPatternImport();
@@ -344,6 +345,7 @@ class SdImportTest : public SdModelTestBase
     CPPUNIT_TEST(testTdf49856);
     CPPUNIT_TEST(testShapeGlowEffectPPTXImpoer);
     CPPUNIT_TEST(testShapeBlurPPTXImport);
+    CPPUNIT_TEST(testMirroredGraphic);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -3308,6 +3310,20 @@ void SdImportTest::testShapeBlurPPTXImport()
 
 }
 
+void SdImportTest::testMirroredGraphic()
+{
+    sd::DrawDocShellRef xDocShRef = 
loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/mirrored-graphic.pptx"),
 PPTX);
+    uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, 
xDocShRef), uno::UNO_SET_THROW);
+    CPPUNIT_ASSERT(xShape.is());
+    uno::Reference<graphic::XGraphic> xGraphic;
+    xShape->getPropertyValue("FillBitmap") >>= xGraphic;
+    CPPUNIT_ASSERT(xGraphic.is());
+    Graphic aGraphic(xGraphic);
+    BitmapEx aBitmap(aGraphic.GetBitmapEx());
+    CPPUNIT_ASSERT_EQUAL( Color(5196117), aBitmap.GetPixelColor( 0, 0 ));
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
++++++ bsc1176547_2.diff ++++++
>From 33e69fb9ef450169e7d85ae3215fd9a4fc8082c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?G=C3=BCl=C5=9Fah=20K=C3=B6se?= <gulsah.k...@collabora.com>
Date: Mon, 1 Feb 2021 17:03:33 +0300
Subject: [PATCH] tdf#134210 Import crop position of bitmap filled shape.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Change-Id: I6a62d68cd0f57e53934851a2f53dae05bf7d3730
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110262
Tested-by: Jenkins
Reviewed-by: G??l??ah K??se <gulsah.k...@collabora.com>
Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110973
---
 oox/source/drawingml/fillproperties.cxx |  84 ++++++++++++++++++------
 oox/source/export/drawingml.cxx         |  39 +++++++----
 sd/qa/unit/data/pptx/crop-position.pptx | Bin 0 -> 175724 bytes
 sd/qa/unit/export-tests-ooxml1.cxx      |  29 ++++++--
 sd/qa/unit/import-tests.cxx             |  16 +++++
 5 files changed, 129 insertions(+), 39 deletions(-)
 create mode 100644 sd/qa/unit/data/pptx/crop-position.pptx

diff --git a/oox/source/drawingml/fillproperties.cxx 
b/oox/source/drawingml/fillproperties.cxx
index 78ebff7e2122..3439d28a4f22 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -87,6 +87,30 @@ Reference< XGraphic > 
lclRotateGraphic(uno::Reference<graphic::XGraphic> const &
     return aReturnGraphic.GetXGraphic();
 }
 
+void lclCalculateCropPercentage(uno::Reference<graphic::XGraphic> const & 
xGraphic, geometry::IntegerRectangle2D &aFillRect)
+{
+    ::Graphic aGraphic(xGraphic);
+    assert (aGraphic.GetType() == GraphicType::Bitmap);
+
+    BitmapEx aBitmapEx(aGraphic.GetBitmapEx());
+
+    sal_Int32 nScaledWidth = aBitmapEx.GetSizePixel().Width();
+    sal_Int32 nScaledHeight = aBitmapEx.GetSizePixel().Height();
+
+    sal_Int32 nOrigWidth = (nScaledWidth * (100000 - aFillRect.X1 - 
aFillRect.X2)) / 100000;
+    sal_Int32 nOrigHeight = (nScaledHeight * (100000 - aFillRect.Y1 - 
aFillRect.Y2)) / 100000;
+
+    sal_Int32 nLeftPercentage = nScaledWidth * aFillRect.X1 / nOrigWidth;
+    sal_Int32 nRightPercentage = nScaledWidth * aFillRect.X2 / nOrigWidth;
+    sal_Int32 nTopPercentage = nScaledHeight * aFillRect.Y1 / nOrigHeight;
+    sal_Int32 nBottomPercentage = nScaledHeight * aFillRect.Y2 / nOrigHeight;
+
+    aFillRect.X1 = -nLeftPercentage;
+    aFillRect.X2 = -nRightPercentage;
+    aFillRect.Y1 = -nTopPercentage;
+    aFillRect.Y2 = -nBottomPercentage;
+}
+
 Reference< XGraphic > lclCropGraphic(uno::Reference<graphic::XGraphic> const & 
xGraphic, geometry::IntegerRectangle2D aFillRect)
 {
     ::Graphic aGraphic(xGraphic);
@@ -103,8 +127,15 @@ Reference< XGraphic > 
lclCropGraphic(uno::Reference<graphic::XGraphic> const & x
     sal_Int32 nBottomCorr = nOrigHeight * -1 * 
static_cast<double>(aFillRect.Y2) / 100000;
     nHeight += nBottomCorr;
 
-    aBitmapEx.Scale(Size(aBitmapEx.GetSizePixel().Width(), nHeight));
-    aBitmapEx.Crop(tools::Rectangle(Point(0, nTopCorr), 
Size(aBitmapEx.GetSizePixel().Width(), nOrigHeight)));
+    sal_Int32 nOrigWidth = aBitmapEx.GetSizePixel().Width();
+    sal_Int32 nWidth = nOrigWidth;
+    sal_Int32 nLeftCorr  = nOrigWidth * -1 * static_cast<double>(aFillRect.X1) 
/ 100000;
+    nWidth += nLeftCorr;
+    sal_Int32 nRightCorr = nOrigWidth * -1 * static_cast<double>(aFillRect.X2) 
/ 100000;
+    nWidth += nRightCorr;
+
+    aBitmapEx.Scale(Size(nWidth, nHeight));
+    aBitmapEx.Crop(tools::Rectangle(Point(nLeftCorr, nTopCorr), 
Size(nOrigWidth, nOrigHeight)));
 
     aReturnGraphic = ::Graphic(aBitmapEx);
     aReturnGraphic.setOriginURL(aGraphic.getOriginURL());
@@ -813,6 +844,36 @@ void GraphicProperties::pushToPropMap( PropertyMap& 
rPropMap, const GraphicHelpe
             nContrast = 0;
         }
 
+        // cropping
+        if ( maBlipProps.moClipRect.has() )
+        {
+            geometry::IntegerRectangle2D oClipRect( 
maBlipProps.moClipRect.get() );
+            awt::Size aOriginalSize( rGraphicHelper.getOriginalSize( xGraphic 
) );
+            if ( aOriginalSize.Width && aOriginalSize.Height )
+            {
+                text::GraphicCrop aGraphCrop( 0, 0, 0, 0 );
+                if ( oClipRect.X1 )
+                    aGraphCrop.Left = rtl::math::round( ( static_cast< double 
>( aOriginalSize.Width ) * oClipRect.X1 ) / 100000 );
+                if ( oClipRect.Y1 )
+                    aGraphCrop.Top = rtl::math::round( ( static_cast< double 
>( aOriginalSize.Height ) * oClipRect.Y1 ) / 100000 );
+                if ( oClipRect.X2 )
+                    aGraphCrop.Right = rtl::math::round( ( static_cast< double 
>( aOriginalSize.Width ) * oClipRect.X2 ) / 100000 );
+                if ( oClipRect.Y2 )
+                    aGraphCrop.Bottom = rtl::math::round( ( static_cast< 
double >( aOriginalSize.Height ) * oClipRect.Y2 ) / 100000 );
+                rPropMap.setProperty(PROP_GraphicCrop, aGraphCrop);
+            }
+
+            if(mbIsCustomShape)
+            {
+                geometry::IntegerRectangle2D aCropRect = oClipRect;
+                lclCalculateCropPercentage(xGraphic, aCropRect);
+                xGraphic = lclCropGraphic(xGraphic, aCropRect);
+
+                rPropMap.setProperty(PROP_FillBitmap, xGraphic);
+            }
+
+        }
+
         if(mbIsCustomShape)
         {
             // it is a cropped graphic.
@@ -837,25 +898,6 @@ void GraphicProperties::pushToPropMap( PropertyMap& 
rPropMap, const GraphicHelpe
         else
             rPropMap.setProperty(PROP_Graphic, xGraphic);
 
-        // cropping
-        if ( maBlipProps.moClipRect.has() )
-        {
-            geometry::IntegerRectangle2D oClipRect( 
maBlipProps.moClipRect.get() );
-            awt::Size aOriginalSize( rGraphicHelper.getOriginalSize( xGraphic 
) );
-            if ( aOriginalSize.Width && aOriginalSize.Height )
-            {
-                text::GraphicCrop aGraphCrop( 0, 0, 0, 0 );
-                if ( oClipRect.X1 )
-                    aGraphCrop.Left = rtl::math::round( ( static_cast< double 
>( aOriginalSize.Width ) * oClipRect.X1 ) / 100000 );
-                if ( oClipRect.Y1 )
-                    aGraphCrop.Top = rtl::math::round( ( static_cast< double 
>( aOriginalSize.Height ) * oClipRect.Y1 ) / 100000 );
-                if ( oClipRect.X2 )
-                    aGraphCrop.Right = rtl::math::round( ( static_cast< double 
>( aOriginalSize.Width ) * oClipRect.X2 ) / 100000 );
-                if ( oClipRect.Y2 )
-                    aGraphCrop.Bottom = rtl::math::round( ( static_cast< 
double >( aOriginalSize.Height ) * oClipRect.Y2 ) / 100000 );
-                rPropMap.setProperty(PROP_GraphicCrop, aGraphCrop);
-            }
-        }
 
         if ( maBlipProps.moAlphaModFix.has() )
         {
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 21394acc80da..94b67cb379f2 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -1598,27 +1598,40 @@ void DrawingML::WritePattFill(const 
Reference<XPropertySet>& rXPropSet, const cs
         mpFS->endElementNS( XML_a , XML_pattFill );
 }
 
-void DrawingML::WriteGraphicCropProperties(uno::Reference<beans::XPropertySet> 
const & rXPropSet, Size const & rOriginalSize, MapMode const & rMapMode)
+void DrawingML::WriteGraphicCropProperties(uno::Reference<beans::XPropertySet> 
const & rXPropSet,
+                                           Size const & rOriginalSize,
+                                           MapMode const & rMapMode)
 {
     if (!GetProperty(rXPropSet, "GraphicCrop"))
         return;
 
-    Size aOriginalSize(rOriginalSize);
-
-    // GraphicCrop is in mm100, so in case the original size is in pixels, 
convert it over.
-    if (rMapMode.GetMapUnit() == MapUnit::MapPixel)
-        aOriginalSize = 
Application::GetDefaultDevice()->PixelToLogic(aOriginalSize, 
MapMode(MapUnit::Map100thMM));
-
     css::text::GraphicCrop aGraphicCropStruct;
     mAny >>= aGraphicCropStruct;
 
-    if ( (0 != aGraphicCropStruct.Left) || (0 != aGraphicCropStruct.Top) || (0 
!= aGraphicCropStruct.Right) || (0 != aGraphicCropStruct.Bottom) )
+    if(GetProperty(rXPropSet, "CustomShapeGeometry"))
+    {
+    // tdf#134210 GraphicCrop property is handled in import filter because of 
LibreOffice has not core
+    // feature. We croped the bitmap physically and MSO shouldn't crop bitmap 
one more time. When we
+    // have core feature for graphic cropping in custom shapes, we should 
uncomment the code anymore.
+
+        mpFS->singleElementNS( XML_a, XML_srcRect);
+    }
+    else
     {
-        mpFS->singleElementNS( XML_a, XML_srcRect,
-            XML_l, OString::number(rtl::math::round(aGraphicCropStruct.Left * 
100000.0 / aOriginalSize.Width())),
-            XML_t, OString::number(rtl::math::round(aGraphicCropStruct.Top * 
100000.0 / aOriginalSize.Height())),
-            XML_r, OString::number(rtl::math::round(aGraphicCropStruct.Right * 
100000.0 / aOriginalSize.Width())),
-            XML_b, OString::number(rtl::math::round(aGraphicCropStruct.Bottom 
* 100000.0 / aOriginalSize.Height())) );
+        Size aOriginalSize(rOriginalSize);
+
+        // GraphicCrop is in mm100, so in case the original size is in pixels, 
convert it over.
+        if (rMapMode.GetMapUnit() == MapUnit::MapPixel)
+            aOriginalSize = 
Application::GetDefaultDevice()->PixelToLogic(aOriginalSize, 
MapMode(MapUnit::Map100thMM));
+
+        if ( (0 != aGraphicCropStruct.Left) || (0 != aGraphicCropStruct.Top) 
|| (0 != aGraphicCropStruct.Right) || (0 != aGraphicCropStruct.Bottom) )
+        {
+            mpFS->singleElementNS( XML_a, XML_srcRect,
+                XML_l, 
OString::number(rtl::math::round(aGraphicCropStruct.Left * 100000.0 / 
aOriginalSize.Width())),
+                XML_t, OString::number(rtl::math::round(aGraphicCropStruct.Top 
* 100000.0 / aOriginalSize.Height())),
+                XML_r, 
OString::number(rtl::math::round(aGraphicCropStruct.Right * 100000.0 / 
aOriginalSize.Width())),
+                XML_b, 
OString::number(rtl::math::round(aGraphicCropStruct.Bottom * 100000.0 / 
aOriginalSize.Height())) );
+        }
     }
 }
 
diff --git a/sd/qa/unit/export-tests-ooxml1.cxx 
b/sd/qa/unit/export-tests-ooxml1.cxx
index 0e938e05e9c7..a1e752834f1a 100644
--- a/sd/qa/unit/export-tests-ooxml1.cxx
+++ b/sd/qa/unit/export-tests-ooxml1.cxx
@@ -1145,17 +1145,36 @@ void 
SdOOXMLExportTest1::testCustomshapeBitmapfillSrcrect()
     xDocShRef->DoClose();
 
     xmlDocUniquePtr pXmlDoc = parseExport(tempFile, "ppt/slides/slide1.xml");
-    const OString sXmlPath = "//a:blipFill/a:srcRect";
+
+    // tdf#132680
+    // We are preventing the side effect of DOCX improvement to PPTX case.
     // Without the accompanying fix in place, this test would have failed with:
     // - Expected: 1
     // - Actual  : 0
     // - XPath '//a:blipFill/a:srcRect' number of nodes is incorrect
     // i.e. <a:srcRect> was exported as <a:fillRect> in <a:stretch>, which 
made part of the image
     // invisible.
-    double fLeftPercent = std::round(getXPath(pXmlDoc, sXmlPath, 
"l").toDouble() / 1000);
-    CPPUNIT_ASSERT_EQUAL(4.0, fLeftPercent);
-    double fRightPercent = std::round(getXPath(pXmlDoc, sXmlPath, 
"r").toDouble() / 1000);
-    CPPUNIT_ASSERT_EQUAL(4.0, fRightPercent);
+
+    // tdf#134210
+    // Original values of attribute of l and r in xml files: <a:srcRect 
l="4393" r="4393"/>
+    // Because of we have not core feature for cropping bitmap in custom 
shapes, we added cropping
+    // support to import filter. We modified the bitmap during import. As 
result the original
+    // image is cropped anymore (if we had the core feature for that, the 
original image would
+    // remain same, just we would see like cropped in the shape) To see the 
image in correct
+    // position in Microsoft Office too, we have to remove left right top 
bottom percentages
+    // anymore. In the future if we add core feature to LibreOffice, this test 
will failed with
+    // When we add the core feature, we should change the control value with 
4393 as following.
+
+    //const OString sXmlPath = "//a:blipFill/a:srcRect";
+    //sal_Int32 nLeftPercent = getXPath(pXmlDoc, sXmlPath, "l").toInt32();
+    //CPPUNIT_ASSERT_EQUAL(sal_Int32(4393), nLeftPercent);
+    //sal_Int32 nRightPercent = getXPath(pXmlDoc, sXmlPath, "r").toInt32();
+    //CPPUNIT_ASSERT_EQUAL(sal_Int32(4393), nRightPercent);
+
+    assertXPathNoAttribute(pXmlDoc, 
"/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:blipFill/a:srcRect", "l");
+    assertXPathNoAttribute(pXmlDoc, 
"/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:blipFill/a:srcRect", "r");
+    assertXPathNoAttribute(pXmlDoc, 
"/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:blipFill/a:srcRect", "t");
+    assertXPathNoAttribute(pXmlDoc, 
"/p:sld/p:cSld/p:spTree/p:sp/p:spPr/a:blipFill/a:srcRect", "b");
 }
 
 void SdOOXMLExportTest1::testTdf100348FontworkBitmapFill()
diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx
index eff937566383..9aefdd4ecc7b 100644
--- a/sd/qa/unit/import-tests.cxx
+++ b/sd/qa/unit/import-tests.cxx
@@ -217,6 +217,7 @@ class SdImportTest : public SdModelTestBase
     void testShapeGlowEffectPPTXImpoer();
     void testShapeBlurPPTXImport();
     void testMirroredGraphic();
+    void testCropPositionGraphic();
 
     bool checkPattern(sd::DrawDocShellRef const & rDocRef, int nShapeNumber, 
std::vector<sal_uInt8>& rExpected);
     void testPatternImport();
@@ -346,6 +347,7 @@ class SdImportTest : public SdModelTestBase
     CPPUNIT_TEST(testShapeGlowEffectPPTXImpoer);
     CPPUNIT_TEST(testShapeBlurPPTXImport);
     CPPUNIT_TEST(testMirroredGraphic);
+    CPPUNIT_TEST(testCropPositionGraphic);
 
     CPPUNIT_TEST_SUITE_END();
 };
@@ -3324,6 +3326,20 @@ void SdImportTest::testMirroredGraphic()
     xDocShRef->DoClose();
 }
 
+void SdImportTest::testCropPositionGraphic()
+{
+    sd::DrawDocShellRef xDocShRef = 
loadURL(m_directories.getURLFromSrc(u"sd/qa/unit/data/pptx/crop-position.pptx"),
 PPTX);
+    uno::Reference<beans::XPropertySet> xShape(getShapeFromPage(0, 0, 
xDocShRef), uno::UNO_SET_THROW);
+    CPPUNIT_ASSERT(xShape.is());
+    uno::Reference<graphic::XGraphic> xGraphic;
+    xShape->getPropertyValue("FillBitmap") >>= xGraphic;
+    CPPUNIT_ASSERT(xGraphic.is());
+    Graphic aGraphic(xGraphic);
+    BitmapEx aBitmap(aGraphic.GetBitmapEx());
+    CPPUNIT_ASSERT_EQUAL( Color(8682893), aBitmap.GetPixelColor( 0, 0 ));
+    xDocShRef->DoClose();
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
++++++ bsc1177955.diff -> bsc1181644.diff ++++++
--- /work/SRC/openSUSE:Factory/libreoffice/bsc1177955.diff      2021-02-11 
12:52:23.101918329 +0100
+++ /work/SRC/openSUSE:Factory/.libreoffice.new.2378/bsc1181644.diff    
2021-03-10 08:49:21.146399548 +0100
@@ -1,100 +1,149 @@
-From e80fb99133a8edf4c0b03319c7296889b0e52d54 Mon Sep 17 00:00:00 2001
+From 54ad2128db5d324f530cb15ee56e6512d9093872 Mon Sep 17 00:00:00 2001
 From: Miklos Vajna <vmik...@collabora.com>
-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:
-
-<dgm:constr type="l" for="ch" forName="text" refType="r" refFor="ch" 
refForName="img"/>
-
-While img has no "r", it has:
-
-<dgm:constr type="w" for="ch" forName="img" refType="w" refFor="ch" 
refForName="box" fact="0.2"/>
-<dgm:constr type="l" for="ch" forName="img" refType="h" refFor="ch" 
refForName="box" fact="0.1"/>
-
-Which is enough to fix the x position of the text to not overlap with
-img.
-
-(cherry picked from commit 1359e8c566970fcef860f7ba7f54a07d8e6e0513)
-
-Change-Id: I80db290bd1695884ffb7b1eabaffa09462e8883d
+Date: Thu, 25 Feb 2021 18:04:19 +0100
+Subject: [PATCH] tdf#132368 svx: empty the interop grab-bag on ending text
+ edit
+
+Regression from commit aafaf1f55fa413ad49d4556cf7c0a713dd206ae4 (PPTX
+export: save SmartArt as diagram instead of group of shapes,
+2019-03-13), the idea of interop grab-bag was to carry additional
+information around as long as the object is not changed.
+
+However, actual clearing of the grab-bag was never implemented, do this
+when editing shape text.
+
+An alternative would be to do this in SdrObject::SetChanged(), but
+Writer sets the layer of SdrObjects during layout (when the import
+filter is already finished and undo is enabled), so that would mean loss
+of the smartart metadata for DOCX.
+
+Change-Id: I9ab205b4ef84169f4b5a16b86fe9a152e3370a6c
+Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111560
+Reviewed-by: Miklos Vajna <vmik...@collabora.com>
+Tested-by: Jenkins
+Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
 ---
- .../drawingml/diagram/diagramlayoutatoms.cxx  | 78 ++++++++++++++-----
- 1 file changed, 60 insertions(+), 18 deletions(-)
-
-Index: libreoffice-7.1.0.3/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
-===================================================================
---- 
libreoffice-7.1.0.3.orig/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
-+++ libreoffice-7.1.0.3/oox/source/drawingml/diagram/diagramlayoutatoms.cxx
-@@ -784,6 +784,37 @@ sal_Int32 AlgAtom::getVerticalShapesCoun
- 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)
+ svx/CppunitTest_svx_unit.mk  |  1 +
+ svx/qa/unit/svdraw.cxx       | 55 ++++++++++++++++++++++++++++++++++++
+ svx/source/svdraw/svdobj.cxx | 20 +++++++++++++
+ 3 files changed, 76 insertions(+)
+
+diff --git a/svx/CppunitTest_svx_unit.mk b/svx/CppunitTest_svx_unit.mk
+index ac9f3e4531ad..892490265261 100644
+--- a/svx/CppunitTest_svx_unit.mk
++++ b/svx/CppunitTest_svx_unit.mk
+@@ -36,6 +36,7 @@ $(eval $(call gb_CppunitTest_add_exception_objects,svx_unit, 
\
+ $(eval $(call gb_CppunitTest_use_libraries,svx_unit, \
+       basegfx \
+       drawinglayer \
++      editeng \
+       sal \
+       sfx \
+       svxcore \
+diff --git a/svx/qa/unit/svdraw.cxx b/svx/qa/unit/svdraw.cxx
+index c96ccbb7aa97..783420d56fea 100644
+--- a/svx/qa/unit/svdraw.cxx
++++ b/svx/qa/unit/svdraw.cxx
+@@ -25,6 +25,12 @@
+ #include <svx/svdpage.hxx>
+ #include <svx/unopage.hxx>
+ #include <vcl/virdev.hxx>
++#include <comphelper/propertyvalue.hxx>
++#include <sfx2/viewsh.hxx>
++#include <svx/svdview.hxx>
++#include <svx/unoapi.hxx>
++#include <sal/log.hxx>
++
+ #include <sdr/contact/objectcontactofobjlistpainter.hxx>
+ 
+ using namespace ::com::sun::star;
+@@ -105,6 +111,55 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testSemiTransparentText)
+     CPPUNIT_ASSERT_EQUAL(nTransparence,
+                          static_cast<sal_Int16>(basegfx::fround(fTransparence 
* 100)));
+ }
++
++CPPUNIT_TEST_FIXTURE(SvdrawTest, testTextEditEmptyGrabBag)
 +{
-+    switch (nRefType)
++    // Given a document with a groupshape, which has 2 children.
++    getComponent() = loadFromDesktop("private:factory/sdraw");
++    uno::Reference<lang::XMultiServiceFactory> xFactory(getComponent(), 
uno::UNO_QUERY);
++    uno::Reference<drawing::XShape> xRect1(
++        xFactory->createInstance("com.sun.star.drawing.RectangleShape"), 
uno::UNO_QUERY);
++    xRect1->setPosition(awt::Point(1000, 1000));
++    xRect1->setSize(awt::Size(10000, 10000));
++    uno::Reference<drawing::XShape> xRect2(
++        xFactory->createInstance("com.sun.star.drawing.RectangleShape"), 
uno::UNO_QUERY);
++    xRect2->setPosition(awt::Point(1000, 1000));
++    xRect2->setSize(awt::Size(10000, 10000));
++    uno::Reference<drawing::XShapes> xGroup(
++        xFactory->createInstance("com.sun.star.drawing.GroupShape"), 
uno::UNO_QUERY);
++    uno::Reference<drawing::XDrawPagesSupplier> 
xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
++    uno::Reference<drawing::XDrawPage> 
xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
++                                                 uno::UNO_QUERY);
++    uno::Reference<drawing::XShape> xGroupShape(xGroup, uno::UNO_QUERY);
++    xDrawPage->add(xGroupShape);
++    xGroup->add(xRect1);
++    xGroup->add(xRect2);
++    uno::Reference<text::XTextRange> xRect2Text(xRect2, uno::UNO_QUERY);
++    xRect2Text->setString("x");
++    uno::Sequence<beans::PropertyValue> aGrabBag = {
++        comphelper::makePropertyValue("OOXLayout", true),
++    };
++    uno::Reference<beans::XPropertySet> xGroupProps(xGroup, uno::UNO_QUERY);
++    xGroupProps->setPropertyValue("InteropGrabBag", uno::makeAny(aGrabBag));
++
++    // When editing the shape text of the 2nd rectangle (insert a char at the 
start).
++    SfxViewShell* pViewShell = SfxViewShell::Current();
++    SdrView* pSdrView = pViewShell->GetDrawView();
++    SdrObject* pObject = GetSdrObjectFromXShape(xRect2);
++    pSdrView->SdrBeginTextEdit(pObject);
++    EditView& rEditView = pSdrView->GetTextEditOutlinerView()->GetEditView();
++    rEditView.InsertText("y");
++    pSdrView->SdrEndTextEdit();
++
++    // Then make sure that grab-bag is empty to avoid loosing the new text.
++    xGroupProps->getPropertyValue("InteropGrabBag") >>= aGrabBag;
++    // Without the accompanying fix in place, this test would have failed 
with:
++    // assertion failed
++    // - Expression: !aGrabBag.hasElements()
++    // i.e. the grab-bag was still around after modifying the shape, and that 
grab-bag contained the
++    // old text.
++    CPPUNIT_ASSERT(!aGrabBag.hasElements());
++}
+ }
+ 
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
+index 638c590a52cd..5480ac1d86ce 100644
+--- a/svx/source/svdraw/svdobj.cxx
++++ b/svx/source/svdraw/svdobj.cxx
+@@ -1740,6 +1740,26 @@ void 
SdrObject::SetOutlinerParaObject(std::unique_ptr<OutlinerParaObject> pTextO
+     if (GetCurrentBoundRect()!=aBoundRect0) {
+         SendUserCall(SdrUserCallType::Resize,aBoundRect0);
+     }
++
++    if (getSdrModelFromSdrObject().IsUndoEnabled())
 +    {
-+        case XML_r:
++        // Don't do this during import.
++        SdrObject* pTopGroupObj = nullptr;
++        if (getParentSdrObjectFromSdrObject())
 +        {
-+            auto it = rMap.find(XML_l);
-+            if (it == rMap.end())
++            pTopGroupObj = getParentSdrObjectFromSdrObject();
++            while (pTopGroupObj->getParentSdrObjectFromSdrObject())
 +            {
-+                return false;
++                pTopGroupObj = 
pTopGroupObj->getParentSdrObjectFromSdrObject();
 +            }
-+            sal_Int32 nLeft = it->second;
-+            it = rMap.find(XML_w);
-+            if (it == rMap.end())
-+            {
-+                return false;
-+            }
-+            rValue = nLeft + it->second;
-+            return true;
 +        }
-+        default:
-+            break;
++        if (pTopGroupObj)
++        {
++            // A shape was modified, which is in a group shape. Empty the 
group shape's grab-bag,
++            // which potentially contains the old text of the shapes in case 
of diagrams.
++            
pTopGroupObj->SetGrabBagItem(uno::makeAny(uno::Sequence<beans::PropertyValue>()));
++        }
 +    }
-+
-+    return false;
-+}
-+
-+/**
-  * Apply rConstraint to the rProperties shared layout state.
-  *
-  * Note that the order in which constraints are applied matters, given that 
constraints can refer to
-@@ -803,11 +834,22 @@ void ApplyConstraintToLayout(const Const
-         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
-     {
-+        // 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;
+ void SdrObject::NbcSetOutlinerParaObject(std::unique_ptr<OutlinerParaObject> 
/*pTextObject*/)
+-- 
+2.26.2
+

++++++ libreoffice-7.1.0.3.tar.xz -> libreoffice-7.1.1.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/libreoffice/libreoffice-7.1.0.3.tar.xz 
/work/SRC/openSUSE:Factory/.libreoffice.new.2378/libreoffice-7.1.1.2.tar.xz 
differ: char 27, line 1

++++++ libreoffice-help-7.1.0.3.tar.xz -> libreoffice-help-7.1.1.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/libreoffice/libreoffice-help-7.1.0.3.tar.xz 
/work/SRC/openSUSE:Factory/.libreoffice.new.2378/libreoffice-help-7.1.1.2.tar.xz
 differ: char 27, line 1

++++++ libreoffice-translations-7.1.0.3.tar.xz -> 
libreoffice-translations-7.1.1.2.tar.xz ++++++
/work/SRC/openSUSE:Factory/libreoffice/libreoffice-translations-7.1.0.3.tar.xz 
/work/SRC/openSUSE:Factory/.libreoffice.new.2378/libreoffice-translations-7.1.1.2.tar.xz
 differ: char 26, line 1

Reply via email to