summaryrefslogtreecommitdiff
path: root/svx/qa
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-01-06 10:23:44 +0100
committerMiklos Vajna <vmiklos@collabora.com>2021-01-06 12:23:59 +0100
commit65e2ef43f186164729e1cc071b805bc1a7125cfe (patch)
tree277c3c561701571ba71050d744f72841e8ec3ffa /svx/qa
parentc921f9bd64187823af2356d7a8ceb77444c17219 (diff)
tdf#134288 svx: fix rendering of text on a zero-width shape
We have conflicting requirements here: on one hand, the shape is zero width, so the text area is also zero. On the other hand, we put some text on the shape, which should be visible. The result was that the left/right text margin (2x250 mm100) was counted as part of the text area, so we put a few (but not 1) characters / line for zero width. Fix this to be PowerPoint-compatible: as the width decreases, we break the text up to more and more lines, but if the width is 0, then we don't break it up at all. An alternative would be to do this later in SdrTextObj::impDecomposeBlockTextPrimitive(), but there we no longer know the width is really 0, because the text margins and some small increase (+1 to be an inclusive range, +1 to have a non-zero scale) is already added to the original width. Change-Id: Ieaa3e726bc5d37983b6221452e14f01db315f790 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108835 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'svx/qa')
-rw-r--r--svx/qa/unit/data/0-width-text-wrap.pptxbin0 -> 26504 bytes
-rw-r--r--svx/qa/unit/sdr.cxx51
2 files changed, 40 insertions, 11 deletions
diff --git a/svx/qa/unit/data/0-width-text-wrap.pptx b/svx/qa/unit/data/0-width-text-wrap.pptx
new file mode 100644
index 000000000000..17349924d89b
--- /dev/null
+++ b/svx/qa/unit/data/0-width-text-wrap.pptx
Binary files differ
diff --git a/svx/qa/unit/sdr.cxx b/svx/qa/unit/sdr.cxx
index 49f4baa7182c..f6eb74488797 100644
--- a/svx/qa/unit/sdr.cxx
+++ b/svx/qa/unit/sdr.cxx
@@ -51,19 +51,14 @@ public:
test::BootstrapFixture::tearDown();
}
uno::Reference<lang::XComponent>& getComponent() { return mxComponent; }
+
+ drawinglayer::primitive2d::Primitive2DContainer
+ renderPageToPrimitives(const uno::Reference<drawing::XDrawPage>& xDrawPage);
};
-CPPUNIT_TEST_FIXTURE(SdrTest, testShadowScaleOrigin)
+drawinglayer::primitive2d::Primitive2DContainer
+SdrTest::renderPageToPrimitives(const uno::Reference<drawing::XDrawPage>& xDrawPage)
{
- // Load a document containing a custom shape.
- test::Directories aDirectories;
- OUString aURL = aDirectories.getURLFromSrc(u"svx/qa/unit/data/shadow-scale-origin.pptx");
- getComponent() = loadFromDesktop(aURL);
- uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
- uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
- uno::UNO_QUERY);
-
- // Render it.
auto pDrawPage = dynamic_cast<SvxDrawPage*>(xDrawPage.get());
CPPUNIT_ASSERT(pDrawPage);
SdrPage* pSdrPage = pDrawPage->GetSdrPage();
@@ -73,8 +68,20 @@ CPPUNIT_TEST_FIXTURE(SdrTest, testShadowScaleOrigin)
const sdr::contact::ViewObjectContact& rDrawPageVOContact
= pSdrPage->GetViewContact().GetViewObjectContact(aObjectContact);
sdr::contact::DisplayInfo aDisplayInfo;
+ return rDrawPageVOContact.getPrimitive2DSequenceHierarchy(aDisplayInfo);
+}
+
+CPPUNIT_TEST_FIXTURE(SdrTest, testShadowScaleOrigin)
+{
+ // Load a document containing a custom shape.
+ test::Directories aDirectories;
+ OUString aURL = aDirectories.getURLFromSrc(u"svx/qa/unit/data/shadow-scale-origin.pptx");
+ getComponent() = loadFromDesktop(aURL);
+ uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
+ uno::UNO_QUERY);
drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence
- = rDrawPageVOContact.getPrimitive2DSequenceHierarchy(aDisplayInfo);
+ = renderPageToPrimitives(xDrawPage);
// Examine the created primitives.
drawinglayer::Primitive2dXmlDump aDumper;
@@ -89,6 +96,28 @@ CPPUNIT_TEST_FIXTURE(SdrTest, testShadowScaleOrigin)
CPPUNIT_ASSERT_EQUAL(-705., std::round(fShadowX));
CPPUNIT_ASSERT_EQUAL(-685., std::round(fShadowY));
}
+
+CPPUNIT_TEST_FIXTURE(SdrTest, testZeroWidthTextWrap)
+{
+ // Load a document containing a 0-width shape with text.
+ test::Directories aDirectories;
+ OUString aURL = aDirectories.getURLFromSrc(u"svx/qa/unit/data/0-width-text-wrap.pptx");
+ getComponent() = loadFromDesktop(aURL);
+ uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(getComponent(), uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPagesSupplier->getDrawPages()->getByIndex(0),
+ uno::UNO_QUERY);
+ drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence
+ = renderPageToPrimitives(xDrawPage);
+
+ // Examine the created primitives.
+ drawinglayer::Primitive2dXmlDump aDumper;
+ xmlDocUniquePtr pDocument = aDumper.dumpAndParse(xPrimitiveSequence);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 12
+ // i.e. the text on the only shape on the slide had 12 lines, not a single one.
+ assertXPath(pDocument, "//textsimpleportion", 1);
+}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */