diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2019-10-07 21:10:33 +0200 |
---|---|---|
committer | Michael Stahl <michael.stahl@cib.de> | 2019-10-09 16:32:31 +0200 |
commit | a89f71f7195881b75a933a925f845a9c6447f7a3 (patch) | |
tree | c38f72d8fcfd9861c87a9d095382795a3f54b86b /sw | |
parent | a5d32a59252c51c589d4ec223ba68eee5c9649f9 (diff) |
tdf#127825 DOCX import: fix handling for tbrl, auto-height and rel size shapes
Regression from commit ff17478e069cc82681df62514876c06365dd5cd6 (sw btlr
writing mode: implement DOCX shape import for tbrl, 2019-04-25), there
were two problems here:
1) Relative size currently only works properly for the lrtb direction,
so disable that during import till sw core is improved.
2) When SwFlyFrame::Format() auto-grows a text frame which is the
textbox of a shape, it needs to notify the shape about the physical size
of the frame, not the logical one. So going via the SwRectFnSet
abstraction is not correct in this case.
(cherry picked from commit 9c81d0a268cca4ff36eff94c0842361b9c0287ef)
Conflicts:
sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
Change-Id: Ie185c7415d90594434eac8f459630d6a3212328a
Reviewed-on: https://gerrit.libreoffice.org/80427
Tested-by: Jenkins
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
Diffstat (limited to 'sw')
-rw-r--r-- | sw/qa/extras/ooxmlimport/data/tdf127825.docx | bin | 0 -> 13297 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport2.cxx | 26 | ||||
-rw-r--r-- | sw/source/core/layout/fly.cxx | 2 |
3 files changed, 27 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlimport/data/tdf127825.docx b/sw/qa/extras/ooxmlimport/data/tdf127825.docx Binary files differnew file mode 100644 index 000000000000..2caf612fd811 --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/tdf127825.docx diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx index 99c6d5aaca51..3dd937ecbd2d 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx @@ -19,6 +19,8 @@ #include <com/sun/star/document/XEmbeddedObjectSupplier2.hpp> #include <com/sun/star/embed/Aspects.hpp> #include <com/sun/star/style/BreakType.hpp> +#include <sortedobjs.hxx> +#include <anchoredobject.hxx> class Test : public SwModelTestBase { @@ -407,6 +409,30 @@ DECLARE_OOXMLIMPORT_TEST(testTdf126114, "tdf126114.docx") CPPUNIT_ASSERT_EQUAL(7, getLength()); } +DECLARE_OOXMLIMPORT_TEST(testTdf127825, "tdf127825.docx") +{ + // The document has a shape with Japanese-style text in it. The shape has relative size and also + // has automatic height. + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell(); + CPPUNIT_ASSERT(pWrtShell); + SwRootFrame* pLayout = pWrtShell->GetLayout(); + CPPUNIT_ASSERT(pLayout); + SwFrame* pPage = pLayout->GetLower(); + CPPUNIT_ASSERT(pPage); + SwFrame* pBody = pPage->GetLower(); + CPPUNIT_ASSERT(pBody); + SwFrame* pText = pBody->GetLower(); + CPPUNIT_ASSERT(pText); + CPPUNIT_ASSERT(pText->GetDrawObjs()); + const SwSortedObjs& rDrawObjs = *pText->GetDrawObjs(); + CPPUNIT_ASSERT(rDrawObjs.size()); + + // Without the accompanying fix in place, this overlapped the footer area, not the body area. + CPPUNIT_ASSERT(rDrawObjs[0]->GetObjRect().IsOver(pBody->getFrameArea())); +} + DECLARE_OOXMLIMPORT_TEST(testTdf103345, "numbering-circle.docx") { uno::Reference<beans::XPropertySet> xPropertySet( diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx index a2193f24d654..1f566f373125 100644 --- a/sw/source/core/layout/fly.cxx +++ b/sw/source/core/layout/fly.cxx @@ -1273,7 +1273,7 @@ void SwFlyFrame::Format( vcl::RenderContext* /*pRenderContext*/, const SwBorderA if (SdrObjCustomShape* pCustomShape = dynamic_cast<SdrObjCustomShape*>( pShape) ) { // The shape is a customshape: then inform it about the calculated fly size. - Size aSize(aRectFnSet.GetWidth(getFrameArea()), aRectFnSet.GetHeight(getFrameArea())); + Size aSize(getFrameArea().Width(), getFrameArea().Height()); pCustomShape->SuggestTextFrameSize(aSize); // Do the calculations normally done after touching editeng text of the shape. pCustomShape->NbcSetOutlinerParaObjectForText(nullptr, nullptr); |