oox/source/drawingml/fillproperties.cxx | 26 ++++++++++++++++++++++++++ oox/source/drawingml/shape.cxx | 2 ++ sd/qa/unit/data/pptx/tdf134174.pptx |binary sd/qa/unit/import-tests.cxx | 19 +++++++++++++++++++ 4 files changed, 47 insertions(+)
New commits: commit 558a72adc294efb9e62e24f3419369c7e9d48edf Author: Gülşah Köse <gulsah.k...@collabora.com> AuthorDate: Sun Aug 23 22:32:53 2020 +0300 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Tue Aug 25 08:40:52 2020 +0200 tdf#134174 Fix the rotation of bitmap filled custom shapes. During import we were rotating only custom shape. Not its bitmap. Custom shape and its bitmap rotated with same rotation value in that commit. Change-Id: I02d19c820670df7b4d1622836156c6bf8ed1c154 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101255 Tested-by: Jenkins Reviewed-by: Gülşah Köse <gulsah.k...@collabora.com> (cherry picked from commit 9fe881410909c5273cef517433411bc4eceee294) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101161 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx index ce6cb1f931e4..863d3b846c60 100644 --- a/oox/source/drawingml/fillproperties.cxx +++ b/oox/source/drawingml/fillproperties.cxx @@ -22,6 +22,7 @@ #include <iterator> #include <drawingml/graphicproperties.hxx> +#include <vcl/graph.hxx> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/beans/XPropertySet.hpp> @@ -76,6 +77,22 @@ Reference< XGraphic > lclCheckAndApplyDuotoneTransform(const BlipFillProperties& return xGraphic; } +Reference< XGraphic > lclRotateGraphic(uno::Reference<graphic::XGraphic> const & xGraphic, long nRotation) +{ + ::Graphic aGraphic(xGraphic); + ::Graphic aReturnGraphic; + + assert (aGraphic.GetType() == GraphicType::Bitmap); + + BitmapEx aBitmapEx(aGraphic.GetBitmapEx()); + const ::Color& aColor = ::Color(0x00); + aBitmapEx.Rotate(nRotation, aColor); + 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) { @@ -741,6 +758,15 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelpe // it is a cropped graphic. rPropMap.setProperty(PROP_FillStyle, FillStyle_BITMAP); rPropMap.setProperty(PROP_FillBitmapMode, BitmapMode_STRETCH); + + // It is a bitmap filled and rotated graphic. + // When custom shape is rotated, bitmap have to be rotated too. + if(rPropMap.hasProperty(PROP_RotateAngle)) + { + long nAngle = rPropMap.getProperty(PROP_RotateAngle).get<long>(); + xGraphic = lclRotateGraphic(xGraphic, nAngle/10 ); + } + rPropMap.setProperty(PROP_FillBitmap, xGraphic); } else diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 8cb3d00df231..2e100a41c309 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1036,6 +1036,8 @@ Reference< XShape > const & Shape::createAndInsert( // applying properties aShapeProps.assignUsed( getShapeProperties() ); 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 ( mpTablePropertiesPtr.get() && aServiceName == "com.sun.star.drawing.TableShape" ) diff --git a/sd/qa/unit/data/pptx/tdf134174.pptx b/sd/qa/unit/data/pptx/tdf134174.pptx new file mode 100644 index 000000000000..ef722dc501a8 Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf134174.pptx differ diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index 85fac6becdd1..9ebb55d39a21 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -195,6 +195,7 @@ public: void testTdf100065(); void testTdf90626(); void testTdf114488(); + void testTdf134174(); void testTdf114913(); void testTdf114821(); void testTdf115394(); @@ -305,6 +306,7 @@ public: CPPUNIT_TEST(testTdf100065); CPPUNIT_TEST(testTdf90626); CPPUNIT_TEST(testTdf114488); + CPPUNIT_TEST(testTdf134174); CPPUNIT_TEST(testTdf114913); CPPUNIT_TEST(testTdf114821); CPPUNIT_TEST(testTdf115394); @@ -2590,6 +2592,23 @@ void SdImportTest::testTdf114488() xDocShRef->DoClose(); } +void SdImportTest::testTdf134174() +{ + sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf134174.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(9118171), aBitmap.GetPixelColor( 0, 0 )); + + xDocShRef->DoClose(); +} + void SdImportTest::testTdf114913() { sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc("sd/qa/unit/data/pptx/tdf114913.pptx"), PPTX); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits