summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2018-11-26 21:14:39 +0100
committerMiklos Vajna <vmiklos@collabora.com>2018-12-05 17:52:42 +0100
commit07b098c126cdd01a2ce4335aeb4e1dad134c7f32 (patch)
tree84326bffb48f41e63956bc0e75698f73e270e565
parenttdf#118373 xmlsecurity: avoid stderr output on libxmlsec version check (diff)
downloadcore-07b098c126cdd01a2ce4335aeb4e1dad134c7f32.tar.gz
core-07b098c126cdd01a2ce4335aeb4e1dad134c7f32.zip
tdf#120527 svx GraphicObjectShape: handle XBitmap for GraphicURL
This restores compatibility for API users who called getByName() on the bitmap table and expected that the result can be set as a value for the GraphicURL property. The case is similar to the Writer images, which was handled in commit 587803ba46055d43b5b108be744fdde17aeabc7c (sw TextGraphicObject: handle XBitmap for GraphicURL, 2018-08-08) already. Change-Id: I3740a68989b306425d0d6c4d4e350ac163cb4170 Reviewed-on: https://gerrit.libreoffice.org/64069 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com> (cherry picked from commit e30f3e76a9350e2b027d99bba5a46aa0a0ff8256) Reviewed-on: https://gerrit.libreoffice.org/64427
-rw-r--r--include/svx/unoshprp.hxx2
-rw-r--r--sd/qa/unit/data/tdf120527.jpgbin0 -> 1136 bytes
-rw-r--r--sd/qa/unit/misc-tests.cxx44
-rw-r--r--svx/source/unodraw/unoshap2.cxx14
4 files changed, 59 insertions, 1 deletions
diff --git a/include/svx/unoshprp.hxx b/include/svx/unoshprp.hxx
index 0ac66b706ebd..1ea5683a9731 100644
--- a/include/svx/unoshprp.hxx
+++ b/include/svx/unoshprp.hxx
@@ -432,7 +432,7 @@
{ OUString(UNO_NAME_GRAPHOBJ_GRAFSTREAMURL), OWN_ATTR_GRAFSTREAMURL , ::cppu::UnoType<OUString>::get(), css::beans::PropertyAttribute::MAYBEVOID, 0 }, \
{ OUString(UNO_NAME_GRAPHOBJ_FILLBITMAP), OWN_ATTR_VALUE_FILLBITMAP , cppu::UnoType<css::awt::XBitmap>::get() , 0, 0}, \
{ OUString(UNO_NAME_GRAPHOBJ_GRAPHIC), OWN_ATTR_VALUE_GRAPHIC , cppu::UnoType<css::graphic::XGraphic>::get() , 0, 0}, \
- { OUString(UNO_NAME_GRAPHOBJ_GRAPHIC_URL), OWN_ATTR_GRAPHIC_URL , cppu::UnoType<OUString>::get(), 0, 0 }, \
+ { OUString(UNO_NAME_GRAPHOBJ_GRAPHIC_URL), OWN_ATTR_GRAPHIC_URL , cppu::UnoType<css::uno::Any>::get(), 0, 0 }, \
{ OUString(UNO_NAME_GRAPHOBJ_IS_SIGNATURELINE), OWN_ATTR_IS_SIGNATURELINE , cppu::UnoType<bool>::get(), 0, 0}, \
{ OUString(UNO_NAME_GRAPHOBJ_SIGNATURELINE_ID), OWN_ATTR_SIGNATURELINE_ID , cppu::UnoType<OUString>::get(), 0, 0}, \
{ OUString(UNO_NAME_GRAPHOBJ_SIGNATURELINE_SUGGESTED_SIGNER_NAME), OWN_ATTR_SIGNATURELINE_SUGGESTED_SIGNER_NAME, cppu::UnoType<OUString>::get(), 0, 0}, \
diff --git a/sd/qa/unit/data/tdf120527.jpg b/sd/qa/unit/data/tdf120527.jpg
new file mode 100644
index 000000000000..12b393569efb
--- /dev/null
+++ b/sd/qa/unit/data/tdf120527.jpg
Binary files differ
diff --git a/sd/qa/unit/misc-tests.cxx b/sd/qa/unit/misc-tests.cxx
index a0e62f15788a..2a7404524614 100644
--- a/sd/qa/unit/misc-tests.cxx
+++ b/sd/qa/unit/misc-tests.cxx
@@ -77,6 +77,7 @@ public:
void testTdf119392();
void testTdf67248();
void testTdf119956();
+ void testTdf120527();
CPPUNIT_TEST_SUITE(SdMiscTest);
CPPUNIT_TEST(testTdf96206);
@@ -91,6 +92,7 @@ public:
CPPUNIT_TEST(testTdf119392);
CPPUNIT_TEST(testTdf67248);
CPPUNIT_TEST(testTdf119956);
+ CPPUNIT_TEST(testTdf120527);
CPPUNIT_TEST_SUITE_END();
virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override
@@ -425,6 +427,48 @@ void SdMiscTest::testTdf38225()
CPPUNIT_ASSERT(pStyle);
}
+void SdMiscTest::testTdf120527()
+{
+ sd::DrawDocShellRef xDocShRef
+ = new sd::DrawDocShell(SfxObjectCreateMode::EMBEDDED, false, DocumentType::Draw);
+ uno::Reference<frame::XLoadable> xLoadable(xDocShRef->GetModel(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xLoadable.is());
+ xLoadable->initNew();
+
+ // Load a bitmap into the bitmap table.
+ uno::Reference<lang::XMultiServiceFactory> xFactory(xDocShRef->GetModel(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xFactory.is());
+ uno::Reference<container::XNameContainer> xBitmaps(
+ xFactory->createInstance("com.sun.star.drawing.BitmapTable"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xBitmaps.is());
+ OUString aGraphicURL = m_directories.getURLFromSrc("/sd/qa/unit/data/tdf120527.jpg");
+ xBitmaps->insertByName("test", uno::makeAny(aGraphicURL));
+
+ // Create a graphic.
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xShape.is());
+ uno::Reference<beans::XPropertySet> xShapeProperySet(xShape, uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xShapeProperySet.is());
+ xShapeProperySet->setPropertyValue("GraphicURL", xBitmaps->getByName("test"));
+
+ // Insert it.
+ uno::Reference<drawing::XDrawPagesSupplier> xDrawPagesSupplier(xDocShRef->GetModel(),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xDrawPagesSupplier.is());
+ uno::Reference<drawing::XDrawPages> xDrawPages = xDrawPagesSupplier->getDrawPages();
+ CPPUNIT_ASSERT(xDrawPages.is());
+ uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPages->getByIndex(0), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xDrawPage.is());
+ // This failed with a lang.IllegalArgumentException.
+ xDrawPage->add(xShape);
+
+ // Verify that the graphic was actually consumed.
+ uno::Reference<graphic::XGraphic> xGraphic;
+ xShapeProperySet->getPropertyValue("Graphic") >>= xGraphic;
+ CPPUNIT_ASSERT(xGraphic.is());
+}
+
/// Draw miscellaneous tests.
void SdMiscTest::testTdf101242_ODF()
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx
index 1370119973e0..edc1b77f2a92 100644
--- a/svx/source/unodraw/unoshap2.cxx
+++ b/svx/source/unodraw/unoshap2.cxx
@@ -1268,6 +1268,7 @@ bool SvxGraphicObject::setPropertyValueImpl( const OUString& rName, const SfxIte
case OWN_ATTR_GRAPHIC_URL:
{
OUString aURL;
+ uno::Reference<awt::XBitmap> xBitmap;
if (rValue >>= aURL)
{
Graphic aGraphic = vcl::graphic::loadFromURL(aURL);
@@ -1277,6 +1278,19 @@ bool SvxGraphicObject::setPropertyValueImpl( const OUString& rName, const SfxIte
bOk = true;
}
}
+ else if (rValue >>= xBitmap)
+ {
+ uno::Reference<graphic::XGraphic> xGraphic(xBitmap, uno::UNO_QUERY);
+ if (xGraphic.is())
+ {
+ Graphic aGraphic = xGraphic;
+ if (aGraphic)
+ {
+ static_cast<SdrGrafObj*>(GetSdrObject())->SetGraphic(aGraphic);
+ bOk = true;
+ }
+ }
+ }
break;
}