diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-10-01 12:53:27 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-10-01 13:02:47 +0200 |
commit | 5bab5aae165158621dcf740be9bee9fca808aa9d (patch) | |
tree | 97410b7f35c937fb3a89db6394750f864324fb04 /oox | |
parent | 66df16469a56e0cae78ce768b2d4873f33223cec (diff) |
DOCX drawingML import: handle char color from theme for shape text
When we import table styles, we apply that as direct formatting, in case
there is no real direct formatting, see lcl_ApplyCellProperties() in the
sw UNO implementation.
We can do the same here: in case there is no other formatting, then
apply the char color from the WPS theme, that will give us the expected
result.
Change-Id: Ic8e6afc09167f7924a11ab0b445351075f16738e
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/drawingml/shape.cxx | 12 | ||||
-rw-r--r-- | oox/source/shape/WpsContext.cxx | 13 |
2 files changed, 24 insertions, 1 deletions
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 96b9129d3536..1aa23f78a08e 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -1013,10 +1013,10 @@ Reference< XShape > Shape::createAndInsert( else if( getTextBody() ) getTextBody()->getTextProperties().pushVertSimulation(); + PropertySet aPropertySet(mxShape); if ( !bUseRotationTransform && mnRotation != 0 ) { // use the same logic for rotation from VML exporter (SimpleShape::implConvertAndInsert at vmlshape.cxx) - PropertySet aPropertySet( mxShape ); aPropertySet.setAnyProperty( PROP_RotateAngle, makeAny( sal_Int32( NormAngle360( mnRotation / -600 ) ) ) ); aPropertySet.setAnyProperty( PROP_HoriOrientPosition, makeAny( maPosition.X ) ); aPropertySet.setAnyProperty( PROP_VertOrientPosition, makeAny( maPosition.Y ) ); @@ -1042,6 +1042,16 @@ Reference< XShape > Shape::createAndInsert( getTextBody()->insertAt( rFilterBase, xText, xAt, aCharStyleProperties, mpMasterTextListStyle ); } } + else if (mbTextBox) + { + // No drawingML text, but WPS text is expected: save the theme + // character color on the shape, then. + if(const ShapeStyleRef* pFontRef = getShapeStyleRef(XML_fontRef)) + { + sal_Int32 nCharColor = pFontRef->maPhClr.getColor(rGraphicHelper); + aPropertySet.setAnyProperty(PROP_CharColor, uno::makeAny(nCharColor)); + } + } } if( mxShape.is() ) diff --git a/oox/source/shape/WpsContext.cxx b/oox/source/shape/WpsContext.cxx index 4d5863873fd5..9e3218e5bfbc 100644 --- a/oox/source/shape/WpsContext.cxx +++ b/oox/source/shape/WpsContext.cxx @@ -111,6 +111,19 @@ oox::core::ContextHandlerRef WpsContext::onCreateContext(sal_Int32 nElementToken drawing::TextVerticalAdjust eAdjust = drawingml::GetTextVerticalAdjust(rAttribs.getToken(XML_anchor, XML_t)); xPropertySet->setPropertyValue("TextVerticalAdjust", uno::makeAny(eAdjust)); } + + // Apply character color of the shape to the shape's textbox. + uno::Reference<text::XText> xText(mxShape, uno::UNO_QUERY); + uno::Reference<text::XTextCursor> xTextCursor = xText->createTextCursor(); + xTextCursor->gotoStart(false); + xTextCursor->gotoEnd(true); + const uno::Reference<beans::XPropertyState> xPropertyState(xTextCursor, uno::UNO_QUERY); + const beans::PropertyState ePropertyState = xPropertyState->getPropertyState("CharColor"); + if (ePropertyState == beans::PropertyState_DEFAULT_VALUE) + { + uno::Reference<beans::XPropertySet> xTextBoxPropertySet(xTextCursor, uno::UNO_QUERY); + xTextBoxPropertySet->setPropertyValue("CharColor", xPropertySet->getPropertyValue("CharColor")); + } return this; } break; |