1*91c99ff4SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*91c99ff4SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*91c99ff4SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*91c99ff4SAndrew Rist  * distributed with this work for additional information
6*91c99ff4SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*91c99ff4SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*91c99ff4SAndrew Rist  * "License"); you may not use this file except in compliance
9*91c99ff4SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*91c99ff4SAndrew Rist  *
11*91c99ff4SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*91c99ff4SAndrew Rist  *
13*91c99ff4SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*91c99ff4SAndrew Rist  * software distributed under the License is distributed on an
15*91c99ff4SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*91c99ff4SAndrew Rist  * KIND, either express or implied.  See the License for the
17*91c99ff4SAndrew Rist  * specific language governing permissions and limitations
18*91c99ff4SAndrew Rist  * under the License.
19*91c99ff4SAndrew Rist  *
20*91c99ff4SAndrew Rist  *************************************************************/
21*91c99ff4SAndrew Rist 
22*91c99ff4SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _DXCANVAS_BITMAPCANVASHELPER_HXX_
25cdf0e10cSrcweir #define _DXCANVAS_BITMAPCANVASHELPER_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <com/sun/star/rendering/XCanvas.hpp>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <basegfx/vector/b2isize.hxx>
30cdf0e10cSrcweir #include <basegfx/vector/b2dsize.hxx>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir #include "dx_graphicsprovider.hxx"
33cdf0e10cSrcweir #include "dx_ibitmap.hxx"
34cdf0e10cSrcweir #include "dx_gdiplususer.hxx"
35cdf0e10cSrcweir #include "dx_impltools.hxx"
36cdf0e10cSrcweir #include "dx_canvashelper.hxx"
37cdf0e10cSrcweir 
38cdf0e10cSrcweir #include <boost/utility.hpp>
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 
41cdf0e10cSrcweir namespace dxcanvas
42cdf0e10cSrcweir {
43cdf0e10cSrcweir     /** Helper class for basic canvas functionality. Also offers
44cdf0e10cSrcweir         optional backbuffer painting, when providing it with a second
45cdf0e10cSrcweir         HDC to render into.
46cdf0e10cSrcweir      */
47cdf0e10cSrcweir     class BitmapCanvasHelper : public CanvasHelper
48cdf0e10cSrcweir     {
49cdf0e10cSrcweir     public:
50cdf0e10cSrcweir         BitmapCanvasHelper();
51cdf0e10cSrcweir 
52cdf0e10cSrcweir         /// Release all references
53cdf0e10cSrcweir         void disposing();
54cdf0e10cSrcweir 
55cdf0e10cSrcweir         /** Set the target for rendering operations
56cdf0e10cSrcweir 
57cdf0e10cSrcweir             @param rTarget
58cdf0e10cSrcweir             Render target
59cdf0e10cSrcweir          */
60cdf0e10cSrcweir         void setTarget( const IBitmapSharedPtr& rTarget );
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         /** Set the target for rendering operations
63cdf0e10cSrcweir 
64cdf0e10cSrcweir             @param rTarget
65cdf0e10cSrcweir             Render target
66cdf0e10cSrcweir 
67cdf0e10cSrcweir             @param rOutputOffset
68cdf0e10cSrcweir             Output offset in pixel
69cdf0e10cSrcweir          */
70cdf0e10cSrcweir         void setTarget( const IBitmapSharedPtr&   rTarget,
71cdf0e10cSrcweir                         const ::basegfx::B2ISize& rOutputOffset );
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 
74cdf0e10cSrcweir         // CanvasHelper functionality is implementation-inherited. yuck.
75cdf0e10cSrcweir         // =============================================================
76cdf0e10cSrcweir         void clear();
77cdf0e10cSrcweir 
78cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XCachedPrimitive >
79cdf0e10cSrcweir         	drawTextLayout( const ::com::sun::star::rendering::XCanvas* 	pCanvas,
80cdf0e10cSrcweir                             const ::com::sun::star::uno::Reference<
81cdf0e10cSrcweir                             	::com::sun::star::rendering::XTextLayout >& layoutetText,
82cdf0e10cSrcweir                             const ::com::sun::star::rendering::ViewState& 	viewState,
83cdf0e10cSrcweir                             const ::com::sun::star::rendering::RenderState& renderState );
84cdf0e10cSrcweir 
85cdf0e10cSrcweir         // BitmapCanvasHelper functionality
86cdf0e10cSrcweir         // ================================
87cdf0e10cSrcweir 
88cdf0e10cSrcweir         void copyRect( const ::com::sun::star::rendering::XCanvas* 			pCanvas,
89cdf0e10cSrcweir                        const ::com::sun::star::uno::Reference<
90cdf0e10cSrcweir                        		::com::sun::star::rendering::XBitmapCanvas >& 	sourceCanvas,
91cdf0e10cSrcweir                        const ::com::sun::star::geometry::RealRectangle2D& 	sourceRect,
92cdf0e10cSrcweir                        const ::com::sun::star::rendering::ViewState& 		sourceViewState,
93cdf0e10cSrcweir                        const ::com::sun::star::rendering::RenderState& 		sourceRenderState,
94cdf0e10cSrcweir                        const ::com::sun::star::geometry::RealRectangle2D& 	destRect,
95cdf0e10cSrcweir                        const ::com::sun::star::rendering::ViewState& 		destViewState,
96cdf0e10cSrcweir                        const ::com::sun::star::rendering::RenderState& 		destRenderState );
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         ::com::sun::star::geometry::IntegerSize2D getSize();
99cdf0e10cSrcweir 
100cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmap >
101cdf0e10cSrcweir         	getScaledBitmap( const ::com::sun::star::geometry::RealSize2D& 	newSize,
102cdf0e10cSrcweir                              sal_Bool 										beFast );
103cdf0e10cSrcweir 
104cdf0e10cSrcweir         ::com::sun::star::uno::Sequence< sal_Int8 >
105cdf0e10cSrcweir 	        getData( ::com::sun::star::rendering::IntegerBitmapLayout& 		bitmapLayout,
106cdf0e10cSrcweir                      const ::com::sun::star::geometry::IntegerRectangle2D&  rect );
107cdf0e10cSrcweir 
108cdf0e10cSrcweir         void setData( const ::com::sun::star::uno::Sequence< sal_Int8 >&         data,
109cdf0e10cSrcweir                       const ::com::sun::star::rendering::IntegerBitmapLayout&    bitmapLayout,
110cdf0e10cSrcweir                       const ::com::sun::star::geometry::IntegerRectangle2D&      rect );
111cdf0e10cSrcweir 
112cdf0e10cSrcweir         void setPixel( const ::com::sun::star::uno::Sequence< sal_Int8 >&        color,
113cdf0e10cSrcweir                        const ::com::sun::star::rendering::IntegerBitmapLayout&   bitmapLayout,
114cdf0e10cSrcweir                        const ::com::sun::star::geometry::IntegerPoint2D&         pos );
115cdf0e10cSrcweir 
116cdf0e10cSrcweir         ::com::sun::star::uno::Sequence< sal_Int8 >
117cdf0e10cSrcweir 	        getPixel( ::com::sun::star::rendering::IntegerBitmapLayout& bitmapLayout,
118cdf0e10cSrcweir                       const ::com::sun::star::geometry::IntegerPoint2D& pos );
119cdf0e10cSrcweir 
120cdf0e10cSrcweir         ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XBitmapPalette > getPalette();
121cdf0e10cSrcweir 
122cdf0e10cSrcweir         ::com::sun::star::rendering::IntegerBitmapLayout getMemoryLayout();
123cdf0e10cSrcweir 
124cdf0e10cSrcweir         bool hasAlpha() const;
125cdf0e10cSrcweir 
126cdf0e10cSrcweir     protected:
127cdf0e10cSrcweir         /// Render target
128cdf0e10cSrcweir         IBitmapSharedPtr mpTarget;
129cdf0e10cSrcweir     };
130cdf0e10cSrcweir }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir #endif /* _DXCANVAS_BITMAPCANVASHELPER_HXX_ */
133