Kaydet (Commit) e30f3e76 authored tarafından Miklos Vajna's avatar Miklos Vajna

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
587803ba (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: 's avatarMiklos Vajna <vmiklos@collabora.com>
üst a7f57d86
......@@ -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}, \
......
......@@ -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()
......
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment