Kaydet (Commit) 7a246731 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

add ugly hack to work around SvxDrawPage::add only accepting SvxShape

Change-Id: I77c292b088a1a1797fba10cc514167a1f3dca917
üst ba5285f4
......@@ -35,6 +35,7 @@ $(eval $(call gb_Library_use_libraries,chartopengl,\
cppu \
cppuhelper \
sal \
svxcore \
vcl \
$(gb_UWINAPI) \
))
......
......@@ -46,6 +46,7 @@
#include <rtl/math.hxx>
#include <svx/svdocirc.hxx>
#include <svx/svdopath.hxx>
#include <svx/unoshape.hxx>
#include <basegfx/point/b2dpoint.hxx>
#include <basegfx/matrix/b3dhommatrix.hxx>
......@@ -95,7 +96,7 @@ uno::Reference< drawing::XShapes > getChartShape(
xProp->getPropertyValue( UNO_NAME_MISC_OBJ_NAME ) >>= aRet;
if( aRet.equals("com.sun.star.chart2.shapes") )
{
xRet = uno::Reference< drawing::XShapes >( xShape, uno::UNO_QUERY );
xRet = dynamic_cast<SvxDummyShapeContainer*>(xShape.get())->getWrappedShape();
break;
}
}
......@@ -119,12 +120,13 @@ uno::Reference< drawing::XShapes > OpenglShapeFactory::getOrCreateChartRootShape
"com.sun.star.drawing.GraphicObjectShape" ), uno::UNO_QUERY );
dummy::DummyChart *pChart = new dummy::DummyChart(xTarget);
m_pChart = (void *)pChart;
SvxDummyShapeContainer* pContainer = new SvxDummyShapeContainer(pChart);
xRet = pChart;
#if 0
xRet = new dummy::DummyChart();
m_pChart = (void *)((dummy::DummyChart *)xRet);
#endif
xDrawPage->add(uno::Reference< drawing::XShape >(xRet, uno::UNO_QUERY_THROW));
xDrawPage->add(pContainer);
}
return xRet;
}
......
......@@ -875,6 +875,29 @@ private:
OUString referer_;
};
/*
* This is a really ugly hack for the chart2 OpenGL backend
* SvxShapeGroup::add only accepts objects derived from SvxShape and silently drops
* other objects. This fixes my life time problems but I will burn for it in hell.
*
* The object does nothing and should not be painted. It is just there to ensure that the
* wrapped object is not deleted prematurely.
*/
class SVX_DLLPUBLIC SvxDummyShapeContainer : public SvxShape
{
private:
com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >
m_xDummyObject;
public:
SvxDummyShapeContainer( com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > xWrappedObject );
virtual ~SvxDummyShapeContainer() throw();
com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > getWrappedShape()
{ return m_xDummyObject; }
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -943,4 +943,12 @@ bool SvxMediaShape::getPropertyValueImpl( const OUString& rName, const SfxItemPr
}
}
SvxDummyShapeContainer::SvxDummyShapeContainer(uno::Reference< drawing::XShapes > xObject):
m_xDummyObject(xObject)
{
}
SvxDummyShapeContainer::~SvxDummyShapeContainer() throw()
{
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
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