1*25b11142SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*25b11142SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*25b11142SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*25b11142SAndrew Rist  * distributed with this work for additional information
6*25b11142SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*25b11142SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*25b11142SAndrew Rist  * "License"); you may not use this file except in compliance
9*25b11142SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*25b11142SAndrew Rist  *
11*25b11142SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*25b11142SAndrew Rist  *
13*25b11142SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*25b11142SAndrew Rist  * software distributed under the License is distributed on an
15*25b11142SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*25b11142SAndrew Rist  * KIND, either express or implied.  See the License for the
17*25b11142SAndrew Rist  * specific language governing permissions and limitations
18*25b11142SAndrew Rist  * under the License.
19*25b11142SAndrew Rist  *
20*25b11142SAndrew Rist  *************************************************************/
21*25b11142SAndrew Rist 
22*25b11142SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_cppcanvas.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include "implbitmap.hxx"
28cdf0e10cSrcweir #include "implbitmapcanvas.hxx"
29cdf0e10cSrcweir 
30cdf0e10cSrcweir #include <basegfx/matrix/b2dhommatrix.hxx>
31cdf0e10cSrcweir #include <canvas/canvastools.hxx>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir 
34cdf0e10cSrcweir using namespace ::com::sun::star;
35cdf0e10cSrcweir 
36cdf0e10cSrcweir namespace cppcanvas
37cdf0e10cSrcweir {
38cdf0e10cSrcweir 
39cdf0e10cSrcweir     namespace internal
40cdf0e10cSrcweir     {
41cdf0e10cSrcweir 
ImplBitmap(const CanvasSharedPtr & rParentCanvas,const uno::Reference<rendering::XBitmap> & rBitmap)42cdf0e10cSrcweir         ImplBitmap::ImplBitmap( const CanvasSharedPtr& 						rParentCanvas,
43cdf0e10cSrcweir                                 const uno::Reference< rendering::XBitmap >& rBitmap ) :
44cdf0e10cSrcweir             CanvasGraphicHelper( rParentCanvas ),
45cdf0e10cSrcweir             mxBitmap( rBitmap ),
46cdf0e10cSrcweir             mpBitmapCanvas()
47cdf0e10cSrcweir         {
48cdf0e10cSrcweir             OSL_ENSURE( mxBitmap.is(), "ImplBitmap::ImplBitmap: no valid bitmap" );
49cdf0e10cSrcweir 
50cdf0e10cSrcweir             uno::Reference< rendering::XBitmapCanvas > xBitmapCanvas( rBitmap,
51cdf0e10cSrcweir                                                                       uno::UNO_QUERY );
52cdf0e10cSrcweir             if( xBitmapCanvas.is() )
53cdf0e10cSrcweir                 mpBitmapCanvas.reset( new ImplBitmapCanvas(
54cdf0e10cSrcweir                                           uno::Reference< rendering::XBitmapCanvas >(rBitmap,
55cdf0e10cSrcweir                                                                                      uno::UNO_QUERY) ) );
56cdf0e10cSrcweir         }
57cdf0e10cSrcweir 
~ImplBitmap()58cdf0e10cSrcweir         ImplBitmap::~ImplBitmap()
59cdf0e10cSrcweir         {
60cdf0e10cSrcweir         }
61cdf0e10cSrcweir 
draw() const62cdf0e10cSrcweir         bool ImplBitmap::draw() const
63cdf0e10cSrcweir         {
64cdf0e10cSrcweir             CanvasSharedPtr pCanvas( getCanvas() );
65cdf0e10cSrcweir 
66cdf0e10cSrcweir             OSL_ENSURE( pCanvas.get() != NULL &&
67cdf0e10cSrcweir                         pCanvas->getUNOCanvas().is(),
68cdf0e10cSrcweir                         "ImplBitmap::draw: invalid canvas" );
69cdf0e10cSrcweir 
70cdf0e10cSrcweir             if( pCanvas.get() == NULL ||
71cdf0e10cSrcweir                 !pCanvas->getUNOCanvas().is() )
72cdf0e10cSrcweir             {
73cdf0e10cSrcweir                 return false;
74cdf0e10cSrcweir             }
75cdf0e10cSrcweir 
76cdf0e10cSrcweir             // TODO(P1): implement caching
77cdf0e10cSrcweir             pCanvas->getUNOCanvas()->drawBitmap( mxBitmap,
78cdf0e10cSrcweir                                                  pCanvas->getViewState(),
79cdf0e10cSrcweir                                                  getRenderState() );
80cdf0e10cSrcweir 
81cdf0e10cSrcweir             return true;
82cdf0e10cSrcweir         }
83cdf0e10cSrcweir 
drawAlphaModulated(double nAlphaModulation) const84cdf0e10cSrcweir         bool ImplBitmap::drawAlphaModulated( double nAlphaModulation ) const
85cdf0e10cSrcweir         {
86cdf0e10cSrcweir             CanvasSharedPtr pCanvas( getCanvas() );
87cdf0e10cSrcweir 
88cdf0e10cSrcweir             OSL_ENSURE( pCanvas.get() != NULL &&
89cdf0e10cSrcweir                         pCanvas->getUNOCanvas().is(),
90cdf0e10cSrcweir                         "ImplBitmap::drawAlphaModulated(): invalid canvas" );
91cdf0e10cSrcweir 
92cdf0e10cSrcweir             if( pCanvas.get() == NULL ||
93cdf0e10cSrcweir                 !pCanvas->getUNOCanvas().is() )
94cdf0e10cSrcweir             {
95cdf0e10cSrcweir                 return false;
96cdf0e10cSrcweir             }
97cdf0e10cSrcweir 
98cdf0e10cSrcweir             rendering::RenderState aLocalState( getRenderState() );
99cdf0e10cSrcweir             uno::Sequence<rendering::ARGBColor> aCol(1);
100cdf0e10cSrcweir             aCol[0] = rendering::ARGBColor( nAlphaModulation, 1.0, 1.0, 1.0 );
101cdf0e10cSrcweir             aLocalState.DeviceColor =
102cdf0e10cSrcweir                 pCanvas->getUNOCanvas()->getDevice()->getDeviceColorSpace()->convertFromARGB(aCol);
103cdf0e10cSrcweir 
104cdf0e10cSrcweir             // TODO(P1): implement caching
105cdf0e10cSrcweir             pCanvas->getUNOCanvas()->drawBitmapModulated( mxBitmap,
106cdf0e10cSrcweir                                                           pCanvas->getViewState(),
107cdf0e10cSrcweir                                                           aLocalState );
108cdf0e10cSrcweir 
109cdf0e10cSrcweir             return true;
110cdf0e10cSrcweir         }
111cdf0e10cSrcweir 
getBitmapCanvas() const112cdf0e10cSrcweir         BitmapCanvasSharedPtr ImplBitmap::getBitmapCanvas() const
113cdf0e10cSrcweir         {
114cdf0e10cSrcweir             return mpBitmapCanvas;
115cdf0e10cSrcweir         }
116cdf0e10cSrcweir 
getUNOBitmap() const117cdf0e10cSrcweir         uno::Reference< rendering::XBitmap > ImplBitmap::getUNOBitmap() const
118cdf0e10cSrcweir         {
119cdf0e10cSrcweir             return mxBitmap;
120cdf0e10cSrcweir         }
121cdf0e10cSrcweir     }
122cdf0e10cSrcweir }
123