summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authormartinb214 <bakosmartin@gmail.com>2017-12-06 20:58:45 +0100
committerTamás Zolnai <tamas.zolnai@collabora.com>2017-12-23 02:57:55 +0100
commit7f42b0f96a2798ae99aa65b84b0db3b2af2b282b (patch)
treec4df9708b0c871636c16d9f877ca3c450c3f80a9 /oox
parenta692cdf779dc998f58ebf9e9f84f22edf7dbe421 (diff)
tdf#111790: Shadow imported from a PPTX file is not overriden
by the settings while saving back to PPTX Change-Id: I958f1987d0123bcf89ef37b13807f407781f3c15 Reviewed-on: https://gerrit.libreoffice.org/45989 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/export/drawingml.cxx83
1 files changed, 71 insertions, 12 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 17fc99acbc7f..f0f9bee96125 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -3181,18 +3181,36 @@ void DrawingML::WriteShapeEffect( const OUString& sName, const Sequence< Propert
}
}
+sal_Int32 lcl_CalculateDist(const double dX, const double dY)
+{
+ return static_cast< sal_Int32 >(sqrt(dX*dX + dY*dY) * 360);
+}
+
+sal_Int32 lcl_CalculateDir(const double dX, const double dY)
+{
+ return (static_cast< sal_Int32 >(atan2(dY,dX) * 180 * 60000 / M_PI) + 21600000) % 21600000;
+}
+
void DrawingML::WriteShapeEffects( const Reference< XPropertySet >& rXPropSet )
{
if( !GetProperty( rXPropSet, "InteropGrabBag" ) )
return;
- Sequence< PropertyValue > aGrabBag, aEffects;
+ Sequence< PropertyValue > aGrabBag, aEffects, aOuterShdwProps;
mAny >>= aGrabBag;
for( sal_Int32 i=0; i < aGrabBag.getLength(); ++i )
{
if( aGrabBag[i].Name == "EffectProperties" )
{
aGrabBag[i].Value >>= aEffects;
+ for( sal_Int32 j=0; j < aEffects.getLength(); ++j )
+ {
+ if( aEffects[j].Name == "outerShdw" )
+ {
+ aEffects[j].Value >>= aOuterShdwProps;
+ break;
+ }
+ }
break;
}
}
@@ -3210,9 +3228,9 @@ void DrawingML::WriteShapeEffects( const Reference< XPropertySet >& rXPropSet )
rXPropSet->getPropertyValue( "ShadowYDistance" ) >>= dY;
aShadowAttribsGrabBag[0].Name = "dist";
- aShadowAttribsGrabBag[0].Value <<= static_cast< sal_Int32 >(sqrt(dX*dX + dY*dY) * 360);
+ aShadowAttribsGrabBag[0].Value <<= lcl_CalculateDist(dX, dY);
aShadowAttribsGrabBag[1].Name = "dir";
- aShadowAttribsGrabBag[1].Value <<= (static_cast< sal_Int32 >(atan2(dY,dX) * 180 * 60000 / M_PI) + 21600000) % 21600000;
+ aShadowAttribsGrabBag[1].Value <<= lcl_CalculateDir(dX, dY);;
aShadowGrabBag[0].Name = "Attribs";
aShadowGrabBag[0].Value <<= aShadowAttribsGrabBag;
@@ -3225,19 +3243,60 @@ void DrawingML::WriteShapeEffects( const Reference< XPropertySet >& rXPropSet )
WriteShapeEffect( "outerShdw", aShadowGrabBag );
mpFS->endElementNS(XML_a, XML_effectLst);
}
- return;
}
+ else
+ {
+ for( sal_Int32 i=0; i < aOuterShdwProps.getLength(); ++i )
+ {
+ if( aOuterShdwProps[i].Name == "Attribs" )
+ {
+ Sequence< PropertyValue > aAttribsProps;
+ aOuterShdwProps[i].Value >>= aAttribsProps;
- mpFS->startElementNS(XML_a, XML_effectLst, FSEND);
+ double dX = +0.0, dY = +0.0;
+ rXPropSet->getPropertyValue( "ShadowXDistance" ) >>= dX;
+ rXPropSet->getPropertyValue( "ShadowYDistance" ) >>= dY;
- for( sal_Int32 i=0; i < aEffects.getLength(); ++i )
- {
- Sequence< PropertyValue > aEffectProps;
- aEffects[i].Value >>= aEffectProps;
- WriteShapeEffect( aEffects[i].Name, aEffectProps );
- }
+ for( sal_Int32 j=0; j < aAttribsProps.getLength(); ++j )
+ {
+ if( aAttribsProps[j].Name == "dist" )
+ {
+ aAttribsProps[j].Value <<= lcl_CalculateDist(dX, dY);
+ }
+ else if( aAttribsProps[j].Name == "dir" )
+ {
+ aAttribsProps[j].Value <<= lcl_CalculateDir(dX, dY);
+ }
+ }
- mpFS->endElementNS(XML_a, XML_effectLst);
+ aOuterShdwProps[i].Value <<= aAttribsProps;
+ }
+ else if( aOuterShdwProps[i].Name == "RgbClr" )
+ {
+ aOuterShdwProps[i].Value = rXPropSet->getPropertyValue( "ShadowColor" );
+ }
+ else if( aOuterShdwProps[i].Name == "RgbClrTransparency" )
+ {
+ aOuterShdwProps[i].Value = rXPropSet->getPropertyValue( "ShadowTransparence" );
+ }
+ }
+
+ mpFS->startElementNS(XML_a, XML_effectLst, FSEND);
+ for( sal_Int32 i=0; i < aEffects.getLength(); ++i )
+ {
+ if( aEffects[i].Name == "outerShdw" )
+ {
+ WriteShapeEffect( aEffects[i].Name, aOuterShdwProps );
+ }
+ else
+ {
+ Sequence< PropertyValue > aEffectProps;
+ aEffects[i].Value >>= aEffectProps;
+ WriteShapeEffect( aEffects[i].Name, aEffectProps );
+ }
+ }
+ mpFS->endElementNS(XML_a, XML_effectLst);
+ }
}
void DrawingML::WriteShape3DEffects( const Reference< XPropertySet >& xPropSet )