diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2024-09-05 14:26:07 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2024-09-05 16:17:57 +0200 |
commit | 295e1039649de030babf3ac9235cc80f9b9ca33c (patch) | |
tree | 9cf1b12f0af8d57d7e8db943eda034c6266e76d5 /svx | |
parent | 0255283974894f5ad9ba92c3a52912657ed4bdf6 (diff) |
tdf#161724: Revert "tdf#153008 svx: impl crop for stretched bitmap fill"
This reverts commit c30c1d12f283e75fdcc5bb508a79a9d33a431d28.
it even broke the original sample file reported in tdf#153008
See https://bug-attachments.documentfoundation.org/attachment.cgi?id=196248
The original issue was reported in tdf#95165 but it doesn't work
in all cases, making it much worse in some cases where images
become very stretched
Reverting for now, specially towards libreoffice-24-8 and
libreoffice-24-8-1
Change-Id: Ib94d2784d701d37853ce9b17135b36f26a5c084b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172913
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Diffstat (limited to 'svx')
-rw-r--r-- | svx/qa/unit/data/tdf153008_crop_stretched_bitmap.pptx | bin | 37834 -> 0 bytes | |||
-rw-r--r-- | svx/qa/unit/svdraw.cxx | 68 | ||||
-rw-r--r-- | svx/source/customshapes/EnhancedCustomShape2d.cxx | 27 |
3 files changed, 3 insertions, 92 deletions
diff --git a/svx/qa/unit/data/tdf153008_crop_stretched_bitmap.pptx b/svx/qa/unit/data/tdf153008_crop_stretched_bitmap.pptx Binary files differdeleted file mode 100644 index 453b81fa006a..000000000000 --- a/svx/qa/unit/data/tdf153008_crop_stretched_bitmap.pptx +++ /dev/null diff --git a/svx/qa/unit/svdraw.cxx b/svx/qa/unit/svdraw.cxx index 450874b00e07..ac124794a171 100644 --- a/svx/qa/unit/svdraw.cxx +++ b/svx/qa/unit/svdraw.cxx @@ -52,17 +52,16 @@ public: } protected: - SdrPage* getFirstDrawPageWithAssert(sal_Int32 nPageIndex = 0); + SdrPage* getFirstDrawPageWithAssert(); }; -SdrPage* SvdrawTest::getFirstDrawPageWithAssert(sal_Int32 nPageIndex /* = 0*/) +SdrPage* SvdrawTest::getFirstDrawPageWithAssert() { uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(mxComponent, uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(xDrawPagesSupplier.is()); uno::Reference<drawing::XDrawPages> xDrawPages(xDrawPagesSupplier->getDrawPages()); - uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPages->getByIndex(nPageIndex), - uno::UNO_QUERY_THROW); + uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPages->getByIndex(0), uno::UNO_QUERY_THROW); CPPUNIT_ASSERT(xDrawPage.is()); auto pDrawPage = dynamic_cast<SvxDrawPage*>(xDrawPage.get()); @@ -466,67 +465,6 @@ CPPUNIT_TEST_FIXTURE(SvdrawTest, testTdf148000_CurvedTextWidth) } } -CPPUNIT_TEST_FIXTURE(SvdrawTest, testTdf153008_CropStretchedBitmapFill) -{ - loadFromFile(u"tdf153008_crop_stretched_bitmap.pptx"); - - SdrPage* pSdrPage = getFirstDrawPageWithAssert(); - - xmlDocUniquePtr pXmlDoc = lcl_dumpAndParseFirstObjectWithAssert(pSdrPage); - - // Load Polygon size - sal_Int16 nPolyHeight = getXPath(pXmlDoc, "//mask/polypolygon"_ostr, "height"_ostr).toInt32(); - sal_Int16 nPolyWidth = getXPath(pXmlDoc, "//mask/polypolygon"_ostr, "width"_ostr).toInt32(); - // polygon position is nearly 0,0 - // Load Bitmap coordinates (from transformation matrix) - sal_Int16 nBmpPosX = getXPath(pXmlDoc, "//bitmap"_ostr, "xy13"_ostr).toInt32(); - sal_Int16 nBmpPosY = getXPath(pXmlDoc, "//bitmap"_ostr, "xy23"_ostr).toInt32(); - sal_Int16 nBmpWidth = getXPath(pXmlDoc, "//bitmap"_ostr, "xy11"_ostr).toInt32(); - sal_Int16 nBmpHeight = getXPath(pXmlDoc, "//bitmap"_ostr, "xy22"_ostr).toInt32(); - - // The Bitmap should start nearly in the middle of the polygon. - // because of rounding errors we tolerate 2% difference - // Before the fix, the bitmap was always stretched to the whole polygon, - // that means they had the same size, and position. - CPPUNIT_ASSERT_DOUBLES_EQUAL(nPolyWidth / 2, nBmpPosX, nPolyWidth / 50); - CPPUNIT_ASSERT_DOUBLES_EQUAL(nPolyHeight / 2, nBmpPosY, nPolyHeight / 50); - // And should have 1/2 width, and 3/8 height of the polygon. - CPPUNIT_ASSERT_DOUBLES_EQUAL(nPolyWidth / 2, nBmpWidth, nPolyWidth / 50); - CPPUNIT_ASSERT_DOUBLES_EQUAL(nPolyHeight * 3 / 8, nBmpHeight, nPolyHeight / 50); -} - -CPPUNIT_TEST_FIXTURE(SvdrawTest, testTdf153008_CropStretchedBitmapFillNegativePosition) -{ - loadFromFile(u"tdf153008_crop_stretched_bitmap.pptx"); - - // get the 2. page - SdrPage* pSdrPage = getFirstDrawPageWithAssert(1); - - xmlDocUniquePtr pXmlDoc = lcl_dumpAndParseFirstObjectWithAssert(pSdrPage); - - // Load Polygon size - sal_Int16 nPolyHeight = getXPath(pXmlDoc, "//mask/polypolygon"_ostr, "height"_ostr).toInt32(); - sal_Int16 nPolyWidth = getXPath(pXmlDoc, "//mask/polypolygon"_ostr, "width"_ostr).toInt32(); - // polygon position is nearly 0,0 - // Load Bitmap coordinates (from transformation matrix) - sal_Int16 nBmpPosX = getXPath(pXmlDoc, "//bitmap"_ostr, "xy13"_ostr).toInt32(); - sal_Int16 nBmpPosY = getXPath(pXmlDoc, "//bitmap"_ostr, "xy23"_ostr).toInt32(); - sal_Int16 nBmpWidth = getXPath(pXmlDoc, "//bitmap"_ostr, "xy11"_ostr).toInt32(); - sal_Int16 nBmpHeight = getXPath(pXmlDoc, "//bitmap"_ostr, "xy22"_ostr).toInt32(); - - // The Bitmap should start before the polygon. - // At x direction it should start left from the polygon with 3/8 polygon width - // At y direction it should start up from the polygon with 3/16 polygon height - // Before the fix, negative numbers overflowed to big positive number, - // so the bitmap was moved to a far away place where it was not visible - // because of rounding errors we tolerate 2% difference - CPPUNIT_ASSERT_DOUBLES_EQUAL(-nPolyWidth * 3 / 8, nBmpPosX, nPolyWidth / 50); - CPPUNIT_ASSERT_DOUBLES_EQUAL(-nPolyHeight * 3 / 16, nBmpPosY, nPolyHeight / 50); - // And should have 3/2 width, and 1/1 height of the polygon. - CPPUNIT_ASSERT_DOUBLES_EQUAL(nPolyWidth * 3 / 2, nBmpWidth, nPolyWidth / 50); - CPPUNIT_ASSERT_DOUBLES_EQUAL(nPolyHeight, nBmpHeight, nPolyHeight / 50); -} - CPPUNIT_TEST_FIXTURE(SvdrawTest, testSurfaceMetal) { loadFromFile(u"tdf140321_metal.odp"); diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx index 1a02bd5bd05a..644eee59dad7 100644 --- a/svx/source/customshapes/EnhancedCustomShape2d.cxx +++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx @@ -43,10 +43,6 @@ #include <svx/xbtmpit.hxx> #include <svx/xhatch.hxx> #include <svx/sdshitm.hxx> -#include <svx/xflboxy.hxx> -#include <svx/xflbmsxy.hxx> -#include <svx/sdgcpitm.hxx> -#include <svx/xflbstit.hxx> #include <comphelper/configuration.hxx> #include <com/sun/star/awt/Size.hpp> #include <com/sun/star/drawing/EnhancedCustomShapeParameterType.hpp> @@ -2639,29 +2635,6 @@ void EnhancedCustomShape2d::CreateSubPath( SfxItemSet aTempSet(*this); aTempSet.Put(makeSdrShadowItem(false)); aTempSet.Put(XLineStyleItem(drawing::LineStyle_NONE)); - - // tdf#153008 If it is a stretched bitmap, with crop, - // then set crop data into PosOffset and BmpSize - // so it can be used at createFillGraphicAttribute to crop the image - if (aTempSet.HasItem(SDRATTR_GRAFCROP) - && aTempSet.HasItem(XATTR_FILLBITMAP) - && aTempSet.HasItem(XATTR_FILLBMP_STRETCH) - && aTempSet.Get(XATTR_FILLBMP_STRETCH).GetValue()) - { - const SdrGrafCropItem& rCrop = aTempSet.Get(SDRATTR_GRAFCROP); - const Size& aBmpSize - = aTempSet.Get(XATTR_FILLBITMAP).GetGraphicObject().GetPrefSize(); - - aTempSet.Put(XFillBmpPosOffsetXItem(rCrop.GetLeft() * 100 / aBmpSize.Width())); - aTempSet.Put(XFillBmpPosOffsetYItem(rCrop.GetTop() * 100 / aBmpSize.Height())); - aTempSet.Put( - XFillBmpSizeXItem((aBmpSize.Width() - rCrop.GetLeft() - rCrop.GetRight()) - * pFill->GetGeoRect().GetWidth() / aBmpSize.Width())); - aTempSet.Put( - XFillBmpSizeYItem((aBmpSize.Height() - rCrop.GetTop() - rCrop.GetBottom()) - * pFill->GetGeoRect().GetHeight() / aBmpSize.Height())); - } - pFill->SetMergedItemSet(aTempSet); rObjectList.push_back(std::pair< rtl::Reference<SdrPathObj>, double >(std::move(pFill), dBrightness)); } |