summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/xmloff/xmlimp.hxx7
-rw-r--r--sw/qa/extras/odfimport/data/fdo75872_aoo40.odtbin0 -> 8625 bytes
-rw-r--r--sw/qa/extras/odfimport/data/fdo75872_ooo33.odtbin0 -> 8348 bytes
-rw-r--r--sw/qa/extras/odfimport/odfimport.cxx20
-rw-r--r--xmloff/source/core/xmlimp.cxx25
-rw-r--r--xmloff/source/draw/XMLGraphicsDefaultStyle.cxx59
6 files changed, 108 insertions, 3 deletions
diff --git a/include/xmloff/xmlimp.hxx b/include/xmloff/xmlimp.hxx
index 6005677ff252..534158ae9c2c 100644
--- a/include/xmloff/xmlimp.hxx
+++ b/include/xmloff/xmlimp.hxx
@@ -420,9 +420,14 @@ public:
static const sal_uInt16 OOo_32x = 32;
static const sal_uInt16 OOo_33x = 33;
static const sal_uInt16 OOo_34x = 34;
+ // for AOO, no release overlaps with OOo, so continue OOo version numbers
+ static const sal_uInt16 AOO_40x = 40;
+ static const sal_uInt16 AOO_4x = 41;
static const sal_uInt16 LO_flag = 0x100;
static const sal_uInt16 LO_3x = 30 | LO_flag;
- static const sal_uInt16 LO_4x = 40 | LO_flag;
+ static const sal_uInt16 LO_41x = 41 | LO_flag;
+ static const sal_uInt16 LO_42x = 42 | LO_flag;
+ static const sal_uInt16 LO_4x = 43 | LO_flag;
static const sal_uInt16 ProductVersionUnknown = SAL_MAX_UINT16;
/** depending on whether the generator version indicates LO, compare
diff --git a/sw/qa/extras/odfimport/data/fdo75872_aoo40.odt b/sw/qa/extras/odfimport/data/fdo75872_aoo40.odt
new file mode 100644
index 000000000000..549a56706de9
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/fdo75872_aoo40.odt
Binary files differ
diff --git a/sw/qa/extras/odfimport/data/fdo75872_ooo33.odt b/sw/qa/extras/odfimport/data/fdo75872_ooo33.odt
new file mode 100644
index 000000000000..4cc3de7cc9aa
--- /dev/null
+++ b/sw/qa/extras/odfimport/data/fdo75872_ooo33.odt
Binary files differ
diff --git a/sw/qa/extras/odfimport/odfimport.cxx b/sw/qa/extras/odfimport/odfimport.cxx
index 87e7402fda21..879513bfbbc2 100644
--- a/sw/qa/extras/odfimport/odfimport.cxx
+++ b/sw/qa/extras/odfimport/odfimport.cxx
@@ -278,6 +278,26 @@ DECLARE_ODFIMPORT_TEST(testFdo56272, "fdo56272.odt")
CPPUNIT_ASSERT_EQUAL(sal_Int32(422), xShape->getPosition().Y); // Was -2371
}
+DECLARE_ODFIMPORT_TEST(testFdo75872_ooo33, "fdo75872_ooo33.odt")
+{
+ // graphics default style: line color and fill color changed
+ uno::Reference<drawing::XShape> xShape = getShape(1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_BLACK),
+ getProperty<sal_Int32>(xShape, "LineColor"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(RGB_COLORDATA(153, 204, 255)),
+ getProperty<sal_Int32>(xShape, "FillColor"));
+}
+
+DECLARE_ODFIMPORT_TEST(testFdo75872_aoo40, "fdo75872_aoo40.odt")
+{
+ // graphics default style: line color and fill color changed
+ uno::Reference<drawing::XShape> xShape = getShape(1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(RGB_COLORDATA(128, 128, 128)),
+ getProperty<sal_Int32>(xShape, "LineColor"));
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(RGB_COLORDATA(0xCF, 0xE7, 0xF5)),
+ getProperty<sal_Int32>(xShape, "FillColor"));
+}
+
DECLARE_ODFIMPORT_TEST(testFdo55814, "fdo55814.odt")
{
uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx
index c46757f70b5d..2127d0eb7bdc 100644
--- a/xmloff/source/core/xmlimp.cxx
+++ b/xmloff/source/core/xmlimp.cxx
@@ -193,7 +193,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
}
@@ -230,6 +243,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 );
}