1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _TOOLKIT_AWT_VCLXGRAPHICS_HXX_
25 #define _TOOLKIT_AWT_VCLXGRAPHICS_HXX_
26 
27 
28 #include <com/sun/star/awt/XGraphics.hpp>
29 #include <com/sun/star/lang/XTypeProvider.hpp>
30 #include <com/sun/star/lang/XUnoTunnel.hpp>
31 #include <cppuhelper/weak.hxx>
32 #include <vos/mutex.hxx>
33 
34 #include <vcl/font.hxx>
35 #include <tools/color.hxx>
36 #include <vcl/vclenum.hxx>
37 
38 class OutputDevice;
39 class Region;
40 
41 
42 #define INITOUTDEV_FONT			0x0001
43 #define INITOUTDEV_COLORS		0x0002
44 #define INITOUTDEV_RASTEROP		0x0004
45 #define INITOUTDEV_CLIPREGION	0x0008
46 #define INITOUTDEV_ALL			0xFFFF
47 
48 
49 //	----------------------------------------------------
50 //	class VCLXGraphics
51 //	----------------------------------------------------
52 
53 class VCLXGraphics :	public ::com::sun::star::awt::XGraphics,
54 						public ::com::sun::star::lang::XTypeProvider,
55 						public ::com::sun::star::lang::XUnoTunnel,
56 						public ::cppu::OWeakObject
57 {
58 private:
59 	vos::IMutex&	mrMutex;	// Reference to SolarMutex
60 	::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice> mxDevice;	// nur um bei getDevice() immer das gleiche zurueckzugeben
61 
62 	OutputDevice*	mpOutputDevice;
63 	Font			maFont;
64 	Color			maTextColor;
65 	Color			maTextFillColor;
66 	Color			maLineColor;
67 	Color			maFillColor;
68 	RasterOp		meRasterOp;
69 	Region*			mpClipRegion;
70 
71 protected:
72 	vos::IMutex&	GetMutex() { return mrMutex; }
73 
74 public:
75 					VCLXGraphics();
76 					~VCLXGraphics();
77 
78 	void			Init( OutputDevice* pOutDev );
79 	void			InitOutputDevice( sal_uInt16 nFlags );
80 
81 	void			SetOutputDevice( OutputDevice* pOutDev );
82 	OutputDevice*	GetOutputDevice() const { return mpOutputDevice; }
83 
84 	const Font&		GetFont() const { return maFont; }
85 
86 	// ::com::sun::star::uno::XInterface
87     ::com::sun::star::uno::Any					SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
88 	void										SAL_CALL acquire() throw()	{ OWeakObject::acquire(); }
89 	void										SAL_CALL release() throw()	{ OWeakObject::release(); }
90 
91 	// ::com::sun::star::lang::XUnoTunnel
92 	static const ::com::sun::star::uno::Sequence< sal_Int8 >&	GetUnoTunnelId() throw();
93 	static VCLXGraphics*										GetImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxIFace ) throw();
94 	sal_Int64													SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rIdentifier ) throw(::com::sun::star::uno::RuntimeException);
95 
96 	// ::com::sun::star::lang::XTypeProvider
97 	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >	SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
98 	::com::sun::star::uno::Sequence< sal_Int8 >						SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
99 
100 	// ::com::sun::star::awt::XGraphics
101     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice >	SAL_CALL getDevice(  ) throw(::com::sun::star::uno::RuntimeException);
102     ::com::sun::star::awt::SimpleFontMetric								SAL_CALL getFontMetric() throw(::com::sun::star::uno::RuntimeException);
103     void		SAL_CALL setFont( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFont >& xNewFont ) throw(::com::sun::star::uno::RuntimeException);
104     void		SAL_CALL selectFont( const ::com::sun::star::awt::FontDescriptor& aDescription ) throw(::com::sun::star::uno::RuntimeException);
105     void		SAL_CALL setTextColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException);
106     void		SAL_CALL setTextFillColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException);
107     void		SAL_CALL setLineColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException);
108     void		SAL_CALL setFillColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException);
109     void		SAL_CALL setRasterOp( ::com::sun::star::awt::RasterOperation ROP ) throw(::com::sun::star::uno::RuntimeException);
110     void		SAL_CALL setClipRegion( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRegion >& Clipping ) throw(::com::sun::star::uno::RuntimeException);
111     void		SAL_CALL intersectClipRegion( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRegion >& xClipping ) throw(::com::sun::star::uno::RuntimeException);
112     void		SAL_CALL push(  ) throw(::com::sun::star::uno::RuntimeException);
113     void		SAL_CALL pop(  ) throw(::com::sun::star::uno::RuntimeException);
114     void		SAL_CALL copy( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice >& xSource, sal_Int32 nSourceX, sal_Int32 nSourceY, sal_Int32 nSourceWidth, sal_Int32 nSourceHeight, sal_Int32 nDestX, sal_Int32 nDestY, sal_Int32 nDestWidth, sal_Int32 nDestHeight ) throw(::com::sun::star::uno::RuntimeException);
115     void		SAL_CALL draw( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDisplayBitmap >& xBitmapHandle, sal_Int32 SourceX, sal_Int32 SourceY, sal_Int32 SourceWidth, sal_Int32 SourceHeight, sal_Int32 DestX, sal_Int32 DestY, sal_Int32 DestWidth, sal_Int32 DestHeight ) throw(::com::sun::star::uno::RuntimeException);
116     void		SAL_CALL drawPixel( sal_Int32 X, sal_Int32 Y ) throw(::com::sun::star::uno::RuntimeException);
117     void		SAL_CALL drawLine( sal_Int32 X1, sal_Int32 Y1, sal_Int32 X2, sal_Int32 Y2 ) throw(::com::sun::star::uno::RuntimeException);
118     void		SAL_CALL drawRect( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height ) throw(::com::sun::star::uno::RuntimeException);
119     void		SAL_CALL drawRoundedRect( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int32 nHorzRound, sal_Int32 nVertRound ) throw(::com::sun::star::uno::RuntimeException);
120     void		SAL_CALL drawPolyLine( const ::com::sun::star::uno::Sequence< sal_Int32 >& DataX, const ::com::sun::star::uno::Sequence< sal_Int32 >& DataY ) throw(::com::sun::star::uno::RuntimeException);
121     void		SAL_CALL drawPolygon( const ::com::sun::star::uno::Sequence< sal_Int32 >& DataX, const ::com::sun::star::uno::Sequence< sal_Int32 >& DataY ) throw(::com::sun::star::uno::RuntimeException);
122     void		SAL_CALL drawPolyPolygon( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< sal_Int32 > >& DataX, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< sal_Int32 > >& DataY ) throw(::com::sun::star::uno::RuntimeException);
123     void		SAL_CALL drawEllipse( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height ) throw(::com::sun::star::uno::RuntimeException);
124     void		SAL_CALL drawArc( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int32 X1, sal_Int32 Y1, sal_Int32 X2, sal_Int32 Y2 ) throw(::com::sun::star::uno::RuntimeException);
125     void		SAL_CALL drawPie( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int32 X1, sal_Int32 Y1, sal_Int32 X2, sal_Int32 Y2 ) throw(::com::sun::star::uno::RuntimeException);
126     void		SAL_CALL drawChord( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int32 nX1, sal_Int32 nY1, sal_Int32 nX2, sal_Int32 nY2 ) throw(::com::sun::star::uno::RuntimeException);
127     void		SAL_CALL drawGradient( sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 Height, const ::com::sun::star::awt::Gradient& aGradient ) throw(::com::sun::star::uno::RuntimeException);
128     void		SAL_CALL drawText( sal_Int32 X, sal_Int32 Y, const ::rtl::OUString& Text ) throw(::com::sun::star::uno::RuntimeException);
129     void		SAL_CALL drawTextArray( sal_Int32 X, sal_Int32 Y, const ::rtl::OUString& Text, const ::com::sun::star::uno::Sequence< sal_Int32 >& Longs ) throw(::com::sun::star::uno::RuntimeException);
130 };
131 
132 
133 
134 
135 #endif // _TOOLKIT_AWT_VCLXGRAPHICS_HXX_
136 
137