From cde8bf6bcf3b361bd107276efe14b2a221826399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Vajngerl?= Date: Wed, 16 Oct 2024 09:30:11 +0200 Subject: [PATCH] slideshow: fix para. rendering when using SdrBlockTextPrimitive2D If using an empty ViewInformation, it is possible that the prim. decomposition is redone, when a different ViewInformation is used. This removes all visibility flags for the paragraphs, so the whole text is rendered. This fixes the issue by using the same instance of the ViewInformation that is also used later for rendering the primitives to the VirtualDevice, so the buffered decomposition is used. Also a test is added - it checks the hash of the buffer, which should be different for all 3 layers. For this the tostring has to be moved to the common hash.hxx, so we can reuse it in out tests. Includes: Author: Marco Cecchetti AuthorDate: Wed Mar 5 23:15:33 2025 +0100 slideshow: regression: layer with paragraph has not the expected content Change-Id: I850c6922cdd358eee35074fbff04f238994b2c76 Otherwise 'make -C sd -sr CppunitTest_sd_tiledrendering CPPUNIT_TEST_NAME=testSlideshowLayeredRendering_Animation_DifferentKindOfTextBox' would fail. Change-Id: I4c951215a52e302d3b7b60a30c1b995002e53a4b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182833 Tested-by: Jenkins Reviewed-by: Miklos Vajna --- .../source/processor2d/baseprocessor2d.cxx | 3 +- .../processor2d/vclpixelprocessor2d.cxx | 4 - ...Test_Animations_DifferentKindOfTextBox.odp | Bin 0 -> 39016 bytes sd/qa/unit/tiledrendering/tiledrendering.cxx | 86 ++++++++++++++++++ sd/source/ui/tools/SlideshowLayerRenderer.cxx | 25 +++-- 5 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 sd/qa/unit/tiledrendering/data/SlideRenderingTest_Animations_DifferentKindOfTextBox.odp diff --git a/drawinglayer/source/processor2d/baseprocessor2d.cxx b/drawinglayer/source/processor2d/baseprocessor2d.cxx index 437faa3a5016..8209ca00f0fb 100644 --- a/drawinglayer/source/processor2d/baseprocessor2d.cxx +++ b/drawinglayer/source/processor2d/baseprocessor2d.cxx @@ -62,7 +62,8 @@ namespace drawinglayer::processor2d { for (const primitive2d::Primitive2DReference& rCandidate : rSource) { - if (rCandidate) + // Skip, if not visible + if (rCandidate && rCandidate->getVisible()) processBasePrimitive2D(*rCandidate); } } diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 98182a43a758..3264cdfc2a4a 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -192,10 +192,6 @@ bool VclPixelProcessor2D::tryDrawPolygonStrokePrimitive2DDirect( void VclPixelProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) { - // Skip, if not visible - if (!rCandidate.getVisible()) - return; - switch (rCandidate.getPrimitive2DID()) { case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D: diff --git a/sd/qa/unit/tiledrendering/data/SlideRenderingTest_Animations_DifferentKindOfTextBox.odp b/sd/qa/unit/tiledrendering/data/SlideRenderingTest_Animations_DifferentKindOfTextBox.odp new file mode 100644 index 0000000000000000000000000000000000000000..47777662805fb84248f74decd7490efbef6e41db GIT binary patch literal 39016 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 literal 0 HcmV?d00001 diff --git a/sd/qa/unit/tiledrendering/tiledrendering.cxx b/sd/qa/unit/tiledrendering/tiledrendering.cxx index 01d987433404..a6c3714a3b75 100644 --- a/sd/qa/unit/tiledrendering/tiledrendering.cxx +++ b/sd/qa/unit/tiledrendering/tiledrendering.cxx @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -3422,6 +3423,91 @@ CPPUNIT_TEST_FIXTURE(SdTiledRenderingTest, testSlideshowLayeredRendering_Animati pXImpressDocument->postSlideshowCleanup(); } +namespace +{ +template +bool is_unique(std::vector vec) +{ + std::sort(vec.begin(), vec.end()); + return std::unique(vec.begin(), vec.end()) == vec.end(); +} +} + +CPPUNIT_TEST_FIXTURE(SdTiledRenderingTest, testSlideshowLayeredRendering_Animation_DifferentKindOfTextBox) +{ + SdXImpressDocument* pXImpressDocument = createDoc("SlideRenderingTest_Animations_DifferentKindOfTextBox.odp"); + pXImpressDocument->initializeForTiledRendering(uno::Sequence()); + sd::ViewShell* pViewShell = pXImpressDocument->GetDocShell()->GetViewShell(); + CPPUNIT_ASSERT(pViewShell); + SdPage* pPage = pViewShell->GetActualPage(); + CPPUNIT_ASSERT(pPage); + sal_Int32 nViewWidth = 2000; + sal_Int32 nViewHeight = 2000; + + std::string sHash = GetInterfaceHash(GetXDrawPageForSdrPage(pPage)); + CPPUNIT_ASSERT(pXImpressDocument->createSlideRenderer(sHash.c_str(), 0, nViewWidth, nViewHeight, true, true)); + CPPUNIT_ASSERT_EQUAL(2000, nViewWidth); + CPPUNIT_ASSERT_EQUAL(1500, nViewHeight); + + std::vector aHashes; + + { + std::vector pBuffer(nViewWidth * nViewHeight * 4); + bool bIsBitmapLayer = false; + OUString rJsonMsg; + double dScale = 1.0; + CPPUNIT_ASSERT(!pXImpressDocument->renderNextSlideLayer(pBuffer.data(), bIsBitmapLayer, dScale, rJsonMsg)); + + // Remember the hash of the buffer for uniqueness check + auto aBufferHash = comphelper::Hash::calculateHash(pBuffer.data(), pBuffer.size(), comphelper::HashType::SHA1); + aHashes.push_back(comphelper::hashToString(aBufferHash)); + + debugWriteImageToFile(1, pBuffer, nViewWidth, nViewHeight, rJsonMsg.toUtf8().getStr()); + } + + { + std::vector pBuffer(nViewWidth * nViewHeight * 4); + bool bIsBitmapLayer = false; + OUString rJsonMsg; + double dScale = 1.0; + CPPUNIT_ASSERT(!pXImpressDocument->renderNextSlideLayer(pBuffer.data(), bIsBitmapLayer, dScale, rJsonMsg)); + + // Remember the hash of the buffer for uniqueness check + auto aBufferHash = comphelper::Hash::calculateHash(pBuffer.data(), pBuffer.size(), comphelper::HashType::SHA1); + aHashes.push_back(comphelper::hashToString(aBufferHash)); + + debugWriteImageToFile(2, pBuffer, nViewWidth, nViewHeight, rJsonMsg.toUtf8().getStr()); + } + + { + std::vector pBuffer(nViewWidth * nViewHeight * 4); + bool bIsBitmapLayer = false; + OUString rJsonMsg; + double dScale = 1.0; + CPPUNIT_ASSERT(!pXImpressDocument->renderNextSlideLayer(pBuffer.data(), bIsBitmapLayer, dScale, rJsonMsg)); + + // Remember the hash of the buffer for uniqueness check + auto aBufferHash = comphelper::Hash::calculateHash(pBuffer.data(), pBuffer.size(), comphelper::HashType::SHA1); + aHashes.push_back(comphelper::hashToString(aBufferHash)); + + debugWriteImageToFile(3, pBuffer, nViewWidth, nViewHeight, rJsonMsg.toUtf8().getStr()); + } + + // check if all hashes are unique + CPPUNIT_ASSERT(is_unique(aHashes)); + + // Check we are done + { + std::vector pBuffer(nViewWidth * nViewHeight * 4); + bool bIsBitmapLayer = false; + OUString rJsonMsg; + double dScale = 1.0; + CPPUNIT_ASSERT(pXImpressDocument->renderNextSlideLayer(pBuffer.data(), bIsBitmapLayer, dScale, rJsonMsg)); + } + + pXImpressDocument->postSlideshowCleanup(); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sd/source/ui/tools/SlideshowLayerRenderer.cxx b/sd/source/ui/tools/SlideshowLayerRenderer.cxx index 143acfb5e668..3fb9160f6297 100644 --- a/sd/source/ui/tools/SlideshowLayerRenderer.cxx +++ b/sd/source/ui/tools/SlideshowLayerRenderer.cxx @@ -138,7 +138,8 @@ void changeBackground(drawinglayer::primitive2d::Primitive2DContainer const& rCo } drawinglayer::primitive2d::TextHierarchyBlockPrimitive2D* -findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer) +findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer, + drawinglayer::geometry::ViewInformation2D const& rViewInformation2D) { for (size_t i = 0; i < rContainer.size(); i++) { @@ -157,7 +158,8 @@ findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer) = dynamic_cast(pBasePrimitive); if (pGroupPrimitive) { - auto* pTextBlock = findTextBlock(pGroupPrimitive->getChildren()); + auto* pTextBlock + = findTextBlock(pGroupPrimitive->getChildren(), rViewInformation2D); if (pTextBlock) return pTextBlock; } @@ -169,9 +171,8 @@ findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer) { // try to decompose drawinglayer::primitive2d::Primitive2DContainer aPrimitiveContainer; - pBasePrimitive->get2DDecomposition(aPrimitiveContainer, - drawinglayer::geometry::ViewInformation2D()); - auto* pTextBlock = findTextBlock(aPrimitiveContainer); + pBasePrimitive->get2DDecomposition(aPrimitiveContainer, rViewInformation2D); + auto* pTextBlock = findTextBlock(aPrimitiveContainer, rViewInformation2D); if (pTextBlock) return pTextBlock; } @@ -181,9 +182,10 @@ findTextBlock(drawinglayer::primitive2d::Primitive2DContainer const& rContainer) } void modifyParagraphs(drawinglayer::primitive2d::Primitive2DContainer& rContainer, + drawinglayer::geometry::ViewInformation2D const& rViewInformation2D, std::deque const& rPreserveIndices, bool bRenderObject) { - auto* pTextBlock = findTextBlock(rContainer); + auto* pTextBlock = findTextBlock(rContainer, rViewInformation2D); if (pTextBlock) { @@ -243,6 +245,10 @@ public: return; SdrObject* pObject = rOriginal.GetViewContact().TryToGetSdrObject(); + + drawinglayer::geometry::ViewInformation2D const& rViewInformation2D + = rOriginal.GetObjectContact().getViewInformation2D(); + // Check if we are rendering an object that is valid to render (exists, and not empty) if (pObject == nullptr || pObject->IsEmptyPresObj()) return; @@ -338,7 +344,8 @@ public: if (bRenderOtherParagraphs) { - modifyParagraphs(rContainer, nOtherParagraphs, true); // render the object + modifyParagraphs(rContainer, rViewInformation2D, nOtherParagraphs, + true); // render the object mrRenderState.mnCurrentTargetParagraph = -1; } else @@ -348,8 +355,8 @@ public: std::deque aPreserveParagraphs{ nParagraph }; mrRenderState.mnCurrentTargetParagraph = nParagraph; - modifyParagraphs(rContainer, aPreserveParagraphs, - false); // render only the paragraphs + // render only the paragraphs + modifyParagraphs(rContainer, rViewInformation2D, aPreserveParagraphs, false); } }