bnc#779642 VML import: handle drawinglayer rectangle char spacing
Change-Id: I79fa72c9235682030d23a03fdb0c7c40370c4a8a
This commit is contained in:
@@ -54,6 +54,7 @@ struct OOX_DLLPUBLIC TextFontModel
|
|||||||
OptValue< bool > mobBold;
|
OptValue< bool > mobBold;
|
||||||
OptValue< bool > mobItalic;
|
OptValue< bool > mobItalic;
|
||||||
OptValue< bool > mobStrikeout;
|
OptValue< bool > mobStrikeout;
|
||||||
|
OptValue<sal_Int32> monSpacing;
|
||||||
|
|
||||||
explicit TextFontModel();
|
explicit TextFontModel();
|
||||||
};
|
};
|
||||||
|
@@ -20,6 +20,7 @@
|
|||||||
#include "oox/vml/vmltextbox.hxx"
|
#include "oox/vml/vmltextbox.hxx"
|
||||||
|
|
||||||
#include <rtl/ustrbuf.hxx>
|
#include <rtl/ustrbuf.hxx>
|
||||||
|
#include <svx/unopage.hxx>
|
||||||
#include <com/sun/star/awt/FontWeight.hpp>
|
#include <com/sun/star/awt/FontWeight.hpp>
|
||||||
#include <com/sun/star/beans/XPropertySet.hpp>
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
||||||
#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
|
#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
|
||||||
@@ -92,6 +93,15 @@ void TextBox::convert(uno::Reference<drawing::XShape> xShape) const
|
|||||||
aPropertyValue.Value = uno::makeAny(double(rFont.monSize.get()) / 2.);
|
aPropertyValue.Value = uno::makeAny(double(rFont.monSize.get()) / 2.);
|
||||||
aPropVec.push_back(aPropertyValue);
|
aPropVec.push_back(aPropertyValue);
|
||||||
}
|
}
|
||||||
|
if (rFont.monSpacing.has())
|
||||||
|
{
|
||||||
|
aPropertyValue.Name = "CharKerning";
|
||||||
|
// Value is not converted to mm100: SvxKerningItem::PutValue() gets
|
||||||
|
// called with nMemberId = 0, so no mm100 -> twips conversion will
|
||||||
|
// be done there.
|
||||||
|
aPropertyValue.Value = uno::makeAny(sal_Int16(rFont.monSpacing.get()));
|
||||||
|
aPropVec.push_back(aPropertyValue);
|
||||||
|
}
|
||||||
if (rParagraph.moParaAdjust.has())
|
if (rParagraph.moParaAdjust.has())
|
||||||
{
|
{
|
||||||
style::ParagraphAdjust eAdjust = style::ParagraphAdjust_LEFT;
|
style::ParagraphAdjust eAdjust = style::ParagraphAdjust_LEFT;
|
||||||
|
@@ -132,6 +132,16 @@ void TextPortionContext::onStartElement(const AttributeList& rAttribs)
|
|||||||
case OOX_TOKEN(doc, color):
|
case OOX_TOKEN(doc, color):
|
||||||
maFont.moColor = rAttribs.getString( OOX_TOKEN(doc, val) );
|
maFont.moColor = rAttribs.getString( OOX_TOKEN(doc, val) );
|
||||||
break;
|
break;
|
||||||
|
case OOX_TOKEN(doc, spacing):
|
||||||
|
maFont.monSpacing = rAttribs.getInteger(OOX_TOKEN(doc, val));
|
||||||
|
break;
|
||||||
|
case OOX_TOKEN(doc, r):
|
||||||
|
case OOX_TOKEN(doc, rPr):
|
||||||
|
case OOX_TOKEN(doc, t):
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SAL_INFO("oox", "unhandled: 0x" << std::hex<< getCurrentElement());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx
Executable file
BIN
sw/qa/extras/ooxmlimport/data/groupshape-sdt.docx
Executable file
Binary file not shown.
@@ -132,6 +132,7 @@ public:
|
|||||||
void testTablePagebreak();
|
void testTablePagebreak();
|
||||||
void testFdo68607();
|
void testFdo68607();
|
||||||
void testVmlTextVerticalAdjust();
|
void testVmlTextVerticalAdjust();
|
||||||
|
void testGroupshapeSdt();
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE(Test);
|
CPPUNIT_TEST_SUITE(Test);
|
||||||
#if !defined(MACOSX) && !defined(WNT)
|
#if !defined(MACOSX) && !defined(WNT)
|
||||||
@@ -230,6 +231,7 @@ void Test::run()
|
|||||||
{"table-pagebreak.docx", &Test::testTablePagebreak},
|
{"table-pagebreak.docx", &Test::testTablePagebreak},
|
||||||
{"fdo68607.docx", &Test::testFdo68607},
|
{"fdo68607.docx", &Test::testFdo68607},
|
||||||
{"vml-text-vertical-adjust.docx", &Test::testVmlTextVerticalAdjust},
|
{"vml-text-vertical-adjust.docx", &Test::testVmlTextVerticalAdjust},
|
||||||
|
{"groupshape-sdt.docx", &Test::testGroupshapeSdt},
|
||||||
};
|
};
|
||||||
header();
|
header();
|
||||||
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
|
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
|
||||||
@@ -1551,6 +1553,20 @@ void Test::testVmlTextVerticalAdjust()
|
|||||||
CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_TOP, getProperty<drawing::TextVerticalAdjust>(xShape, "TextVerticalAdjust"));
|
CPPUNIT_ASSERT_EQUAL(drawing::TextVerticalAdjust_TOP, getProperty<drawing::TextVerticalAdjust>(xShape, "TextVerticalAdjust"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Test::testGroupshapeSdt()
|
||||||
|
{
|
||||||
|
// All problems here are due to the groupshape: we have a drawinglayer rectangle, not a writer textframe.
|
||||||
|
uno::Reference<drawing::XShapes> xOuterGroupShape(getShape(1), uno::UNO_QUERY);
|
||||||
|
uno::Reference<drawing::XShapes> xInnerGroupShape(xOuterGroupShape->getByIndex(0), uno::UNO_QUERY);
|
||||||
|
uno::Reference<text::XTextRange> xShape(xInnerGroupShape->getByIndex(0), uno::UNO_QUERY);
|
||||||
|
// Border distances were not implemented, this was 0.
|
||||||
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(1905), getProperty<sal_Int32>(xShape, "TextUpperDistance"));
|
||||||
|
// Sdt field result wasn't imported, this was "".
|
||||||
|
CPPUNIT_ASSERT_EQUAL(OUString("placeholder text"), xShape->getString());
|
||||||
|
// w:spacing was ignored in oox, this was 0.
|
||||||
|
CPPUNIT_ASSERT_EQUAL(sal_Int32(20), getProperty<sal_Int32>(getRun(getParagraphOfText(1, xShape->getText()), 1), "CharKerning"));
|
||||||
|
}
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
|
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
|
||||||
|
|
||||||
CPPUNIT_PLUGIN_IMPLEMENT();
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||||
|
Reference in New Issue
Block a user