Kaydet (Commit) 5bab5aae authored tarafından Miklos Vajna's avatar Miklos Vajna

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
üst 66df1646
......@@ -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() )
......
......@@ -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;
......
......@@ -360,6 +360,13 @@ DECLARE_OOXMLEXPORT_TEST(testMsoPosition, "bnc884615-mso-position.docx")
}
}
DECLARE_OOXMLEXPORT_TEST(testWpsCharColor, "wps-char-color.docx")
{
uno::Reference<text::XTextRange> xShape(getShape(1), uno::UNO_QUERY);
// This was -1, i.e. the character color was default (-1), not white.
CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), getProperty<sal_Int32>(xShape->getStart(), "CharColor"));
}
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
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