Kaydet (Commit) 9c945cdb authored tarafından Miklos Vajna's avatar Miklos Vajna

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: 's avatarMiklos Vajna <vmiklos@collabora.com>
üst 8d16f406
...@@ -16,6 +16,7 @@ define sw_ooxmlexport_libraries ...@@ -16,6 +16,7 @@ define sw_ooxmlexport_libraries
editeng \ editeng \
sal \ sal \
sfx \ sfx \
svl \
sw \ sw \
test \ test \
tl \ tl \
......
...@@ -13,9 +13,11 @@ ...@@ -13,9 +13,11 @@
#include <com/sun/star/text/WritingMode2.hpp> #include <com/sun/star/text/WritingMode2.hpp>
#include <com/sun/star/drawing/XControlShape.hpp> #include <com/sun/star/drawing/XControlShape.hpp>
#include <com/sun/star/style/ParagraphAdjust.hpp> #include <com/sun/star/style/ParagraphAdjust.hpp>
#include <editeng/frmdiritem.hxx>
#include <IDocumentSettingAccess.hxx> #include <IDocumentSettingAccess.hxx>
#include <editsh.hxx> #include <editsh.hxx>
#include <frmatr.hxx>
class Test : public SwModelTestBase class Test : public SwModelTestBase
{ {
...@@ -75,6 +77,22 @@ DECLARE_OOXMLEXPORT_TEST(testTbrlTextbox, "tbrl-textbox.docx") ...@@ -75,6 +77,22 @@ DECLARE_OOXMLEXPORT_TEST(testTbrlTextbox, "tbrl-textbox.docx")
aGeometry["TextPreRotateAngle"].get<sal_Int32>()); 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") DECLARE_OOXMLEXPORT_TEST(testTdf124637_sectionMargin, "tdf124637_sectionMargin.docx")
{ {
uno::Reference<text::XTextSectionsSupplier> xTextSectionsSupplier(mxComponent, uno::UNO_QUERY); uno::Reference<text::XTextSectionsSupplier> xTextSectionsSupplier(mxComponent, uno::UNO_QUERY);
......
...@@ -359,35 +359,15 @@ void SwTextBoxHelper::syncProperty(SwFrameFormat* pShape, const OUString& rPrope ...@@ -359,35 +359,15 @@ void SwTextBoxHelper::syncProperty(SwFrameFormat* pShape, const OUString& rPrope
if (it != aCustomShapeGeometry.end()) if (it != aCustomShapeGeometry.end())
{ {
auto nTextPreRotateAngle = it->second.get<sal_Int32>(); 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; sal_Int16 nDirection = 0;
switch (nTextPreRotateAngle) switch (nTextPreRotateAngle)
{ {
case -90: case -90:
nDirection = text::WritingMode2::TB_RL; nDirection = text::WritingMode2::TB_RL;
break; break;
case -270:
nDirection = text::WritingMode2::BT_LR;
break;
} }
if (nDirection) if (nDirection)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment