1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_framework.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include <classes/imagewrapper.hxx>
32*cdf0e10cSrcweir #include <osl/mutex.hxx>
33*cdf0e10cSrcweir #include <vcl/svapp.hxx>
34*cdf0e10cSrcweir #include <vcl/bitmap.hxx>
35*cdf0e10cSrcweir #include <vcl/bitmapex.hxx>
36*cdf0e10cSrcweir #include <tools/stream.hxx>
37*cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx>
38*cdf0e10cSrcweir 
39*cdf0e10cSrcweir using namespace com::sun::star::lang;
40*cdf0e10cSrcweir using namespace com::sun::star::uno;
41*cdf0e10cSrcweir 
42*cdf0e10cSrcweir namespace framework
43*cdf0e10cSrcweir {
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir static Sequence< sal_Int8 > impl_getStaticIdentifier()
46*cdf0e10cSrcweir {
47*cdf0e10cSrcweir     static sal_uInt8 pGUID[16] = { 0x46, 0xAD, 0x69, 0xFB, 0xA7, 0xBE, 0x44, 0x83, 0xB2, 0xA7, 0xB3, 0xEC, 0x59, 0x4A, 0xB7, 0x00 };
48*cdf0e10cSrcweir     static ::com::sun::star::uno::Sequence< sal_Int8 > seqID((sal_Int8*)pGUID,16) ;
49*cdf0e10cSrcweir     return seqID ;
50*cdf0e10cSrcweir }
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir ImageWrapper::ImageWrapper( const Image& aImage ) : ThreadHelpBase( &Application::GetSolarMutex() )
54*cdf0e10cSrcweir 													,	m_aImage( aImage )
55*cdf0e10cSrcweir {
56*cdf0e10cSrcweir }
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir ImageWrapper::~ImageWrapper()
60*cdf0e10cSrcweir {
61*cdf0e10cSrcweir }
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir Sequence< sal_Int8 > ImageWrapper::GetUnoTunnelId()
65*cdf0e10cSrcweir {
66*cdf0e10cSrcweir 	return impl_getStaticIdentifier();
67*cdf0e10cSrcweir }
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir // XBitmap
70*cdf0e10cSrcweir com::sun::star::awt::Size SAL_CALL ImageWrapper::getSize() throw ( RuntimeException )
71*cdf0e10cSrcweir {
72*cdf0e10cSrcweir 	vos::OGuard	aGuard( Application::GetSolarMutex() );
73*cdf0e10cSrcweir 
74*cdf0e10cSrcweir 	BitmapEx	aBitmapEx( m_aImage.GetBitmapEx() );
75*cdf0e10cSrcweir 	Size		aBitmapSize( aBitmapEx.GetSizePixel() );
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir 	return com::sun::star::awt::Size( aBitmapSize.Width(), aBitmapSize.Height() );
78*cdf0e10cSrcweir }
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL ImageWrapper::getDIB() throw ( RuntimeException )
81*cdf0e10cSrcweir {
82*cdf0e10cSrcweir 	vos::OGuard	aGuard( Application::GetSolarMutex() );
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir 	SvMemoryStream aMem;
85*cdf0e10cSrcweir 	aMem << m_aImage.GetBitmapEx().GetBitmap();
86*cdf0e10cSrcweir 	return Sequence< sal_Int8 >( (sal_Int8*) aMem.GetData(), aMem.Tell() );
87*cdf0e10cSrcweir }
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir Sequence< sal_Int8 > SAL_CALL ImageWrapper::getMaskDIB() throw ( RuntimeException )
90*cdf0e10cSrcweir {
91*cdf0e10cSrcweir 	vos::OGuard	aGuard( Application::GetSolarMutex() );
92*cdf0e10cSrcweir 	BitmapEx 	aBmpEx( m_aImage.GetBitmapEx() );
93*cdf0e10cSrcweir 
94*cdf0e10cSrcweir 	if ( aBmpEx.IsAlpha() )
95*cdf0e10cSrcweir 	{
96*cdf0e10cSrcweir 		SvMemoryStream aMem;
97*cdf0e10cSrcweir 		aMem << aBmpEx.GetAlpha().GetBitmap();
98*cdf0e10cSrcweir 		return Sequence< sal_Int8 >( (sal_Int8*) aMem.GetData(), aMem.Tell() );
99*cdf0e10cSrcweir 	}
100*cdf0e10cSrcweir 	else if ( aBmpEx.IsTransparent() )
101*cdf0e10cSrcweir 	{
102*cdf0e10cSrcweir 		SvMemoryStream aMem;
103*cdf0e10cSrcweir 		aMem << aBmpEx.GetMask();
104*cdf0e10cSrcweir 		return Sequence< sal_Int8 >( (sal_Int8*) aMem.GetData(), aMem.Tell() );
105*cdf0e10cSrcweir 	}
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir 	return Sequence< sal_Int8 >();
108*cdf0e10cSrcweir }
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir // XUnoTunnel
111*cdf0e10cSrcweir sal_Int64 SAL_CALL ImageWrapper::getSomething( const Sequence< sal_Int8 >& aIdentifier ) throw ( RuntimeException )
112*cdf0e10cSrcweir {
113*cdf0e10cSrcweir     if ( aIdentifier == impl_getStaticIdentifier() )
114*cdf0e10cSrcweir         return reinterpret_cast< sal_Int64 >( this );
115*cdf0e10cSrcweir     else
116*cdf0e10cSrcweir         return 0;
117*cdf0e10cSrcweir }
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir }
120*cdf0e10cSrcweir 
121