diff --git a/bsc1176547_1.diff b/bsc1176547_1.diff new file mode 100644 index 0000000..c6016a0 --- /dev/null +++ b/bsc1176547_1.diff @@ -0,0 +1,153 @@ +From 5f4808d7536a4c551c8764ac2ac6be30ad975f69 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?G=C3=BCl=C5=9Fah=20K=C3=B6se?= +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 +Signed-off-by: Xisco Fauli +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 const & x + return aReturnGraphic.GetXGraphic(); + } + ++Reference< XGraphic > lclMirrorGraphic(uno::Reference 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 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& 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 xShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_SET_THROW); ++ CPPUNIT_ASSERT(xShape.is()); ++ uno::Reference 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(); diff --git a/bsc1176547_2.diff b/bsc1176547_2.diff new file mode 100644 index 0000000..1340fa4 --- /dev/null +++ b/bsc1176547_2.diff @@ -0,0 +1,284 @@ +From 33e69fb9ef450169e7d85ae3215fd9a4fc8082c2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?G=C3=BCl=C5=9Fah=20K=C3=B6se?= +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 +Signed-off-by: Xisco Fauli +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 const & + return aReturnGraphic.GetXGraphic(); + } + ++void lclCalculateCropPercentage(uno::Reference 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 const & xGraphic, geometry::IntegerRectangle2D aFillRect) + { + ::Graphic aGraphic(xGraphic); +@@ -103,8 +127,15 @@ Reference< XGraphic > lclCropGraphic(uno::Reference const & x + sal_Int32 nBottomCorr = nOrigHeight * -1 * static_cast(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(aFillRect.X1) / 100000; ++ nWidth += nLeftCorr; ++ sal_Int32 nRightCorr = nOrigWidth * -1 * static_cast(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& rXPropSet, const cs + mpFS->endElementNS( XML_a , XML_pattFill ); + } + +-void DrawingML::WriteGraphicCropProperties(uno::Reference const & rXPropSet, Size const & rOriginalSize, MapMode const & rMapMode) ++void DrawingML::WriteGraphicCropProperties(uno::Reference 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. was exported as in , 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: ++ // 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& 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 xShape(getShapeFromPage(0, 0, xDocShRef), uno::UNO_SET_THROW); ++ CPPUNIT_ASSERT(xShape.is()); ++ uno::Reference 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(); diff --git a/bsc1177955.diff b/bsc1177955.diff deleted file mode 100644 index 98b0b83..0000000 --- a/bsc1177955.diff +++ /dev/null @@ -1,100 +0,0 @@ -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(-) - -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) -+{ -+ 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. - * - * 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; diff --git a/libreoffice-7.1.0.3.tar.xz b/libreoffice-7.1.0.3.tar.xz deleted file mode 100644 index cc7732c..0000000 --- a/libreoffice-7.1.0.3.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9ed0833f349da3f7b27f54fa24da388dc6a84079935322b305a7a2171e48f3e6 -size 243091304 diff --git a/libreoffice-7.1.0.3.tar.xz.asc b/libreoffice-7.1.0.3.tar.xz.asc deleted file mode 100644 index 28f578a..0000000 --- a/libreoffice-7.1.0.3.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmARy2IACgkQ9DSh76/u -rqM31BAAv+Bnrsex7cWAY+U2zY3wjdfBmxAFPcqDU05/OM4OBWkdOMFYhM5qwMdl -C0LccF4YchWyayfKIkF5OB4S2ZcJ9suWph7OdNdvZzh94SHlkaNbMGyv/iWtImRr -fw9JXDPsdfDiSOiTCtu5kL8OUcQKI0dsEpdCJ499/ra9I+RCW4Vz4F3ThgtTJkGs -Zom2vbRTvP5dTne+hVlkaN1oPyZ038BsFtJXr+he4slHkOQIPqTJ5d6btcViBWu2 -aRULg5L+C4e30UY9SvcO6rl9X8Sl7NJGbnJd1obJKXLeSg4eAV9x3D4xfldJP0jt -343TX2uvklMqRIZfIZwF4ZjT6PeUL6upUWT+8a15gcaI6YZ85RQXqbKXijXLoBEe -UkFzx+/kq0WYu+qd8BgOpfOgnj4AI9JMePfUZYW5RH/dTdXQYsTT33CMt8qFd9mf -6FXPNtIqkn9S7FdekhA8SO1HfvWmyLtaJNl9EfpI7o1srpoDTtlfXnwibxu/3owN -AVrid7XAIRKUbUgCi7VKQuv5H+GGaf7d8Nf885NRxmv8Bx5WWDzvxwHHczaNl8Sz -C8nMHl4Y2o2zJQbkUDKo+wMpEjfnGHF7qfUUs0e2A0MMPVautLlN9yYIqM+AO+Ww -xwHEGSE6gkhz9sIYZ/BibwmAoQp9JC8At50elbafg4dk0GaKV4c= -=IqlL ------END PGP SIGNATURE----- diff --git a/libreoffice-7.1.1.2.tar.xz b/libreoffice-7.1.1.2.tar.xz new file mode 100644 index 0000000..cf62802 --- /dev/null +++ b/libreoffice-7.1.1.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6e570c59eec2f61eaccf93623c8dde153ff7c0a44bf68bf4496b0f52112e0ef +size 243478248 diff --git a/libreoffice-7.1.1.2.tar.xz.asc b/libreoffice-7.1.1.2.tar.xz.asc new file mode 100644 index 0000000..14450de --- /dev/null +++ b/libreoffice-7.1.1.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmA3mwAACgkQ9DSh76/u +rqO5YBAAzlTwFHXI74/NibyoEv43DR2Lcsdc5hNxtEN81/sdRmjS4Na+DnECtapD +b3W8ZOoHRdVWoXsgSXn7dT+ikZ9UDTTqYXRZoUsVTOSMqTI0/9yHwNmNPLACNOcN +1smsTVIVOyQ2w6ezYRA8YMAqY5YuwGAHCcx1ZEbwNL4Lkr8p5OeeD09L7HgC1Fjw +3FcsPPn/07ESOCaKqFPQM8D2+R4lio7gOLHKgyN8V5Dn3dP/+WlKk9fDeXjZXLPB +/bIiBgfa4Z/ig77KS3KyAhbqPwu3CA28hbktQovgVUgRyK4v8/5UdWcI4js+WxGO +0JBrLZ7ajDSNdpu8Aa8Tj+G2Osmvxct02ueYOSHXRiLzE2Ey37XF4/kN5tlh9YO2 +W53y35osciA7W07XCFP+sCjs5nGUDbTuTi3yGHHn94VH9h1MmYW+j5qnjzVm4vlS +U95J0XFFU3EmBc3RizOA8R4H38kZqTVYMIRSHnNTS40YAakfo45HGxvIn3r7Rmxv +AanujetGmzhzrfgja4G4PEcQkcIPSs14pgiCvH0FSwNRCZdZxyqTqlvgvXSd8AK6 +5AtMmDGTA0z5qBPjOBne1iRwEA4PTFrXAQf1wtn6Yl+VR3i1wGVq49JdWkQiUHJW +uh3s+tgg6DkSKB88gwt9gAp6ZR+2nc0y3PH93ksRPlyCU2jfDsI= +=4LjS +-----END PGP SIGNATURE----- diff --git a/libreoffice-help-7.1.0.3.tar.xz b/libreoffice-help-7.1.0.3.tar.xz deleted file mode 100644 index ca23fd8..0000000 --- a/libreoffice-help-7.1.0.3.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:698ae21765ae1e2df8bbc3b448fe88437055402708f6afe3ed6f746491887acf -size 111785796 diff --git a/libreoffice-help-7.1.0.3.tar.xz.asc b/libreoffice-help-7.1.0.3.tar.xz.asc deleted file mode 100644 index 6bd70b1..0000000 --- a/libreoffice-help-7.1.0.3.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmARy24ACgkQ9DSh76/u -rqPRdw//V71OahEGdMTJSNm1VyRLOIfEfKLayN956FB6WyFRhmZz6bMXgkZhMpCv -NAjLZSQSlcfCFl5344Zf1ilPmohAa13TEZ5Hb3yux6+xj/SDqGc2wQpeugj7NeVN -GvjBqVT71awlp7CgSCy7aefiSA/b/MzRV3SAJrqRexa26uNcTjKJgQEBWc45pEL0 -boAjGTSgemD4b0qSV/x/BYNPvYUjSs0HNI4TPwtJfCnI+CXsVQnDEAUWpVL2HKBd -wB+oK/lEulNmCzqIBsMIAEDpjWoiASet+EmgOdRHqcdUy09kKEml8cNcL+D9N9j4 -aRCojy1UH2F8VvcdWUXb68XndKI1nShQu/zFowf8MDhvzpH3byRcFUfAKnNaFieV -alfEfQYa/BKkr9ZWCQcwdB1ts0hXQOUFgRCe0j2S29vozmdyszVghRFANU5z7kCG -vWzRVDu1EUa7QZcOG7jLBBTC1SCIwCSdwy8xqPpzitq9XfllVqvQPf+OJR/Z6aai -eFQUugTkSGOgD0v1FP294R6JWuXsaAPVmpEUJ4znpiboE95mrQyGUbaP53Sk7r+k -i71K4WmOi/JE7ySCy2KiVt1r5pqn/B1vCi2aGa0SXmzYLu9Pkk7fmeQnGMH+MQYX -T1hcKpsHUpLp5J2zt5Xk/y77z2HrgrzKgHKi/l1bLYMkJQs0NBA= -=PMC5 ------END PGP SIGNATURE----- diff --git a/libreoffice-help-7.1.1.2.tar.xz b/libreoffice-help-7.1.1.2.tar.xz new file mode 100644 index 0000000..e11e01b --- /dev/null +++ b/libreoffice-help-7.1.1.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4774ec743f5463b65ba34e2e542b594d81de090a1be326490a52d3bb37059693 +size 111786544 diff --git a/libreoffice-help-7.1.1.2.tar.xz.asc b/libreoffice-help-7.1.1.2.tar.xz.asc new file mode 100644 index 0000000..c1d024d --- /dev/null +++ b/libreoffice-help-7.1.1.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmA3mwYACgkQ9DSh76/u +rqOcEg/8DpmO1JOAlMwf4Oeqgl/8FSTU0pxakBeOUgNlpn/EqMZhVqW593pxjpYZ +0+iBLZ7Kj5kmM/9mNUcqOAzgjUADL3LRII04XviW6Q3vhe1ckaKaGMQzN7oJHVz+ +Ee9QKO8KJ1DwkiAUi139FfmaxzAi1j/ZdKhkuuB9kcCSUK0yRkTM84+ETEr9ESSg +zeSgg2cyNSBQ/3YBhl7gUrNJevqs1BMpnG6TqDj4+hultYgEbc4HX2H1kc8pYnrk +UOnMVOGZk3ZEHyCRUPVkRhovwnEN4NTn6uZ4MDqEK9e8OnWZA0B/Z6wyZbAPtN1e +ALfvP8JF5Ve4Ou7ZSz9+HzzGzziLuDtUw7RbHujWK/6EMMYtx4wFYmRmNupUBijd +Xzy3YYHmuO+hEhKuRZRK8zHTk0EILIAr92FeZgHImaShIEmWEAt2rfabF1a97DEU +Wx3u0ajPJ2isBG1ivspV2RxD+fZ5VhtupRSBSXEbb2+yz3iAn6/IRNt7yc4r1h/s +vapvmM99ANwmkr+L/Iq1nqtfwmOGVXOlwY0hjG1gIMYu9EdUf8LHK6NoCks3pm+s +kmIof+VLza2rygQsIyuMLNKmtnScqhr14oD85r1N6PFvC1q55/N+JVejMjTKKbSI +35TcrDi8iiPHCF7AC58TGf54E6+ZGEi5iA17HtM95F5cuXSAKVQ= +=QcRA +-----END PGP SIGNATURE----- diff --git a/libreoffice-translations-7.1.0.3.tar.xz b/libreoffice-translations-7.1.0.3.tar.xz deleted file mode 100644 index 11d93bf..0000000 --- a/libreoffice-translations-7.1.0.3.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b17e0d7c61de80526d22c11c63596c4d56aaa2b1ad0f14d29e0abdd8b3efcc54 -size 184441692 diff --git a/libreoffice-translations-7.1.0.3.tar.xz.asc b/libreoffice-translations-7.1.0.3.tar.xz.asc deleted file mode 100644 index b36130c..0000000 --- a/libreoffice-translations-7.1.0.3.tar.xz.asc +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmARy28ACgkQ9DSh76/u -rqNq2xAAh18WoddFFIKw830rW8A3t6ElwAiTj9XB7YVc9o1bclMEkAcL2cE5+4jP -HJ7CNi0OpWe3UXq8umdq0cSXIx6uv3/69DGGQOUEv/+fAYB+9aBlFGR07Gc14lwp -YPNyhnPK7hwSrD9QaLAl2GbHB7TJllEb+3YUT3/QH5xqkBhBnjYXuO/PdcopzHQV -SFwXGpHqYJVbq6l1J7YZAfvxyhOOL2UHA2g2/MNMRfuGr7xRBo3b3Kjp97KhC5Lv -BXWYfnQHdQv7c33cVi1Vb0r/sQzEUxcRHlMW8MQE4doWtCZE1y+lesTxtiuLrKa0 -FBbr5kQsbpYVjdC1tTnU0LqM/xp6rETySF5E50u3sGjsxY/OEsVcK20/Kxp42ptC -REyKNP1lhWa9odymYGp5rkPHRvgqQcu/hIC+42EZDox2hpQAhlxANvbrfNXPaHL7 -BBUwZQgkuGMy+c7Y7UROLWCeE26cPUmopf1UnHtR7Tj5cZDRCJoCKxEnI1hvBTTh -S6bfONe0gDcbYjcF5zq37ALKLEpEnt3yu7q5x3G5lRIPTyHc1Gfp6EjOZUzK/Id0 -0SYSg7lEOILCmpYpv3xcBBUk5+tBF2XzGKePEZvgw0RRomBJpOWDoyFJCFk9nz1Y -CvUEfu/xn8Soi1yQEsuASfH05n33cGL61qCsGn0tVRCBnk4uPUM= -=na+z ------END PGP SIGNATURE----- diff --git a/libreoffice-translations-7.1.1.2.tar.xz b/libreoffice-translations-7.1.1.2.tar.xz new file mode 100644 index 0000000..1f5a429 --- /dev/null +++ b/libreoffice-translations-7.1.1.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:702bca8e3e3359d065a5e986f5437e1034aa617856ac83ec2769b87300da2dee +size 184669284 diff --git a/libreoffice-translations-7.1.1.2.tar.xz.asc b/libreoffice-translations-7.1.1.2.tar.xz.asc new file mode 100644 index 0000000..bb2805f --- /dev/null +++ b/libreoffice-translations-7.1.1.2.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCAAdFiEEwoOeytlAj76VMcPp9DSh76/urqMFAmA3mwcACgkQ9DSh76/u +rqPk7hAApDQBCuJlM4Nt+dsl66the7jhu4e3cWFJqXpeM0GrynOQx0ckWXSZwaN4 +Z1RViBC+WiaQHSghiJDBGxMJy/0iIl1Eh+o5H4JVgnOBSHF3Hgm23/UVhJ0WdtrT +H00xvDUxufoZBkYTNffJ0w6nAfnscTEo03VR5+HLgej7958YF5vNO3SCrR/8dluY +efe/d4dm9SCHnkRi6fEA1FA50el6mRIE62gG4PCjw+9xRzhCt1SSw+WKjUi0dCwT +SZR1TZXkWh71t5PaVcuG8R/5bzFlIGu8XxLDFh0bmnCqI3mKZ5445if82R0Sj4bb +1oDDTYEXC1UWoY5RlBv7h/5mTcOkEz2+Lc7pQ0i4w1LBEKKYm4IAs5wcTz8FzSjJ +cSWkWvUjh6qYdnEVl+Kz9/Xg2rrdTGTFKS8MOfJXrPZVii9NGIxX3HPL8+KO6MGM +0hXSupQngAMi2a0UNPJee2wk7Yh2DquD6UZookqjTPuWdiAPX264LZQ3uLLfAzQW +uBzsTtcr996dP68VpbMugtFAtQruk6/sSIaj12wlbMK0zZwvDAEsZOyee24dK+6/ +zMMzxUutVvtGph2lXYTDJqqXsDY+wnL9jf7npIJW/+d362RLFujVXHdkjhmMVauA +TX2fR4OZO5gg+1RT3KjZ8gVIMzstXPoVBDelqXjFjePp1YJqtNY= +=e67E +-----END PGP SIGNATURE----- diff --git a/libreoffice.changes b/libreoffice.changes index d66f0ab..9781246 100644 --- a/libreoffice.changes +++ b/libreoffice.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Mon Mar 1 11:04:00 UTC 2021 - Markéta Machová + +- 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 diff --git a/libreoffice.spec b/libreoffice.spec index e81dc81..3a6404e 100644 --- a/libreoffice.spec +++ b/libreoffice.spec @@ -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,12 +101,13 @@ Patch2: nlpsolver-no-broken-help.diff 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 @@ -966,9 +967,10 @@ Provides %{langname} translations and additional resources (help files, etc.) fo %patch2 %patch3 %patch4 -p1 -%patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 +%patch14 -p1 %patch990 -p1 %patch991 -p1