summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/export_setup.mk60
-rw-r--r--oox/inc/drawingml/misccontexts.hxx4
-rw-r--r--oox/source/core/xmlfilterbase.cxx1
-rw-r--r--oox/source/drawingml/misccontexts.cxx37
-rw-r--r--sd/qa/unit/data/odp/SvgImageTest.odpbin0 -> 15922 bytes
-rw-r--r--sd/qa/unit/export-tests.cxx31
-rw-r--r--sw/qa/extras/globalfilter/data/SvgImageTest.odtbin0 -> 13608 bytes
-rw-r--r--sw/qa/extras/globalfilter/globalfilter.cxx37
8 files changed, 100 insertions, 70 deletions
diff --git a/chart2/export_setup.mk b/chart2/export_setup.mk
index b2bcf751111e..723df9897c4a 100644
--- a/chart2/export_setup.mk
+++ b/chart2/export_setup.mk
@@ -71,65 +71,7 @@ $(eval $(call gb_CppunitTest_use_sdk_api,chart2_export$(1)))
$(eval $(call gb_CppunitTest_use_ure,chart2_export$(1)))
$(eval $(call gb_CppunitTest_use_vcl,chart2_export$(1)))
-
-$(eval $(call gb_CppunitTest_use_components,chart2_export$(1),\
- basic/util/sb \
- animations/source/animcore/animcore \
- chart2/source/controller/chartcontroller \
- chart2/source/chartcore \
- comphelper/util/comphelp \
- configmgr/source/configmgr \
- dbaccess/util/dba \
- embeddedobj/util/embobj \
- emfio/emfio \
- eventattacher/source/evtatt \
- filter/source/config/cache/filterconfig1 \
- filter/source/odfflatxml/odfflatxml \
- filter/source/storagefilterdetect/storagefd \
- filter/source/xmlfilteradaptor/xmlfa \
- filter/source/xmlfilterdetect/xmlfd \
- forms/util/frm \
- framework/util/fwk \
- i18npool/util/i18npool \
- linguistic/source/lng \
- oox/util/oox \
- package/source/xstor/xstor \
- package/util/package2 \
- sax/source/expatwrap/expwrap \
- sc/util/sc \
- sc/util/scd \
- sc/util/scfilt \
- sw/util/sw \
- sw/util/swd \
- sw/util/msword \
- sd/util/sd \
- sd/util/sdd \
- $(call gb_Helper_optional,SCRIPTING, \
- sc/util/vbaobj) \
- scaddins/source/analysis/analysis \
- scaddins/source/datefunc/date \
- scripting/source/basprov/basprov \
- scripting/util/scriptframe \
- sfx2/util/sfx \
- sot/util/sot \
- svl/source/fsstor/fsstorage \
- svl/util/svl \
- svtools/util/svt \
- svx/util/svx \
- svx/util/svxcore \
- toolkit/util/tk \
- vcl/vcl.common \
- ucb/source/core/ucb1 \
- ucb/source/ucp/file/ucpfile1 \
- ucb/source/ucp/tdoc/ucptdoc1 \
- unotools/util/utl \
- unoxml/source/rdf/unordf \
- unoxml/source/service/unoxml \
- uui/util/uui \
- writerfilter/util/writerfilter \
- xmloff/util/xo \
- xmlscript/util/xmlscript \
-))
+$(eval $(call gb_CppunitTest_use_rdb,chart2_export$(1),services))
$(eval $(call gb_CppunitTest_use_uiconfigs,chart2_export$(1), \
modules/swriter \
diff --git a/oox/inc/drawingml/misccontexts.hxx b/oox/inc/drawingml/misccontexts.hxx
index c79816282ae7..1b7f05444ac7 100644
--- a/oox/inc/drawingml/misccontexts.hxx
+++ b/oox/inc/drawingml/misccontexts.hxx
@@ -102,7 +102,8 @@ class BlipExtensionContext final : public ::oox::core::ContextHandler2
public:
explicit BlipExtensionContext(
::oox::core::ContextHandler2Helper const & rParent,
- BlipFillProperties& rBlipProps );
+ BlipFillProperties& rBlipProps,
+ model::BlipFill* pBlipFill);
virtual ~BlipExtensionContext() override;
virtual ::oox::core::ContextHandlerRef
@@ -112,6 +113,7 @@ public:
private:
BlipFillProperties& mrBlipProps;
+ model::BlipFill* mpBlipFill;
};
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index d197440133da..93b5816812a1 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -149,6 +149,7 @@ const Sequence< beans::Pair< OUString, sal_Int32 > >& NamespaceIds()
{"http://schemas.microsoft.com/office/spreadsheetml/2015/revision2",
NMSP_xr2},
{"http://schemas.microsoft.com/office/drawing/2017/decorative", NMSP_adec},
+ {"http://schemas.microsoft.com/office/drawing/2016/SVG/main", NMSP_asvg},
};
return SINGLETON;
};
diff --git a/oox/source/drawingml/misccontexts.cxx b/oox/source/drawingml/misccontexts.cxx
index 2eef9ab6133a..244d17d9fc62 100644
--- a/oox/source/drawingml/misccontexts.cxx
+++ b/oox/source/drawingml/misccontexts.cxx
@@ -369,7 +369,7 @@ ContextHandlerRef BlipContext::onCreateContext(
return new DuotoneContext( *this, mrBlipProps );
case A_TOKEN( extLst ):
- return new BlipExtensionContext( *this, mrBlipProps );
+ return new BlipExtensionContext(*this, mrBlipProps, mpBlipFill);
case A_TOKEN( lum ):
{
@@ -598,9 +598,10 @@ SimpleFillPropertiesContext::~SimpleFillPropertiesContext()
mrColor = getBestSolidColor();
}
-BlipExtensionContext::BlipExtensionContext( ContextHandler2Helper const & rParent, BlipFillProperties& rBlipProps ) :
- ContextHandler2( rParent ),
- mrBlipProps( rBlipProps )
+BlipExtensionContext::BlipExtensionContext(ContextHandler2Helper const & rParent, BlipFillProperties& rBlipProps, model::BlipFill* pBlipFill)
+ : ContextHandler2(rParent)
+ , mrBlipProps(rBlipProps)
+ , mpBlipFill(pBlipFill)
{
}
@@ -608,16 +609,32 @@ BlipExtensionContext::~BlipExtensionContext()
{
}
-ContextHandlerRef BlipExtensionContext::onCreateContext(
- sal_Int32 nElement, const AttributeList& )
+ContextHandlerRef BlipExtensionContext::onCreateContext(sal_Int32 nElement, const AttributeList& rAttribs)
{
switch( nElement )
{
- case A_TOKEN( ext ):
- return new BlipExtensionContext( *this, mrBlipProps );
+ case A_TOKEN(ext):
+ return new BlipExtensionContext(*this, mrBlipProps, mpBlipFill);
+
+ case OOX_TOKEN(a14, imgProps):
+ return new ArtisticEffectContext(*this, mrBlipProps.maEffect);
- case OOX_TOKEN( a14, imgProps ):
- return new ArtisticEffectContext( *this, mrBlipProps.maEffect );
+ case OOX_TOKEN(asvg, svgBlip):
+ {
+ if (rAttribs.hasAttribute(R_TOKEN(embed)))
+ {
+ // internal picture URL
+ OUString aFragmentPath = getFragmentPathFromRelId(rAttribs.getStringDefaulted(R_TOKEN(embed)));
+ if (!aFragmentPath.isEmpty())
+ {
+ auto xGraphic = getFilter().getGraphicHelper().importEmbeddedGraphic(aFragmentPath);
+ mrBlipProps.mxFillGraphic = xGraphic;
+ if (mpBlipFill)
+ mpBlipFill->mxGraphic = xGraphic;
+ }
+ }
+ }
+ break;
}
return nullptr;
}
diff --git a/sd/qa/unit/data/odp/SvgImageTest.odp b/sd/qa/unit/data/odp/SvgImageTest.odp
new file mode 100644
index 000000000000..38b92df80896
--- /dev/null
+++ b/sd/qa/unit/data/odp/SvgImageTest.odp
Binary files differ
diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index c39d110c3022..92b36ecacce7 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -1927,6 +1927,37 @@ CPPUNIT_TEST_FIXTURE(SdExportTest, testTdf153179)
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getPage(0)->getCount());
}
+CPPUNIT_TEST_FIXTURE(SdExportTest, testSvgImageSupport)
+{
+ for (OUString const& rFormat : { u"impress8"_ustr, u"Impress Office Open XML"_ustr })
+ {
+ // Load the original file
+ createSdImpressDoc("odp/SvgImageTest.odp");
+ const OString sFailedMessage = "Failed on filter: " + rFormat.toUtf8();
+ saveAndReload(rFormat);
+
+ // Check whether graphic was exported well
+ uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(mxComponent,
+ uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(1),
+ xDrawPagesSupplier->getDrawPages()->getCount());
+ uno::Reference<drawing::XDrawPage> xDrawPage(
+ xDrawPagesSupplier->getDrawPages()->getByIndex(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xDrawPage.is());
+ uno::Reference<drawing::XShape> xImage(xDrawPage->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xPropertySet(xImage, uno::UNO_QUERY_THROW);
+
+ uno::Reference<graphic::XGraphic> xGraphic;
+ xPropertySet->getPropertyValue("Graphic") >>= xGraphic;
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is());
+ Graphic aGraphic(xGraphic);
+ auto pVectorGraphic = aGraphic.getVectorGraphicData();
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pVectorGraphic);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), VectorGraphicDataType::Svg,
+ pVectorGraphic->getType());
+ }
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/globalfilter/data/SvgImageTest.odt b/sw/qa/extras/globalfilter/data/SvgImageTest.odt
new file mode 100644
index 000000000000..3b37fe7998ef
--- /dev/null
+++ b/sw/qa/extras/globalfilter/data/SvgImageTest.odt
Binary files differ
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index c12e300ebfaa..3eda6b6354e8 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -68,6 +68,7 @@ public:
void testDropDownFormField();
void testDateFormField();
void testDateFormFieldCharacterFormatting();
+ void testSvgImageSupport();
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testEmbeddedGraphicRoundtrip);
@@ -91,6 +92,7 @@ public:
CPPUNIT_TEST(testDropDownFormField);
CPPUNIT_TEST(testDateFormField);
CPPUNIT_TEST(testDateFormFieldCharacterFormatting);
+ CPPUNIT_TEST(testSvgImageSupport);
CPPUNIT_TEST_SUITE_END();
};
@@ -2214,6 +2216,41 @@ void Test::testDateFormFieldCharacterFormatting()
}
}
+void Test::testSvgImageSupport()
+{
+ OUString aFilterNames[] = {
+ "writer8",
+ "Office Open XML Text",
+ };
+
+ for (OUString const & rFilterName : aFilterNames)
+ {
+ // Check whether the export code swaps in the image which was swapped out before by auto mechanism
+
+ createSwDoc("SvgImageTest.odt");
+
+ // Export the document and import again for a check
+ saveAndReload(rFilterName);
+
+ // Check whether graphic exported well after it was swapped out
+ const OString sFailedMessage = "Failed on filter: "_ostr + rFilterName.toUtf8();
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), 1, getShapes());
+
+ // First image
+ uno::Reference<drawing::XShape> xImage(getShape(1), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xPropertySet(xImage, uno::UNO_QUERY_THROW);
+
+ uno::Reference<graphic::XGraphic> xGraphic;
+ xPropertySet->getPropertyValue("Graphic") >>= xGraphic;
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), xGraphic.is());
+ Graphic aGraphic(xGraphic);
+ auto pVectorGraphic = aGraphic.getVectorGraphicData();
+ CPPUNIT_ASSERT_MESSAGE(sFailedMessage.getStr(), pVectorGraphic);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), VectorGraphicDataType::Svg, pVectorGraphic->getType());
+ }
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();