Kaydet (Commit) 4cbc41bc authored tarafından Miklos Vajna's avatar Miklos Vajna

bnc#779642 VML import: handle drawinglayer rectangle char spacing

Change-Id: I79fa72c9235682030d23a03fdb0c7c40370c4a8a
üst 870a2394
...@@ -54,6 +54,7 @@ struct OOX_DLLPUBLIC TextFontModel ...@@ -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 @@ ...@@ -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 ...@@ -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) ...@@ -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;
} }
} }
......
...@@ -132,6 +132,7 @@ public: ...@@ -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() ...@@ -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() ...@@ -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();
......
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