diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-09-21 16:28:58 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2018-09-21 19:57:02 +0200 |
commit | c8b2849d140677f7b35523096eb2bc715b3dc507 (patch) | |
tree | 355afc14bb8d2a9f1e11d8c239a07ada0c966849 /oox/source | |
parent | 4c945b22fc42eb7a52864018cbca88358e71fd4d (diff) |
Related: tdf#120028 PPTX import: fix font size of multi-col shape text
Normal shapes have a TextFitToSize property for this, but table cell
content has to be scaled manually, as the rendering has no automatic
support for them. Luckily the file format has the info we need to scale
at import time.
Change-Id: Ibbcc4b8685995261536cce88b8c0774e148f708e
Reviewed-on: https://gerrit.libreoffice.org/60880
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins
Diffstat (limited to 'oox/source')
-rw-r--r-- | oox/source/drawingml/table/tableproperties.cxx | 14 | ||||
-rw-r--r-- | oox/source/drawingml/textbodypropertiescontext.cxx | 3 | ||||
-rw-r--r-- | oox/source/drawingml/textcharacterproperties.cxx | 3 |
3 files changed, 19 insertions, 1 deletions
diff --git a/oox/source/drawingml/table/tableproperties.cxx b/oox/source/drawingml/table/tableproperties.cxx index 8a59bae15738..39ab4cd19eac 100644 --- a/oox/source/drawingml/table/tableproperties.cxx +++ b/oox/source/drawingml/table/tableproperties.cxx @@ -20,6 +20,7 @@ #include <drawingml/table/tableproperties.hxx> #include <drawingml/table/tablestylelist.hxx> #include <drawingml/textbody.hxx> +#include <drawingml/textparagraph.hxx> #include <oox/drawingml/drawingmltypes.hxx> #include <com/sun/star/table/XTable.hpp> #include <com/sun/star/container/XNameContainer.hpp> @@ -321,6 +322,8 @@ void TableProperties::pullFromTextBody(oox::drawingml::TextBodyPtr pTextBody, sa // Create the cells and distribute the paragraphs from pTextBody. sal_Int32 nNumPara = pTextBody->getParagraphs().size(); sal_Int32 nParaPerCol = std::ceil(double(nNumPara) / nNumCol); + // Font scale of text body will be applied at a text run level. + sal_Int32 nFontScale = pTextBody->getTextProperties().mnFontScale; size_t nPara = 0; for (sal_Int32 nCol = 0; nCol < nNumCol; ++nCol) { @@ -331,7 +334,16 @@ void TableProperties::pullFromTextBody(oox::drawingml::TextBodyPtr pTextBody, sa for (sal_Int32 nParaInCol = 0; nParaInCol < nParaPerCol; ++nParaInCol) { if (nPara < pTextBody->getParagraphs().size()) - pCellTextBody->appendParagraph(pTextBody->getParagraphs()[nPara]); + { + std::shared_ptr<oox::drawingml::TextParagraph> pParagraph + = pTextBody->getParagraphs()[nPara]; + if (nFontScale != 100000) + { + for (auto& pRun : pParagraph->getRuns()) + pRun->getTextCharacterProperties().moFontScale = nFontScale; + } + pCellTextBody->appendParagraph(pParagraph); + } ++nPara; } } diff --git a/oox/source/drawingml/textbodypropertiescontext.cxx b/oox/source/drawingml/textbodypropertiescontext.cxx index 0684de52a7c8..9c18536a4a86 100644 --- a/oox/source/drawingml/textbodypropertiescontext.cxx +++ b/oox/source/drawingml/textbodypropertiescontext.cxx @@ -155,9 +155,12 @@ ContextHandlerRef TextBodyPropertiesContext::onCreateContext( sal_Int32 aElement mrTextBodyProp.maPropertyMap.setProperty( PROP_TextAutoGrowHeight, false); // CT_TextNoAutofit break; case A_TOKEN( normAutofit ): // CT_TextNormalAutofit + { mrTextBodyProp.maPropertyMap.setProperty( PROP_TextFitToSize, TextFitToSizeType_AUTOFIT); mrTextBodyProp.maPropertyMap.setProperty( PROP_TextAutoGrowHeight, false); + mrTextBodyProp.mnFontScale = rAttribs.getInteger(XML_fontScale, 100000); break; + } case A_TOKEN( spAutoFit ): { const sal_Int32 tVert = mrTextBodyProp.moVert.get( XML_horz ); diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx index 6443064e40d2..552dcf933e81 100644 --- a/oox/source/drawingml/textcharacterproperties.cxx +++ b/oox/source/drawingml/textcharacterproperties.cxx @@ -52,6 +52,7 @@ void TextCharacterProperties::assignUsed( const TextCharacterProperties& rSource maHighlightColor.assignIfUsed( rSourceProps.maHighlightColor ); maUnderlineColor.assignIfUsed( rSourceProps.maUnderlineColor ); moHeight.assignIfUsed( rSourceProps.moHeight ); + moFontScale.assignIfUsed(rSourceProps.moFontScale); moSpacing.assignIfUsed( rSourceProps.moSpacing ); moUnderline.assignIfUsed( rSourceProps.moUnderline ); moBaseline.assignIfUsed( rSourceProps.moBaseline ); @@ -117,6 +118,8 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil if( moHeight.has() ) { float fHeight = GetFontHeight( moHeight.get() ); + if (moFontScale.has()) + fHeight *= (moFontScale.get() / 100000); rPropMap.setProperty( PROP_CharHeight, fHeight); rPropMap.setProperty( PROP_CharHeightAsian, fHeight); rPropMap.setProperty( PROP_CharHeightComplex, fHeight); |