diff options
-rw-r--r-- | include/oox/drawingml/textfield.hxx | 3 | ||||
-rw-r--r-- | include/oox/drawingml/textparagraph.hxx | 3 | ||||
-rw-r--r-- | include/oox/drawingml/textrun.hxx | 3 | ||||
-rw-r--r-- | oox/source/drawingml/textbody.cxx | 5 | ||||
-rw-r--r-- | oox/source/drawingml/textfield.cxx | 3 | ||||
-rw-r--r-- | oox/source/drawingml/textparagraph.cxx | 4 | ||||
-rw-r--r-- | oox/source/drawingml/textrun.cxx | 6 | ||||
-rwxr-xr-x | sw/qa/extras/ooxmlimport/data/dml-charheight-default.docx | bin | 0 -> 15770 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 8 |
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 Binary files differnew file mode 100755 index 000000000000..0f22a87f0e29 --- /dev/null +++ b/sw/qa/extras/ooxmlimport/data/dml-charheight-default.docx 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. |