summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/oox/drawingml/textfield.hxx3
-rw-r--r--include/oox/drawingml/textparagraph.hxx3
-rw-r--r--include/oox/drawingml/textrun.hxx3
-rw-r--r--oox/source/drawingml/textbody.cxx5
-rw-r--r--oox/source/drawingml/textfield.cxx3
-rw-r--r--oox/source/drawingml/textparagraph.cxx4
-rw-r--r--oox/source/drawingml/textrun.cxx6
-rwxr-xr-xsw/qa/extras/ooxmlimport/data/dml-charheight-default.docxbin0 -> 15770 bytes
-rw-r--r--sw/qa/extras/ooxmlimport/ooxmlimport.cxx8
9 files changed, 27 insertions, 8 deletions
diff --git a/include/oox/drawingml/textfield.hxx b/include/oox/drawingml/textfield.hxx
index e191c7dcafdb..4a2791836438 100644
--- a/include/oox/drawingml/textfield.hxx
+++ b/include/oox/drawingml/textfield.hxx
@@ -45,7 +45,8 @@ public:
const ::oox::core::XmlFilterBase& rFilterBase,
const ::com::sun::star::uno::Reference < ::com::sun::star::text::XText > & xText,
const ::com::sun::star::uno::Reference < ::com::sun::star::text::XTextCursor > &xAt,
- const TextCharacterProperties& rTextCharacterStyle ) const;
+ const TextCharacterProperties& rTextCharacterStyle,
+ float nDefaultCharHeight) const;
private:
TextParagraphProperties maTextParagraphProperties;
diff --git a/include/oox/drawingml/textparagraph.hxx b/include/oox/drawingml/textparagraph.hxx
index add0cef0ba4e..f100458ab07c 100644
--- a/include/oox/drawingml/textparagraph.hxx
+++ b/include/oox/drawingml/textparagraph.hxx
@@ -54,7 +54,8 @@ public:
const ::com::sun::star::uno::Reference < ::com::sun::star::text::XTextCursor > &xAt,
const TextCharacterProperties& rTextStyleProperties,
const TextListStyle& rTextListStyle,
- bool bFirst = false ) const;
+ bool bFirst = false,
+ float nDefaultCharHeight = 0) const;
private:
TextParagraphProperties maProperties;
diff --git a/include/oox/drawingml/textrun.hxx b/include/oox/drawingml/textrun.hxx
index 9c925f030ef5..5fec1a316db5 100644
--- a/include/oox/drawingml/textrun.hxx
+++ b/include/oox/drawingml/textrun.hxx
@@ -45,7 +45,8 @@ public:
const ::oox::core::XmlFilterBase& rFilterBase,
const ::com::sun::star::uno::Reference < ::com::sun::star::text::XText >& xText,
const ::com::sun::star::uno::Reference < ::com::sun::star::text::XTextCursor >& xAt,
- const TextCharacterProperties& rTextCharacterStyle ) const;
+ const TextCharacterProperties& rTextCharacterStyle,
+ float nDefaultCharHeight) const;
private:
OUString msText;
diff --git a/oox/source/drawingml/textbody.cxx b/oox/source/drawingml/textbody.cxx
index 3df764339779..c90e4826e6e0 100644
--- a/oox/source/drawingml/textbody.cxx
+++ b/oox/source/drawingml/textbody.cxx
@@ -20,6 +20,7 @@
#include "oox/drawingml/textbody.hxx"
#include <com/sun/star/text/XText.hpp>
#include <com/sun/star/text/XTextCursor.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
#include "oox/drawingml/textparagraph.hxx"
using namespace ::com::sun::star::uno;
@@ -63,8 +64,10 @@ void TextBody::insertAt(
aCombinedTextStyle.apply( *pMasterTextListStylePtr );
aCombinedTextStyle.apply( maTextListStyle );
+ Reference<css::beans::XPropertySet> xPropertySet(xAt, UNO_QUERY);
+ float nCharHeight = xPropertySet->getPropertyValue("CharHeight").get<float>();
for( TextParagraphVector::const_iterator aBeg = maParagraphs.begin(), aIt = aBeg, aEnd = maParagraphs.end(); aIt != aEnd; ++aIt )
- (*aIt)->insertAt( rFilterBase, xText, xAt, rTextStyleProperties, aCombinedTextStyle, aIt == aBeg );
+ (*aIt)->insertAt( rFilterBase, xText, xAt, rTextStyleProperties, aCombinedTextStyle, aIt == aBeg, nCharHeight );
}
bool TextBody::isEmpty()
diff --git a/oox/source/drawingml/textfield.cxx b/oox/source/drawingml/textfield.cxx
index 76d909b036ef..6006fea11309 100644
--- a/oox/source/drawingml/textfield.cxx
+++ b/oox/source/drawingml/textfield.cxx
@@ -132,7 +132,8 @@ sal_Int32 TextField::insertAt(
const ::oox::core::XmlFilterBase& rFilterBase,
const Reference < XText > & xText,
const Reference < XTextCursor > &xAt,
- const TextCharacterProperties& rTextCharacterStyle ) const
+ const TextCharacterProperties& rTextCharacterStyle,
+ float /*nDefaultCharHeight*/) const
{
sal_Int32 nCharHeight = 0;
try
diff --git a/oox/source/drawingml/textparagraph.cxx b/oox/source/drawingml/textparagraph.cxx
index 7bb719a1adf4..70108470df06 100644
--- a/oox/source/drawingml/textparagraph.cxx
+++ b/oox/source/drawingml/textparagraph.cxx
@@ -47,7 +47,7 @@ void TextParagraph::insertAt(
const Reference < XText > &xText,
const Reference < XTextCursor > &xAt,
const TextCharacterProperties& rTextStyleProperties,
- const TextListStyle& rTextListStyle, bool bFirst) const
+ const TextListStyle& rTextListStyle, bool bFirst, float nDefaultCharHeight) const
{
try {
sal_Int32 nParagraphSize = 0;
@@ -95,7 +95,7 @@ void TextParagraph::insertAt(
// This is currently applied to only empty runs
if( !nLen && ( ( aIt + 1 ) == aEnd ) )
(*aIt)->getTextCharacterProperties().assignUsed( maEndProperties );
- nCharHeight = std::max< sal_Int32 >( nCharHeight, (*aIt)->insertAt( rFilterBase, xText, xAt, aTextCharacterStyle ) );
+ nCharHeight = std::max< sal_Int32 >( nCharHeight, (*aIt)->insertAt( rFilterBase, xText, xAt, aTextCharacterStyle, nDefaultCharHeight ) );
nParagraphSize += nLen;
}
}
diff --git a/oox/source/drawingml/textrun.cxx b/oox/source/drawingml/textrun.cxx
index c4648c205d8d..1128918fd2aa 100644
--- a/oox/source/drawingml/textrun.cxx
+++ b/oox/source/drawingml/textrun.cxx
@@ -50,7 +50,8 @@ sal_Int32 TextRun::insertAt(
const ::oox::core::XmlFilterBase& rFilterBase,
const Reference < XText > & xText,
const Reference < XTextCursor > &xAt,
- const TextCharacterProperties& rTextCharacterStyle ) const
+ const TextCharacterProperties& rTextCharacterStyle,
+ float nDefaultCharHeight) const
{
sal_Int32 nCharHeight = 0;
try {
@@ -61,6 +62,9 @@ sal_Int32 TextRun::insertAt(
aTextCharacterProps.assignUsed( maTextCharacterProperties );
if ( aTextCharacterProps.moHeight.has() )
nCharHeight = aTextCharacterProps.moHeight.get();
+ else
+ // UNO API has the character height as float, DML has it as int, but in hundreds.
+ aTextCharacterProps.moHeight = static_cast<sal_Int32>(nDefaultCharHeight * 100);
aTextCharacterProps.pushToPropSet( aPropSet, rFilterBase );
if( maTextCharacterProperties.maHyperlinkPropertyMap.empty() )
diff --git a/sw/qa/extras/ooxmlimport/data/dml-charheight-default.docx b/sw/qa/extras/ooxmlimport/data/dml-charheight-default.docx
new file mode 100755
index 000000000000..0f22a87f0e29
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/dml-charheight-default.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 3b3a227c63d2..f1e7abd9e744 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -1756,6 +1756,14 @@ DECLARE_OOXMLIMPORT_TEST(testDMLGroupshapeSdt, "dml-groupshape-sdt.docx")
CPPUNIT_ASSERT_EQUAL(OUString("sdt and sdtContent inside groupshape"), uno::Reference<text::XTextRange>(xGroupShape->getByIndex(1), uno::UNO_QUERY)->getString());
}
+DECLARE_OOXMLIMPORT_TEST(testDmlCharheightDefault, "dml-charheight-default.docx")
+{
+ uno::Reference<container::XIndexAccess> xGroup(getShape(1), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xShape(xGroup->getByIndex(0), uno::UNO_QUERY);
+ // This was 16: the first run of the second para incorrectly inherited the char height of the first para.
+ CPPUNIT_ASSERT_EQUAL(11.f, getProperty<float>(getRun(getParagraphOfText(2, xShape->getText()), 1), "CharHeight"));
+}
+
DECLARE_OOXMLIMPORT_TEST(testGroupshapeRelsize, "groupshape-relsize.docx")
{
// This was 43760, i.e. the height of the groupshape was larger than the page height, which is obviously incorrect.