diff options
author | Michael Stahl <mstahl@redhat.com> | 2014-03-12 22:21:16 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2014-03-12 23:55:29 +0100 |
commit | 92cb21ebeda98c5193c50c4cf7ef3d60611c2a52 (patch) | |
tree | 0e4e40005935918ba55c9ad6a15044d8720ce5d9 /xmloff | |
parent | Avoid possible resource leaks by boost::scoped_array (diff) | |
download | core-92cb21ebeda98c5193c50c4cf7ef3d60611c2a52.tar.gz core-92cb21ebeda98c5193c50c4cf7ef3d60611c2a52.zip |
fdo#75872: ODF import: fix up graphics defaults stroke/fill colors
These have changed a few times, notably in LO 4.0 with commit
895890563cb0cc5fa872bdfd06918a46cdda172d and AOO 4.0 with commit
c0eb5e7772c848806db8ab461f77f9549c1d8b2b; unfortunately historic OOo and
current AOO do not write the values into ODF files, whereas LO 4.x does
(probably by accident, since 45d3577bc5726eee44f491fd30a7f11dc428431a
by design).
Try to set the defaults depending on the generator; since the defaults
are not specified by ODF they are implementation defined anyway so this
should be OK.
Change-Id: I1270d6e0cdeea5cb493724a0998f661a0cf644f1
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/source/core/xmlimp.cxx | 25 | ||||
-rw-r--r-- | xmloff/source/draw/XMLGraphicsDefaultStyle.cxx | 59 |
2 files changed, 82 insertions, 2 deletions
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index c0be300b2fd0..2236d48f505f 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -194,7 +194,20 @@ getBuildIdsProperty(uno::Reference<beans::XPropertySet> const& xImportInfo) else { SAL_INFO_IF('4' != loVersion[0], "xmloff.core", "unknown LO version: " << loVersion); - mnGeneratorVersion = SvXMLImport::LO_4x; + if ('4' == loVersion[0] && loVersion.getLength() > 1 + && (loVersion[1] == '0' || loVersion[1] == '1')) + { + mnGeneratorVersion = SvXMLImport::LO_41x; // 4.0/4.1 + } + else if ('4' == loVersion[0] + && loVersion.getLength() > 1 && loVersion[1] == '2') + { + mnGeneratorVersion = SvXMLImport::LO_42x; // 4.2 + } + else + { + mnGeneratorVersion = SvXMLImport::LO_4x; + } } return; // ignore buildIds } @@ -231,6 +244,16 @@ getBuildIdsProperty(uno::Reference<beans::XPropertySet> const& xImportInfo) { mnGeneratorVersion = SvXMLImport::OOo_34x; } + else if (nUPD == 400) + { + mnGeneratorVersion = SvXMLImport::AOO_40x; + } + else if (nUPD >= 410) + { + // effectively this means "latest", see use + // in XMLGraphicsDefaultStyle::SetDefaults()! + mnGeneratorVersion = SvXMLImport::AOO_4x; + } } } diff --git a/xmloff/source/draw/XMLGraphicsDefaultStyle.cxx b/xmloff/source/draw/XMLGraphicsDefaultStyle.cxx index d5a2f79289d6..aae02d40bae9 100644 --- a/xmloff/source/draw/XMLGraphicsDefaultStyle.cxx +++ b/xmloff/source/draw/XMLGraphicsDefaultStyle.cxx @@ -17,7 +17,12 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <xmloff/XMLGraphicsDefaultStyle.hxx> + #include <com/sun/star/lang/XMultiServiceFactory.hpp> + +#include <tools/color.hxx> + #include <xmloff/xmlimp.hxx> #include <xmloff/nmspmap.hxx> #include <xmloff/xmlnmspe.hxx> @@ -25,7 +30,6 @@ #include <xmloff/families.hxx> #include "XMLShapePropertySetContext.hxx" -#include <xmloff/XMLGraphicsDefaultStyle.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -76,6 +80,14 @@ SvXMLImportContext *XMLGraphicsDefaultStyle::CreateChildContext( sal_uInt16 nPre return pContext; } +struct XMLPropertyByIndex { + sal_Int32 const m_nIndex; + XMLPropertyByIndex(sal_Int32 const nIndex) : m_nIndex(nIndex) {} + bool operator()(XMLPropertyState const& rProp) { + return m_nIndex == rProp.mnIndex; + } +}; + // This method is called for every default style void XMLGraphicsDefaultStyle::SetDefaults() { @@ -113,6 +125,51 @@ void XMLGraphicsDefaultStyle::SetDefaults() xDefaults->setPropertyValue("IsFollowingTextFlow", uno::makeAny(true)); } + bool const bIsAOO4( + GetImport().getGeneratorVersion() >= SvXMLImport::AOO_40x + && GetImport().getGeneratorVersion() <= SvXMLImport::AOO_4x); + + // fdo#75872: backward compatibility for pool defaults change + if (GetImport().isGeneratorVersionOlderThan( + SvXMLImport::AOO_40x, SvXMLImport::LO_42x) + // argh... it turns out that LO has also changed defaults for these + // since LO 4.0, and so even the _new_ AOO 4.0+ default needs + // special handling since AOO still does _not_ write it into the file + || bIsAOO4) + { + UniReference<XMLPropertySetMapper> const pImpPrMap( + GetStyles()->GetImportPropertyMapper(GetFamily()) + ->getPropertySetMapper()); + sal_Int32 const nStrokeIndex( + pImpPrMap->GetEntryIndex(XML_NAMESPACE_SVG, "stroke-color", 0)); + if (std::find_if(GetProperties().begin(), GetProperties().end(), + XMLPropertyByIndex(nStrokeIndex)) == GetProperties().end()) + { + sal_Int32 const nStroke( + (bIsAOO4) ? RGB_COLORDATA(128, 128, 128) : COL_BLACK); + xDefaults->setPropertyValue("LineColor", makeAny(nStroke)); + } + sal_Int32 const nFillColor( (bIsAOO4) + ? RGB_COLORDATA(0xCF, 0xE7, 0xF5) : RGB_COLORDATA(153, 204, 255)); + sal_Int32 const nFillIndex( + pImpPrMap->GetEntryIndex(XML_NAMESPACE_DRAW, "fill-color", 0)); + if (std::find_if(GetProperties().begin(), GetProperties().end(), + XMLPropertyByIndex(nFillIndex)) == GetProperties().end()) + { + xDefaults->setPropertyValue("FillColor", makeAny(nFillColor)); + } + if (xInfo->hasPropertyByName("FillColor2")) + { + sal_Int32 const nFill2Index(pImpPrMap->GetEntryIndex( + XML_NAMESPACE_DRAW, "secondary-fill-color", 0)); + if (std::find_if(GetProperties().begin(), GetProperties().end(), + XMLPropertyByIndex(nFill2Index)) == GetProperties().end()) + { + xDefaults->setPropertyValue("FillColor2", makeAny(nFillColor)); + } + } + } + FillPropertySet( xDefaults ); } |