diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-01-28 17:52:40 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-01-28 20:39:27 +0000 |
commit | 8f1a1092d47947847e1d888b0284e8364c663d1f (patch) | |
tree | 12cd9177ea41431e2a2c8d5ab811a7fd1cb25a3a | |
parent | bc01f53028f23d78c2c92ede87ee71f79433e4f0 (diff) |
tdf#97371 DOCX import: fix text covered by shape
Regression from commit 358666e4204364ce915ee95372dc6f2fca545253
(tdf#90153 DOCX import: fix default sw TextFrame roundtrip, 2015-09-28),
the problem was that at the moment SwTextBoxHelper::syncProperty()
doesn't handle an AnchorType at-para -> at-char transition, so the
importer shouldn't do that for TextBoxes till sw core gets extended to
support the scenario.
Change-Id: I8308bfd306672bc68984fbf019767c174130e18d
Reviewed-on: https://gerrit.libreoffice.org/21885
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
-rw-r--r-- | sw/CppunitTest_sw_ooxmlimport.mk | 1 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlimport/data/tdf97371.docx | bin | 0 -> 18800 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 15 | ||||
-rw-r--r-- | writerfilter/source/dmapper/GraphicImport.cxx | 7 |
4 files changed, 22 insertions, 1 deletions
diff --git a/sw/CppunitTest_sw_ooxmlimport.mk b/sw/CppunitTest_sw_ooxmlimport.mk index 4074255a7cf3..dbcead9598c3 100644 --- a/sw/CppunitTest_sw_ooxmlimport.mk +++ b/sw/CppunitTest_sw_ooxmlimport.mk @@ -27,6 +27,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sw_ooxmlimport, \ sw \ tl \ vcl \ + svxcore \ $(gb_UWINAPI) \ )) diff --git a/sw/qa/extras/ooxmlimport/data/tdf97371.docx b/sw/qa/extras/ooxmlimport/data/tdf97371.docx Binary files differnew file mode 100644 index 000000000000..87e67ddf877b --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/tdf97371.docx diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx index 14ddf51297cc..2fe18f889cc5 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx @@ -74,10 +74,12 @@ #include <comphelper/sequenceashashmap.hxx> #include <com/sun/star/text/GraphicCrop.hpp> #include <swtypes.hxx> +#include <drawdoc.hxx> #include <tools/datetimeutils.hxx> #include <oox/drawingml/drawingmltypes.hxx> #include <unotools/streamwrap.hxx> #include <comphelper/propertysequence.hxx> +#include <svx/svdpage.hxx> #include <com/sun/star/drawing/HomogenMatrix3.hpp> #include <bordertest.hxx> @@ -3064,6 +3066,19 @@ DECLARE_OOXMLIMPORT_TEST(testTdf95213, "tdf95213.docx") CPPUNIT_ASSERT_EQUAL(awt::FontWeight::NORMAL, getProperty<float>(xStyle, "CharWeight")); } +DECLARE_OOXMLIMPORT_TEST(testTdf97371, "tdf97371.docx") +{ + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0); + SdrObject* pShape = pPage->GetObj(0); + SdrObject* pTextBox = pPage->GetObj(1); + long nDiff = std::abs(pShape->GetSnapRect().Top() - pTextBox->GetSnapRect().Top()); + // The top of the two shapes were 410 and 3951, now it should be 3950 and 3951. + CPPUNIT_ASSERT(nDiff < 10); +} + // base class to supply a helper method for testHFLinkToPrev class testHFBase : public Test { diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index a9d3225662ff..735687d7d3ee 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -805,8 +805,13 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue) // This needs to be AT_PARAGRAPH by default and not AT_CHARACTER, otherwise shape will move when the user inserts a new paragraph. text::TextContentAnchorType eAnchorType = text::TextContentAnchorType_AT_PARAGRAPH; - if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE) + + // Avoid setting AnchorType for TextBoxes till SwTextBoxHelper::syncProperty() doesn't handle transition. + bool bTextBox = false; + xShapeProps->getPropertyValue("TextBox") >>= bTextBox; + if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE && !bTextBox) eAnchorType = text::TextContentAnchorType_AT_CHARACTER; + xShapeProps->setPropertyValue("AnchorType", uno::makeAny(eAnchorType)); //only the position orientation is handled in applyPosition() |