OBS-URL: https://build.opensuse.org/request/show/876791 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=949
154 lines
7.0 KiB
Diff
154 lines
7.0 KiB
Diff
From 5f4808d7536a4c551c8764ac2ac6be30ad975f69 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?G=C3=BCl=C5=9Fah=20K=C3=B6se?= <gulsah.kose@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.kose@collabora.com>
|
|
Signed-off-by: Xisco Fauli <xiscofauli@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();
|