summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2019-06-06 21:32:07 +0200
committerMiklos Vajna <vmiklos@collabora.com>2019-06-07 09:05:08 +0200
commit9c945cdbe170104cbacafa2c37babec5210b9ca2 (patch)
treedffb692486be6b53549a6a3c45dfd33b9c91da55
parent8d16f406e62854df093a7c44c82dff19b0dda130 (diff)
sw btlr writing mode: DOCX drawingML import for fly frames
By using the now working btlr direction of the underlying fly frame, instead of the character-level workaround. Change-Id: I3024e3348a30c72f461032b03b88c210f25eb75a Reviewed-on: https://gerrit.libreoffice.org/73628 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
-rw-r--r--sw/ooxmlexport_setup.mk1
-rw-r--r--sw/qa/extras/ooxmlexport/data/btlr-textbox.docxbin0 -> 15965 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport13.cxx18
-rw-r--r--sw/source/core/doc/textboxhelper.cxx26
4 files changed, 22 insertions, 23 deletions
diff --git a/sw/ooxmlexport_setup.mk b/sw/ooxmlexport_setup.mk
index 9d3c13325098..c482ef40ce6f 100644
--- a/sw/ooxmlexport_setup.mk
+++ b/sw/ooxmlexport_setup.mk
@@ -16,6 +16,7 @@ define sw_ooxmlexport_libraries
editeng \
sal \
sfx \
+ svl \
sw \
test \
tl \
diff --git a/sw/qa/extras/ooxmlexport/data/btlr-textbox.docx b/sw/qa/extras/ooxmlexport/data/btlr-textbox.docx
new file mode 100644
index 000000000000..181d305eac95
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/btlr-textbox.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index e392644f0de3..c754acafc9ed 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -13,9 +13,11 @@
#include <com/sun/star/text/WritingMode2.hpp>
#include <com/sun/star/drawing/XControlShape.hpp>
#include <com/sun/star/style/ParagraphAdjust.hpp>
+#include <editeng/frmdiritem.hxx>
#include <IDocumentSettingAccess.hxx>
#include <editsh.hxx>
+#include <frmatr.hxx>
class Test : public SwModelTestBase
{
@@ -75,6 +77,22 @@ DECLARE_OOXMLEXPORT_TEST(testTbrlTextbox, "tbrl-textbox.docx")
aGeometry["TextPreRotateAngle"].get<sal_Int32>());
}
+DECLARE_OOXMLEXPORT_TEST(testBtlrShape, "btlr-textbox.docx")
+{
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ const SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rFormats.size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(RES_DRAWFRMFMT), rFormats[0]->Which());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(RES_FLYFRMFMT), rFormats[1]->Which());
+ // Without the accompanying fix in place, this test would have failed with 'Expected: 5, Actual:
+ // 4', i.e. the textbox inherited its writing direction instead of having an explicit btlr
+ // value.
+ CPPUNIT_ASSERT_EQUAL(SvxFrameDirection::Vertical_LR_BT,
+ rFormats[1]->GetAttrSet().GetFrameDir().GetValue());
+}
+
DECLARE_OOXMLEXPORT_TEST(testTdf124637_sectionMargin, "tdf124637_sectionMargin.docx")
{
uno::Reference<text::XTextSectionsSupplier> xTextSectionsSupplier(mxComponent, uno::UNO_QUERY);
diff --git a/sw/source/core/doc/textboxhelper.cxx b/sw/source/core/doc/textboxhelper.cxx
index 532f1ea9f00f..f729e4e44afd 100644
--- a/sw/source/core/doc/textboxhelper.cxx
+++ b/sw/source/core/doc/textboxhelper.cxx
@@ -359,35 +359,15 @@ void SwTextBoxHelper::syncProperty(SwFrameFormat* pShape, const OUString& rPrope
if (it != aCustomShapeGeometry.end())
{
auto nTextPreRotateAngle = it->second.get<sal_Int32>();
- if (nTextPreRotateAngle == -270)
- {
- // That would be the btLr text direction which we don't support at a frame level, so
- // do it at a character level.
- const SwNodeIndex* pNodeIndex = pFormat->GetContent().GetContentIdx();
- if (!pNodeIndex)
- return;
-
- SwPaM aPaM(*pFormat->GetDoc()->GetNodes()[pNodeIndex->GetIndex() + 1], 0);
- aPaM.SetMark();
- if (SwTextNode* pMark
- = pFormat->GetDoc()
- ->GetNodes()[pNodeIndex->GetNode().EndOfSectionIndex() - 1]
- ->GetTextNode())
- {
- aPaM.GetMark()->nNode = *pMark;
- aPaM.GetMark()->nContent.Assign(pMark, pMark->GetText().getLength());
- SvxCharRotateItem aItem(900, false, RES_CHRATR_ROTATE);
- pFormat->GetDoc()->getIDocumentContentOperations().InsertPoolItem(aPaM, aItem);
- }
- return;
- }
-
sal_Int16 nDirection = 0;
switch (nTextPreRotateAngle)
{
case -90:
nDirection = text::WritingMode2::TB_RL;
break;
+ case -270:
+ nDirection = text::WritingMode2::BT_LR;
+ break;
}
if (nDirection)