1b0724fc6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3b0724fc6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4b0724fc6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5b0724fc6SAndrew Rist * distributed with this work for additional information 6b0724fc6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7b0724fc6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8b0724fc6SAndrew Rist * "License"); you may not use this file except in compliance 9b0724fc6SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11b0724fc6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13b0724fc6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14b0724fc6SAndrew Rist * software distributed under the License is distributed on an 15b0724fc6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b0724fc6SAndrew Rist * KIND, either express or implied. See the License for the 17b0724fc6SAndrew Rist * specific language governing permissions and limitations 18b0724fc6SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20b0724fc6SAndrew Rist *************************************************************/ 21b0724fc6SAndrew Rist 22b0724fc6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_toolkit.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <toolkit/awt/vclxgraphics.hxx> 28cdf0e10cSrcweir #include <toolkit/awt/vclxdevice.hxx> 29*d1dc9aaeSAriel Constenla-Haile #include <toolkit/awt/vclxfont.hxx> 30cdf0e10cSrcweir #include <toolkit/helper/macros.hxx> 31cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx> 32cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx> 33cdf0e10cSrcweir #include <rtl/memory.h> 34cdf0e10cSrcweir #include <rtl/uuid.h> 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include <vcl/svapp.hxx> 37cdf0e10cSrcweir #include <vcl/outdev.hxx> 38*d1dc9aaeSAriel Constenla-Haile #include <vcl/image.hxx> 39cdf0e10cSrcweir #include <vcl/gradient.hxx> 40cdf0e10cSrcweir #include <tools/debug.hxx> 41cdf0e10cSrcweir 42*d1dc9aaeSAriel Constenla-Haile using namespace com::sun::star; 43cdf0e10cSrcweir 44cdf0e10cSrcweir // ---------------------------------------------------- 45cdf0e10cSrcweir // class VCLXGraphics 46cdf0e10cSrcweir // ---------------------------------------------------- 47cdf0e10cSrcweir 48*d1dc9aaeSAriel Constenla-Haile // uno::XInterface 49*d1dc9aaeSAriel Constenla-Haile uno::Any VCLXGraphics::queryInterface( const uno::Type & rType ) throw(uno::RuntimeException) 50cdf0e10cSrcweir { 51*d1dc9aaeSAriel Constenla-Haile uno::Any aRet = ::cppu::queryInterface( rType, 52*d1dc9aaeSAriel Constenla-Haile SAL_STATIC_CAST( awt::XGraphics*, this ), 53*d1dc9aaeSAriel Constenla-Haile SAL_STATIC_CAST( lang::XTypeProvider*, this ), 54*d1dc9aaeSAriel Constenla-Haile SAL_STATIC_CAST( lang::XUnoTunnel*, this ) ); 55cdf0e10cSrcweir return (aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType )); 56cdf0e10cSrcweir } 57cdf0e10cSrcweir 58*d1dc9aaeSAriel Constenla-Haile // lang::XUnoTunnel 59cdf0e10cSrcweir IMPL_XUNOTUNNEL( VCLXGraphics ) 60cdf0e10cSrcweir 61*d1dc9aaeSAriel Constenla-Haile // lang::XTypeProvider 62cdf0e10cSrcweir IMPL_XTYPEPROVIDER_START( VCLXGraphics ) 63*d1dc9aaeSAriel Constenla-Haile getCppuType( ( uno::Reference< awt::XGraphics>* ) NULL ) 64cdf0e10cSrcweir IMPL_XTYPEPROVIDER_END 65cdf0e10cSrcweir 66cdf0e10cSrcweir VCLXGraphics::VCLXGraphics() : mrMutex( Application::GetSolarMutex() ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir mpOutputDevice = NULL; 69cdf0e10cSrcweir mpClipRegion = NULL; 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir VCLXGraphics::~VCLXGraphics() 73cdf0e10cSrcweir { 74cdf0e10cSrcweir List* pLst = mpOutputDevice ? mpOutputDevice->GetUnoGraphicsList() : NULL; 75cdf0e10cSrcweir if ( pLst ) 76cdf0e10cSrcweir pLst->Remove( this ); 77cdf0e10cSrcweir 78cdf0e10cSrcweir delete mpClipRegion; 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir void VCLXGraphics::SetOutputDevice( OutputDevice* pOutDev ) 82cdf0e10cSrcweir { 83cdf0e10cSrcweir mpOutputDevice = pOutDev; 84cdf0e10cSrcweir mxDevice = NULL; 85*d1dc9aaeSAriel Constenla-Haile initAttrs(); 86cdf0e10cSrcweir } 87cdf0e10cSrcweir 88cdf0e10cSrcweir void VCLXGraphics::Init( OutputDevice* pOutDev ) 89cdf0e10cSrcweir { 90cdf0e10cSrcweir DBG_ASSERT( !mpOutputDevice, "VCLXGraphics::Init allready has pOutDev !" ); 91cdf0e10cSrcweir mpOutputDevice = pOutDev; 92cdf0e10cSrcweir 93*d1dc9aaeSAriel Constenla-Haile initAttrs(); 94cdf0e10cSrcweir mpClipRegion = NULL; 95cdf0e10cSrcweir 96cdf0e10cSrcweir // Register at OutputDevice 97cdf0e10cSrcweir List* pLst = mpOutputDevice->GetUnoGraphicsList(); 98cdf0e10cSrcweir if ( !pLst ) 99cdf0e10cSrcweir pLst = mpOutputDevice->CreateUnoGraphicsList(); 100cdf0e10cSrcweir pLst->Insert( this, LIST_APPEND ); 101cdf0e10cSrcweir } 102cdf0e10cSrcweir 103*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::initAttrs() 104*d1dc9aaeSAriel Constenla-Haile { 105*d1dc9aaeSAriel Constenla-Haile if ( !mpOutputDevice ) 106*d1dc9aaeSAriel Constenla-Haile return; 107*d1dc9aaeSAriel Constenla-Haile 108*d1dc9aaeSAriel Constenla-Haile maFont = mpOutputDevice->GetFont(); 109*d1dc9aaeSAriel Constenla-Haile maTextColor = mpOutputDevice->GetTextColor(); /* COL_BLACK */ 110*d1dc9aaeSAriel Constenla-Haile maTextFillColor = mpOutputDevice->GetTextFillColor(); /* COL_TRANSPARENT */ 111*d1dc9aaeSAriel Constenla-Haile maLineColor = mpOutputDevice->GetLineColor(); /* COL_BLACK */ 112*d1dc9aaeSAriel Constenla-Haile maFillColor = mpOutputDevice->GetFillColor(); /* COL_WHITE */ 113*d1dc9aaeSAriel Constenla-Haile meRasterOp = mpOutputDevice->GetRasterOp(); /* ROP_OVERPAINT */ 114*d1dc9aaeSAriel Constenla-Haile } 115*d1dc9aaeSAriel Constenla-Haile 116cdf0e10cSrcweir void VCLXGraphics::InitOutputDevice( sal_uInt16 nFlags ) 117cdf0e10cSrcweir { 118cdf0e10cSrcweir if(mpOutputDevice) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir vos::OGuard aVclGuard( Application::GetSolarMutex() ); 121cdf0e10cSrcweir 122cdf0e10cSrcweir if ( nFlags & INITOUTDEV_FONT ) 123cdf0e10cSrcweir { 124cdf0e10cSrcweir mpOutputDevice->SetFont( maFont ); 125cdf0e10cSrcweir mpOutputDevice->SetTextColor( maTextColor ); 126cdf0e10cSrcweir mpOutputDevice->SetTextFillColor( maTextFillColor ); 127cdf0e10cSrcweir } 128cdf0e10cSrcweir 129cdf0e10cSrcweir if ( nFlags & INITOUTDEV_COLORS ) 130cdf0e10cSrcweir { 131cdf0e10cSrcweir mpOutputDevice->SetLineColor( maLineColor ); 132cdf0e10cSrcweir mpOutputDevice->SetFillColor( maFillColor ); 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir if ( nFlags & INITOUTDEV_RASTEROP ) 136cdf0e10cSrcweir { 137cdf0e10cSrcweir mpOutputDevice->SetRasterOp( meRasterOp ); 138cdf0e10cSrcweir } 139cdf0e10cSrcweir 140cdf0e10cSrcweir if ( nFlags & INITOUTDEV_CLIPREGION ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir if( mpClipRegion ) 143cdf0e10cSrcweir mpOutputDevice->SetClipRegion( *mpClipRegion ); 144cdf0e10cSrcweir else 145cdf0e10cSrcweir mpOutputDevice->SetClipRegion(); 146cdf0e10cSrcweir } 147cdf0e10cSrcweir } 148cdf0e10cSrcweir } 149cdf0e10cSrcweir 150*d1dc9aaeSAriel Constenla-Haile uno::Reference< awt::XDevice > VCLXGraphics::getDevice() throw(uno::RuntimeException) 151cdf0e10cSrcweir { 152cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 153cdf0e10cSrcweir 154cdf0e10cSrcweir if( !mxDevice.is() && mpOutputDevice ) 155cdf0e10cSrcweir { 156cdf0e10cSrcweir VCLXDevice* pDev = new VCLXDevice; 157cdf0e10cSrcweir pDev->SetOutputDevice( mpOutputDevice ); 158cdf0e10cSrcweir mxDevice = pDev; 159cdf0e10cSrcweir } 160cdf0e10cSrcweir return mxDevice; 161cdf0e10cSrcweir } 162cdf0e10cSrcweir 163*d1dc9aaeSAriel Constenla-Haile awt::SimpleFontMetric VCLXGraphics::getFontMetric() throw(uno::RuntimeException) 164cdf0e10cSrcweir { 165cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 166cdf0e10cSrcweir 167*d1dc9aaeSAriel Constenla-Haile awt::SimpleFontMetric aM; 168cdf0e10cSrcweir if( mpOutputDevice ) 169cdf0e10cSrcweir { 170cdf0e10cSrcweir mpOutputDevice->SetFont( maFont ); 171cdf0e10cSrcweir aM = VCLUnoHelper::CreateFontMetric( mpOutputDevice->GetFontMetric() ); 172cdf0e10cSrcweir } 173cdf0e10cSrcweir return aM; 174cdf0e10cSrcweir } 175cdf0e10cSrcweir 176*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setFont( const uno::Reference< awt::XFont >& rxFont ) throw(uno::RuntimeException) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 179cdf0e10cSrcweir 180cdf0e10cSrcweir maFont = VCLUnoHelper::CreateFont( rxFont ); 181cdf0e10cSrcweir } 182cdf0e10cSrcweir 183*d1dc9aaeSAriel Constenla-Haile uno::Reference< awt::XFont > VCLXGraphics::getFont() throw(uno::RuntimeException) 184*d1dc9aaeSAriel Constenla-Haile { 185*d1dc9aaeSAriel Constenla-Haile uno::Reference< awt::XFont > xFont; 186*d1dc9aaeSAriel Constenla-Haile uno::Reference< awt::XDevice > xDevice( getDevice() ); 187*d1dc9aaeSAriel Constenla-Haile 188*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 189*d1dc9aaeSAriel Constenla-Haile 190*d1dc9aaeSAriel Constenla-Haile if ( xDevice.is() ) 191*d1dc9aaeSAriel Constenla-Haile { 192*d1dc9aaeSAriel Constenla-Haile VCLXFont *pFont = new VCLXFont; 193*d1dc9aaeSAriel Constenla-Haile pFont->Init( *xDevice.get(), maFont ); 194*d1dc9aaeSAriel Constenla-Haile xFont.set( static_cast< ::cppu::OWeakObject* >( pFont ), uno::UNO_QUERY ); 195*d1dc9aaeSAriel Constenla-Haile } 196*d1dc9aaeSAriel Constenla-Haile 197*d1dc9aaeSAriel Constenla-Haile return xFont; 198*d1dc9aaeSAriel Constenla-Haile } 199*d1dc9aaeSAriel Constenla-Haile 200*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::selectFont( const awt::FontDescriptor& rDescription ) throw(uno::RuntimeException) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 203cdf0e10cSrcweir 204cdf0e10cSrcweir maFont = VCLUnoHelper::CreateFont( rDescription, Font() ); 205cdf0e10cSrcweir } 206cdf0e10cSrcweir 207*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setTextColor( sal_Int32 nColor ) throw(uno::RuntimeException) 208cdf0e10cSrcweir { 209cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 210cdf0e10cSrcweir 211cdf0e10cSrcweir maTextColor = Color( (sal_uInt32)nColor ); 212cdf0e10cSrcweir } 213cdf0e10cSrcweir 214*d1dc9aaeSAriel Constenla-Haile ::sal_Int32 VCLXGraphics::getTextColor() throw(uno::RuntimeException) 215*d1dc9aaeSAriel Constenla-Haile { 216*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 217*d1dc9aaeSAriel Constenla-Haile return maTextColor.GetColor(); 218*d1dc9aaeSAriel Constenla-Haile } 219*d1dc9aaeSAriel Constenla-Haile 220*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setTextFillColor( sal_Int32 nColor ) throw(uno::RuntimeException) 221cdf0e10cSrcweir { 222cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 223cdf0e10cSrcweir 224cdf0e10cSrcweir maTextFillColor = Color( (sal_uInt32)nColor ); 225cdf0e10cSrcweir } 226cdf0e10cSrcweir 227*d1dc9aaeSAriel Constenla-Haile ::sal_Int32 VCLXGraphics::getTextFillColor() throw(uno::RuntimeException) 228*d1dc9aaeSAriel Constenla-Haile { 229*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 230*d1dc9aaeSAriel Constenla-Haile return maTextFillColor.GetColor(); 231*d1dc9aaeSAriel Constenla-Haile } 232*d1dc9aaeSAriel Constenla-Haile 233*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setLineColor( sal_Int32 nColor ) throw(uno::RuntimeException) 234cdf0e10cSrcweir { 235cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 236cdf0e10cSrcweir 237cdf0e10cSrcweir maLineColor = Color( (sal_uInt32)nColor ); 238cdf0e10cSrcweir } 239cdf0e10cSrcweir 240*d1dc9aaeSAriel Constenla-Haile ::sal_Int32 VCLXGraphics::getLineColor() throw(uno::RuntimeException) 241*d1dc9aaeSAriel Constenla-Haile { 242*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 243*d1dc9aaeSAriel Constenla-Haile return maLineColor.GetColor(); 244*d1dc9aaeSAriel Constenla-Haile } 245*d1dc9aaeSAriel Constenla-Haile 246*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setFillColor( sal_Int32 nColor ) throw(uno::RuntimeException) 247cdf0e10cSrcweir { 248cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 249cdf0e10cSrcweir 250cdf0e10cSrcweir maFillColor = Color( (sal_uInt32)nColor ); 251cdf0e10cSrcweir } 252cdf0e10cSrcweir 253*d1dc9aaeSAriel Constenla-Haile ::sal_Int32 VCLXGraphics::getFillColor() throw(uno::RuntimeException) 254*d1dc9aaeSAriel Constenla-Haile { 255*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 256*d1dc9aaeSAriel Constenla-Haile return maFillColor.GetColor(); 257*d1dc9aaeSAriel Constenla-Haile } 258*d1dc9aaeSAriel Constenla-Haile 259*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setRasterOp( awt::RasterOperation eROP ) throw(uno::RuntimeException) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 262cdf0e10cSrcweir 263cdf0e10cSrcweir meRasterOp = (RasterOp)eROP; 264cdf0e10cSrcweir } 265cdf0e10cSrcweir 266*d1dc9aaeSAriel Constenla-Haile awt::RasterOperation VCLXGraphics::getRasterOp() 267*d1dc9aaeSAriel Constenla-Haile throw(uno::RuntimeException) 268*d1dc9aaeSAriel Constenla-Haile { 269*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 270*d1dc9aaeSAriel Constenla-Haile return (awt::RasterOperation) meRasterOp; 271*d1dc9aaeSAriel Constenla-Haile } 272*d1dc9aaeSAriel Constenla-Haile 273*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::setClipRegion( const uno::Reference< awt::XRegion >& rxRegion ) throw(uno::RuntimeException) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 276cdf0e10cSrcweir 277cdf0e10cSrcweir delete mpClipRegion; 278cdf0e10cSrcweir if ( rxRegion.is() ) 279cdf0e10cSrcweir mpClipRegion = new Region( VCLUnoHelper::GetRegion( rxRegion ) ); 280cdf0e10cSrcweir else 281cdf0e10cSrcweir mpClipRegion = NULL; 282cdf0e10cSrcweir } 283cdf0e10cSrcweir 284*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::intersectClipRegion( const uno::Reference< awt::XRegion >& rxRegion ) throw(uno::RuntimeException) 285cdf0e10cSrcweir { 286cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 287cdf0e10cSrcweir 288cdf0e10cSrcweir if ( rxRegion.is() ) 289cdf0e10cSrcweir { 290cdf0e10cSrcweir Region aRegion( VCLUnoHelper::GetRegion( rxRegion ) ); 291cdf0e10cSrcweir if ( !mpClipRegion ) 292cdf0e10cSrcweir mpClipRegion = new Region( aRegion ); 293cdf0e10cSrcweir else 294cdf0e10cSrcweir mpClipRegion->Intersect( aRegion ); 295cdf0e10cSrcweir } 296cdf0e10cSrcweir } 297cdf0e10cSrcweir 298*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::push( ) throw(uno::RuntimeException) 299cdf0e10cSrcweir { 300cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 301cdf0e10cSrcweir 302cdf0e10cSrcweir 303cdf0e10cSrcweir if( mpOutputDevice ) 304cdf0e10cSrcweir mpOutputDevice->Push(); 305cdf0e10cSrcweir } 306cdf0e10cSrcweir 307*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::pop( ) throw(uno::RuntimeException) 308cdf0e10cSrcweir { 309cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 310cdf0e10cSrcweir 311cdf0e10cSrcweir 312cdf0e10cSrcweir if( mpOutputDevice ) 313cdf0e10cSrcweir mpOutputDevice->Pop(); 314cdf0e10cSrcweir } 315cdf0e10cSrcweir 316*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::clear( 317*d1dc9aaeSAriel Constenla-Haile const awt::Rectangle& aRect ) 318*d1dc9aaeSAriel Constenla-Haile throw(uno::RuntimeException) 319*d1dc9aaeSAriel Constenla-Haile { 320*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 321*d1dc9aaeSAriel Constenla-Haile 322*d1dc9aaeSAriel Constenla-Haile if( mpOutputDevice ) 323*d1dc9aaeSAriel Constenla-Haile { 324*d1dc9aaeSAriel Constenla-Haile const ::Rectangle aVCLRect = VCLUnoHelper::ConvertToVCLRect( aRect ); 325*d1dc9aaeSAriel Constenla-Haile mpOutputDevice->Erase( aVCLRect ); 326*d1dc9aaeSAriel Constenla-Haile } 327*d1dc9aaeSAriel Constenla-Haile } 328*d1dc9aaeSAriel Constenla-Haile 329*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::copy( const uno::Reference< awt::XDevice >& rxSource, 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(uno::RuntimeException) 330cdf0e10cSrcweir { 331cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 332cdf0e10cSrcweir 333cdf0e10cSrcweir if ( mpOutputDevice ) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir VCLXDevice* pFromDev = VCLXDevice::GetImplementation( rxSource ); 336cdf0e10cSrcweir DBG_ASSERT( pFromDev, "VCLXGraphics::copy - invalid device" ); 337cdf0e10cSrcweir if ( pFromDev ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP ); 340cdf0e10cSrcweir mpOutputDevice->DrawOutDev( Point( nDestX, nDestY ), Size( nDestWidth, nDestHeight ), 341cdf0e10cSrcweir Point( nSourceX, nSourceY ), Size( nSourceWidth, nSourceHeight ), *pFromDev->GetOutputDevice() ); 342cdf0e10cSrcweir } 343cdf0e10cSrcweir } 344cdf0e10cSrcweir } 345cdf0e10cSrcweir 346*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::draw( const uno::Reference< awt::XDisplayBitmap >& rxBitmapHandle, 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(uno::RuntimeException) 347cdf0e10cSrcweir { 348cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 349cdf0e10cSrcweir 350cdf0e10cSrcweir if( mpOutputDevice ) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP); 353*d1dc9aaeSAriel Constenla-Haile uno::Reference< awt::XBitmap > xBitmap( rxBitmapHandle, uno::UNO_QUERY ); 354cdf0e10cSrcweir BitmapEx aBmpEx = VCLUnoHelper::GetBitmap( xBitmap ); 355cdf0e10cSrcweir 356cdf0e10cSrcweir Point aPos(nDestX - nSourceX, nDestY - nSourceY); 357cdf0e10cSrcweir Size aSz = aBmpEx.GetSizePixel(); 358cdf0e10cSrcweir 359cdf0e10cSrcweir if(nDestWidth != nSourceWidth) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir float zoomX = (float)nDestWidth / (float)nSourceWidth; 362cdf0e10cSrcweir aSz.Width() = (long) ((float)aSz.Width() * zoomX); 363cdf0e10cSrcweir } 364cdf0e10cSrcweir 365cdf0e10cSrcweir if(nDestHeight != nSourceHeight) 366cdf0e10cSrcweir { 367cdf0e10cSrcweir float zoomY = (float)nDestHeight / (float)nSourceHeight; 368cdf0e10cSrcweir aSz.Height() = (long) ((float)aSz.Height() * zoomY); 369cdf0e10cSrcweir } 370cdf0e10cSrcweir 371cdf0e10cSrcweir if(nSourceX || nSourceY || aSz.Width() != nSourceWidth || aSz.Height() != nSourceHeight) 372cdf0e10cSrcweir mpOutputDevice->IntersectClipRegion(Region(Rectangle(nDestX, nDestY, nDestX + nDestWidth - 1, nDestY + nDestHeight - 1))); 373cdf0e10cSrcweir 374cdf0e10cSrcweir mpOutputDevice->DrawBitmapEx( aPos, aSz, aBmpEx ); 375cdf0e10cSrcweir } 376cdf0e10cSrcweir } 377cdf0e10cSrcweir 378*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawPixel( sal_Int32 x, sal_Int32 y ) throw(uno::RuntimeException) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 381cdf0e10cSrcweir 382cdf0e10cSrcweir if( mpOutputDevice ) 383cdf0e10cSrcweir { 384cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 385cdf0e10cSrcweir mpOutputDevice->DrawPixel( Point( x, y ) ); 386cdf0e10cSrcweir } 387cdf0e10cSrcweir } 388cdf0e10cSrcweir 389*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawLine( sal_Int32 x1, sal_Int32 y1, sal_Int32 x2, sal_Int32 y2 ) throw(uno::RuntimeException) 390cdf0e10cSrcweir { 391cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 392cdf0e10cSrcweir 393cdf0e10cSrcweir if( mpOutputDevice ) 394cdf0e10cSrcweir { 395cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 396cdf0e10cSrcweir mpOutputDevice->DrawLine( Point( x1, y1 ), Point( x2, y2 ) ); 397cdf0e10cSrcweir } 398cdf0e10cSrcweir } 399cdf0e10cSrcweir 400*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height ) throw(uno::RuntimeException) 401cdf0e10cSrcweir { 402cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 403cdf0e10cSrcweir 404cdf0e10cSrcweir if( mpOutputDevice ) 405cdf0e10cSrcweir { 406cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 407cdf0e10cSrcweir mpOutputDevice->DrawRect( Rectangle( Point( x, y ), Size( width, height ) ) ); 408cdf0e10cSrcweir } 409cdf0e10cSrcweir } 410cdf0e10cSrcweir 411*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawRoundedRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height, sal_Int32 nHorzRound, sal_Int32 nVertRound ) throw(uno::RuntimeException) 412cdf0e10cSrcweir { 413cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 414cdf0e10cSrcweir 415cdf0e10cSrcweir if( mpOutputDevice ) 416cdf0e10cSrcweir { 417cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 418cdf0e10cSrcweir mpOutputDevice->DrawRect( Rectangle( Point( x, y ), Size( width, height ) ), nHorzRound, nVertRound ); 419cdf0e10cSrcweir } 420cdf0e10cSrcweir } 421cdf0e10cSrcweir 422*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawPolyLine( const uno::Sequence< sal_Int32 >& DataX, const uno::Sequence< sal_Int32 >& DataY ) throw(uno::RuntimeException) 423cdf0e10cSrcweir { 424cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 425cdf0e10cSrcweir 426cdf0e10cSrcweir if( mpOutputDevice ) 427cdf0e10cSrcweir { 428cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 429cdf0e10cSrcweir mpOutputDevice->DrawPolyLine( VCLUnoHelper::CreatePolygon( DataX, DataY ) ); 430cdf0e10cSrcweir } 431cdf0e10cSrcweir } 432cdf0e10cSrcweir 433*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawPolygon( const uno::Sequence< sal_Int32 >& DataX, const uno::Sequence< sal_Int32 >& DataY ) throw(uno::RuntimeException) 434cdf0e10cSrcweir { 435cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 436cdf0e10cSrcweir 437cdf0e10cSrcweir if( mpOutputDevice ) 438cdf0e10cSrcweir { 439cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 440cdf0e10cSrcweir mpOutputDevice->DrawPolygon( VCLUnoHelper::CreatePolygon( DataX, DataY ) ); 441cdf0e10cSrcweir } 442cdf0e10cSrcweir } 443cdf0e10cSrcweir 444*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawPolyPolygon( const uno::Sequence< uno::Sequence< sal_Int32 > >& DataX, const uno::Sequence< uno::Sequence< sal_Int32 > >& DataY ) throw(uno::RuntimeException) 445cdf0e10cSrcweir { 446cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 447cdf0e10cSrcweir 448cdf0e10cSrcweir if( mpOutputDevice ) 449cdf0e10cSrcweir { 450cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 451cdf0e10cSrcweir sal_uInt16 nPolys = (sal_uInt16) DataX.getLength(); 452cdf0e10cSrcweir PolyPolygon aPolyPoly( nPolys ); 453cdf0e10cSrcweir for ( sal_uInt16 n = 0; n < nPolys; n++ ) 454cdf0e10cSrcweir aPolyPoly[n] = VCLUnoHelper::CreatePolygon( DataX.getConstArray()[n], DataY.getConstArray()[n] ); 455cdf0e10cSrcweir 456cdf0e10cSrcweir mpOutputDevice->DrawPolyPolygon( aPolyPoly ); 457cdf0e10cSrcweir } 458cdf0e10cSrcweir } 459cdf0e10cSrcweir 460*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawEllipse( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height ) throw(uno::RuntimeException) 461cdf0e10cSrcweir { 462cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 463cdf0e10cSrcweir 464cdf0e10cSrcweir if( mpOutputDevice ) 465cdf0e10cSrcweir { 466cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 467cdf0e10cSrcweir mpOutputDevice->DrawEllipse( Rectangle( Point( x, y ), Size( width, height ) ) ); 468cdf0e10cSrcweir } 469cdf0e10cSrcweir } 470cdf0e10cSrcweir 471*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::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(uno::RuntimeException) 472cdf0e10cSrcweir { 473cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 474cdf0e10cSrcweir 475cdf0e10cSrcweir if( mpOutputDevice ) 476cdf0e10cSrcweir { 477cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 478cdf0e10cSrcweir mpOutputDevice->DrawArc( Rectangle( Point( x, y ), Size( width, height ) ), Point( x1, y1 ), Point( x2, y2 ) ); 479cdf0e10cSrcweir } 480cdf0e10cSrcweir } 481cdf0e10cSrcweir 482*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::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(uno::RuntimeException) 483cdf0e10cSrcweir { 484cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 485cdf0e10cSrcweir 486cdf0e10cSrcweir if( mpOutputDevice ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 489cdf0e10cSrcweir mpOutputDevice->DrawPie( Rectangle( Point( x, y ), Size( width, height ) ), Point( x1, y1 ), Point( x2, y2 ) ); 490cdf0e10cSrcweir } 491cdf0e10cSrcweir } 492cdf0e10cSrcweir 493*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawChord( 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(uno::RuntimeException) 494cdf0e10cSrcweir { 495cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 496cdf0e10cSrcweir 497cdf0e10cSrcweir if( mpOutputDevice ) 498cdf0e10cSrcweir { 499cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 500cdf0e10cSrcweir mpOutputDevice->DrawChord( Rectangle( Point( x, y ), Size( width, height ) ), Point( x1, y1 ), Point( x2, y2 ) ); 501cdf0e10cSrcweir } 502cdf0e10cSrcweir } 503cdf0e10cSrcweir 504*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawGradient( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height, const awt::Gradient& rGradient ) throw(uno::RuntimeException) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 507cdf0e10cSrcweir 508cdf0e10cSrcweir if( mpOutputDevice ) 509cdf0e10cSrcweir { 510cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 511cdf0e10cSrcweir Gradient aGradient((GradientStyle)rGradient.Style, rGradient.StartColor, rGradient.EndColor); 512cdf0e10cSrcweir aGradient.SetAngle(rGradient.Angle); 513cdf0e10cSrcweir aGradient.SetBorder(rGradient.Border); 514cdf0e10cSrcweir aGradient.SetOfsX(rGradient.XOffset); 515cdf0e10cSrcweir aGradient.SetOfsY(rGradient.YOffset); 516cdf0e10cSrcweir aGradient.SetStartIntensity(rGradient.StartIntensity); 517cdf0e10cSrcweir aGradient.SetEndIntensity(rGradient.EndIntensity); 518cdf0e10cSrcweir aGradient.SetSteps(rGradient.StepCount); 519cdf0e10cSrcweir mpOutputDevice->DrawGradient( Rectangle( Point( x, y ), Size( width, height ) ), aGradient ); 520cdf0e10cSrcweir } 521cdf0e10cSrcweir } 522cdf0e10cSrcweir 523*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawText( sal_Int32 x, sal_Int32 y, const ::rtl::OUString& rText ) throw(uno::RuntimeException) 524cdf0e10cSrcweir { 525cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 526cdf0e10cSrcweir 527cdf0e10cSrcweir if( mpOutputDevice ) 528cdf0e10cSrcweir { 529cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS |INITOUTDEV_FONT); 530cdf0e10cSrcweir mpOutputDevice->DrawText( Point( x, y ), rText ); 531cdf0e10cSrcweir } 532cdf0e10cSrcweir } 533cdf0e10cSrcweir 534*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawTextArray( sal_Int32 x, sal_Int32 y, const ::rtl::OUString& rText, const uno::Sequence< sal_Int32 >& rLongs ) throw(uno::RuntimeException) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir ::vos::OGuard aGuard( GetMutex() ); 537cdf0e10cSrcweir 538cdf0e10cSrcweir if( mpOutputDevice ) 539cdf0e10cSrcweir { 540cdf0e10cSrcweir InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS|INITOUTDEV_FONT ); 541cdf0e10cSrcweir mpOutputDevice->DrawTextArray( Point( x, y ), rText, rLongs.getConstArray() ); 542cdf0e10cSrcweir } 543cdf0e10cSrcweir } 544cdf0e10cSrcweir 545cdf0e10cSrcweir 546*d1dc9aaeSAriel Constenla-Haile void VCLXGraphics::drawImage( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height, sal_Int16 nStyle, const uno::Reference< graphic::XGraphic >& xGraphic ) throw(uno::RuntimeException) 547*d1dc9aaeSAriel Constenla-Haile { 548*d1dc9aaeSAriel Constenla-Haile ::vos::OGuard aGuard( GetMutex() ); 549cdf0e10cSrcweir 550*d1dc9aaeSAriel Constenla-Haile if( mpOutputDevice && xGraphic.is() ) 551*d1dc9aaeSAriel Constenla-Haile { 552*d1dc9aaeSAriel Constenla-Haile Image aImage( xGraphic ); 553*d1dc9aaeSAriel Constenla-Haile if ( !!aImage ) 554*d1dc9aaeSAriel Constenla-Haile { 555*d1dc9aaeSAriel Constenla-Haile InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); 556*d1dc9aaeSAriel Constenla-Haile mpOutputDevice->DrawImage( Point( x, y ), Size( width, height ), aImage, nStyle ); 557*d1dc9aaeSAriel Constenla-Haile } 558*d1dc9aaeSAriel Constenla-Haile } 559*d1dc9aaeSAriel Constenla-Haile } 560