summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorSzymon Kłos <szymon.klos@collabora.com>2017-05-24 00:15:15 +0200
committerSzymon Kłos <szymon.klos@collabora.com>2017-06-01 08:10:22 +0200
commit5bc597c49207be961454cc333425f6d2a9230347 (patch)
tree5e4fd831621dd1913bb1256f3724059b2c7367dc /oox
parent8421372dd3c25c7852de388e3c8cc4a8b65dc2de (diff)
Watermark: docx interoperability
Before patch: Document created in MS Word: <v:shapetype id="_x0000_t136" o:spt="136" ...> <v:shape type="#_x0000_t136" ...> Imported to LO and exported: <v:shapetype id="shapetype_136" o:spt="136" ...> <v:shape type="shapetype_136" ...> Then again imported to MS Word and exported: <v:shapetype id="shapetype_136" o:spid="_x0000_m1026" o:spt="100" ...> <v:shape type="#shapetype_136" ...> In this moment LO after import had shape in the navigator but it wasn't visible. Patch: * vmshapecontext.cxx is changed to read ShapeType from id instead of o:spt when o:spid is present. * vmlexport.cxx added o:spid for Word to identify inserted watermark * edfxol.cxx changed name of shape to "PowerPlusWaterMarkObject" for Word * tests Change-Id: I25322628838a98c45cbeed64144d04977b2ea9ba Reviewed-on: https://gerrit.libreoffice.org/37969 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/export/vmlexport.cxx4
-rw-r--r--oox/source/vml/vmlshapecontext.cxx11
2 files changed, 12 insertions, 3 deletions
diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx
index 28de3dce50c2..8ba7d9fb492f 100644
--- a/oox/source/export/vmlexport.cxx
+++ b/oox/source/export/vmlexport.cxx
@@ -197,8 +197,10 @@ void VMLExport::AddShape( sal_uInt32 nShapeType, sal_uInt32 nShapeFlags, sal_uIn
}
else
{
- // A watermark object - store the optional shape ID also ('o:spid')
+ // A watermark object - store the optional shape ID
m_pShapeAttrList->add( XML_id, OUStringToOString(m_pSdrObject->GetName(), RTL_TEXTENCODING_UTF8) );
+ // also ('o:spid')
+ m_pShapeAttrList->addNS( XML_o, XML_spid, ShapeIdString( nShapeId ) );
}
}
diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx
index dc654223aca6..ed369ae1c7d9 100644
--- a/oox/source/vml/vmlshapecontext.cxx
+++ b/oox/source/vml/vmlshapecontext.cxx
@@ -275,11 +275,18 @@ ShapeTypeContext::ShapeTypeContext( ContextHandler2Helper& rParent, ShapeType& r
mrTypeModel.maShapeId = rAttribs.getXString( bHasOspid ? O_TOKEN( spid ) : XML_id, OUString() );
mrTypeModel.maLegacyId = rAttribs.getString( XML_id, OUString() );
OSL_ENSURE( !mrTypeModel.maShapeId.isEmpty(), "ShapeTypeContext::ShapeTypeContext - missing shape identifier" );
+ // builtin shape type identifier
+ mrTypeModel.moShapeType = rAttribs.getInteger( O_TOKEN( spt ) );
// if the o:spid attribute exists, the id attribute contains the user-defined shape name
if( bHasOspid )
+ {
mrTypeModel.maShapeName = rAttribs.getXString( XML_id, OUString() );
- // builtin shape type identifier
- mrTypeModel.moShapeType = rAttribs.getInteger( O_TOKEN( spt ) );
+ // get ShapeType and ShapeId from name for compatibility
+ mrTypeModel.maShapeId = mrTypeModel.maShapeName;
+ static const OUString sShapeTypePrefix = "shapetype_";
+ if( mrTypeModel.maShapeName.startsWith( sShapeTypePrefix ) )
+ mrTypeModel.moShapeType = mrTypeModel.maShapeName.copy(sShapeTypePrefix.getLength()).toInt32();
+ }
// coordinate system position/size, CSS style
mrTypeModel.moCoordPos = lclDecodeInt32Pair( rAttribs, XML_coordorigin );