summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--forms/source/component/clickableimage.cxx21
-rw-r--r--forms/source/component/clickableimage.hxx5
2 files changed, 26 insertions, 0 deletions
diff --git a/forms/source/component/clickableimage.cxx b/forms/source/component/clickableimage.cxx
index 90518576a0f0..77c2410f39b4 100644
--- a/forms/source/component/clickableimage.cxx
+++ b/forms/source/component/clickableimage.cxx
@@ -31,6 +31,8 @@
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/awt/ActionEvent.hpp>
#include <com/sun/star/awt/XActionListener.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/graphic/GraphicObject.hpp>
#include <tools/urlobj.hxx>
#include <tools/debug.hxx>
#include <vcl/svapp.hxx>
@@ -62,6 +64,7 @@ namespace frm
using namespace ::com::sun::star::util;
using namespace ::com::sun::star::frame;
using namespace ::com::sun::star::form::submission;
+ using namespace ::com::sun::star::graphic;
using ::com::sun::star::awt::MouseEvent;
using ::com::sun::star::task::XInteractionHandler;
@@ -451,6 +454,7 @@ namespace frm
const OUString& rDefault )
:OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault )
,OPropertyChangeListener(m_aMutex)
+ ,m_xGraphicObject()
,m_pMedium(NULL)
,m_pProducer( NULL )
,m_bDispatchUrlInternal(false)
@@ -465,6 +469,7 @@ namespace frm
OClickableImageBaseModel::OClickableImageBaseModel( const OClickableImageBaseModel* _pOriginal, const Reference<XComponentContext>& _rxFactory )
:OControlModel( _pOriginal, _rxFactory )
,OPropertyChangeListener( m_aMutex )
+ ,m_xGraphicObject( _pOriginal->m_xGraphicObject )
,m_pMedium( NULL )
,m_pProducer( NULL )
,m_bDispatchUrlInternal(false)
@@ -497,6 +502,7 @@ namespace frm
void OClickableImageBaseModel::implConstruct()
{
m_pProducer = new ImageProducer;
+ m_pProducer->SetDoneHdl( LINK( this, OClickableImageBaseModel, OnImageImportDone ) );
osl_atomic_increment( &m_refCount );
{
m_xProducer = m_pProducer;
@@ -851,6 +857,21 @@ namespace frm
}
}
+ IMPL_LINK( OClickableImageBaseModel, OnImageImportDone, Graphic*, i_pGraphic )
+ {
+ const Reference< XGraphic > xGraphic( i_pGraphic != NULL ? Graphic(i_pGraphic->GetBitmapEx()).GetXGraphic() : NULL );
+ if ( !xGraphic.is() )
+ {
+ m_xGraphicObject.clear();
+ }
+ else
+ {
+ m_xGraphicObject = GraphicObject::create( m_xContext );
+ m_xGraphicObject->setGraphic( xGraphic );
+ }
+ return 1L;
+ }
+
// OImageProducerThread_Impl
diff --git a/forms/source/component/clickableimage.hxx b/forms/source/component/clickableimage.hxx
index 5033375d6735..9337b3cbe061 100644
--- a/forms/source/component/clickableimage.hxx
+++ b/forms/source/component/clickableimage.hxx
@@ -33,6 +33,7 @@
#include <com/sun/star/form/submission/XSubmission.hpp>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
+#include <com/sun/star/graphic/XGraphicObject.hpp>
#include <cppuhelper/implbase3.hxx>
@@ -64,6 +65,8 @@ namespace frm
// ImageProducer stuff
::com::sun::star::uno::Reference< ::com::sun::star::awt::XImageProducer> m_xProducer;
+ // Store the image in a graphic object to make it accesible via graphic cache using graphic ID.
+ ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > m_xGraphicObject;
SfxMedium* m_pMedium; // Download medium
ImageProducer* m_pProducer;
bool m_bDispatchUrlInternal; // property: is not allowed to set : 1
@@ -143,6 +146,8 @@ namespace frm
// to be called from within the cloning-ctor of your derived class
void implInitializeImageURL( );
+
+ DECL_LINK( OnImageImportDone, ::Graphic* );
};
class ImageModelMethodGuard : public ::osl::MutexGuard