diff options
author | Ariel Constenla-Haile <arielch@apache.org> | 2012-12-06 12:28:11 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-05-21 14:01:16 +0100 |
commit | f858fa266d8b33ccc27bb6a91f1923b9ea9cdaaa (patch) | |
tree | a1591cd5dca88c16a3d22e9256162954ab9775ba /toolkit/source | |
parent | 5dd32f76a9c0f924e6a514e309e7661ad5537e86 (diff) |
Related: #i121442# - Extend css::awt::XGraphic to draw images
A StatusbarController that draws its status bar item may need to draw a
graphic representing the feature state. css::awt::XGraphics API should
be extended to include VCL's OuptDevice::DrawImage
(cherry picked from commit 3ca8e86d4489f023160d69ba621a819a89ab90d5)
Conflicts:
offapi/com/sun/star/awt/XGraphics.idl
offapi/com/sun/star/awt/makefile.mk
offapi/type_reference/types.rdb
toolkit/inc/toolkit/awt/vclxgraphics.hxx
toolkit/source/awt/vclxgraphics.cxx
Change-Id: If2c37022e60e8a3c9fce51dac84f4a2af001b5c5
Diffstat (limited to 'toolkit/source')
-rw-r--r-- | toolkit/source/awt/vclxgraphics.cxx | 173 |
1 files changed, 129 insertions, 44 deletions
diff --git a/toolkit/source/awt/vclxgraphics.cxx b/toolkit/source/awt/vclxgraphics.cxx index c3459dc3b86a..3e7461fdd305 100644 --- a/toolkit/source/awt/vclxgraphics.cxx +++ b/toolkit/source/awt/vclxgraphics.cxx @@ -20,6 +20,7 @@ #include <toolkit/awt/vclxgraphics.hxx> #include <toolkit/awt/vclxdevice.hxx> +#include <toolkit/awt/vclxfont.hxx> #include <toolkit/helper/macros.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <cppuhelper/typeprovider.hxx> @@ -27,30 +28,32 @@ #include <vcl/svapp.hxx> #include <vcl/outdev.hxx> +#include <vcl/image.hxx> #include <vcl/gradient.hxx> #include <tools/debug.hxx> +using namespace com::sun::star; // ---------------------------------------------------- // class VCLXGraphics // ---------------------------------------------------- -// ::com::sun::star::uno::XInterface -::com::sun::star::uno::Any VCLXGraphics::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException) +// uno::XInterface +uno::Any VCLXGraphics::queryInterface( const uno::Type & rType ) throw(uno::RuntimeException) { - ::com::sun::star::uno::Any aRet = ::cppu::queryInterface( rType, + uno::Any aRet = ::cppu::queryInterface( rType, (static_cast< ::com::sun::star::awt::XGraphics* >(this)), (static_cast< ::com::sun::star::lang::XTypeProvider* >(this)), (static_cast< ::com::sun::star::lang::XUnoTunnel* >(this)) ); return (aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType )); } -// ::com::sun::star::lang::XUnoTunnel +// lang::XUnoTunnel IMPL_XUNOTUNNEL( VCLXGraphics ) -// ::com::sun::star::lang::XTypeProvider +// lang::XTypeProvider IMPL_XTYPEPROVIDER_START( VCLXGraphics ) - getCppuType( ( ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics>* ) NULL ) + getCppuType( ( uno::Reference< awt::XGraphics>* ) NULL ) IMPL_XTYPEPROVIDER_END VCLXGraphics::VCLXGraphics() @@ -80,6 +83,7 @@ void VCLXGraphics::SetOutputDevice( OutputDevice* pOutDev ) { mpOutputDevice = pOutDev; mxDevice = NULL; + initAttrs(); } void VCLXGraphics::Init( OutputDevice* pOutDev ) @@ -87,12 +91,7 @@ void VCLXGraphics::Init( OutputDevice* pOutDev ) DBG_ASSERT( !mpOutputDevice, "VCLXGraphics::Init already has pOutDev !" ); mpOutputDevice = pOutDev; - maFont = mpOutputDevice->GetFont(); - maTextColor = COL_BLACK; - maTextFillColor = COL_TRANSPARENT; - maLineColor = COL_BLACK; - maFillColor = COL_WHITE; - meRasterOp = ROP_OVERPAINT; + initAttrs(); mpClipRegion = NULL; // Register at OutputDevice @@ -102,6 +101,19 @@ void VCLXGraphics::Init( OutputDevice* pOutDev ) pLst->push_back( this ); } +void VCLXGraphics::initAttrs() +{ + if ( !mpOutputDevice ) + return; + + maFont = mpOutputDevice->GetFont(); + maTextColor = mpOutputDevice->GetTextColor(); /* COL_BLACK */ + maTextFillColor = mpOutputDevice->GetTextFillColor(); /* COL_TRANSPARENT */ + maLineColor = mpOutputDevice->GetLineColor(); /* COL_BLACK */ + maFillColor = mpOutputDevice->GetFillColor(); /* COL_WHITE */ + meRasterOp = mpOutputDevice->GetRasterOp(); /* ROP_OVERPAINT */ +} + void VCLXGraphics::InitOutputDevice( sal_uInt16 nFlags ) { if(mpOutputDevice) @@ -136,7 +148,7 @@ void VCLXGraphics::InitOutputDevice( sal_uInt16 nFlags ) } } -::com::sun::star::uno::Reference< ::com::sun::star::awt::XDevice > VCLXGraphics::getDevice() throw(::com::sun::star::uno::RuntimeException) +uno::Reference< awt::XDevice > VCLXGraphics::getDevice() throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -149,11 +161,11 @@ void VCLXGraphics::InitOutputDevice( sal_uInt16 nFlags ) return mxDevice; } -::com::sun::star::awt::SimpleFontMetric VCLXGraphics::getFontMetric() throw(::com::sun::star::uno::RuntimeException) +awt::SimpleFontMetric VCLXGraphics::getFontMetric() throw(uno::RuntimeException) { SolarMutexGuard aGuard; - ::com::sun::star::awt::SimpleFontMetric aM; + awt::SimpleFontMetric aM; if( mpOutputDevice ) { mpOutputDevice->SetFont( maFont ); @@ -162,56 +174,104 @@ void VCLXGraphics::InitOutputDevice( sal_uInt16 nFlags ) return aM; } -void VCLXGraphics::setFont( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFont >& rxFont ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::setFont( const uno::Reference< awt::XFont >& rxFont ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; maFont = VCLUnoHelper::CreateFont( rxFont ); } -void VCLXGraphics::selectFont( const ::com::sun::star::awt::FontDescriptor& rDescription ) throw(::com::sun::star::uno::RuntimeException) +uno::Reference< awt::XFont > VCLXGraphics::getFont() throw(uno::RuntimeException) +{ + uno::Reference< awt::XFont > xFont; + uno::Reference< awt::XDevice > xDevice( getDevice() ); + + SolarMutexGuard aGuard; + + if ( xDevice.is() ) + { + VCLXFont *pFont = new VCLXFont; + pFont->Init( *xDevice.get(), maFont ); + xFont.set( static_cast< ::cppu::OWeakObject* >( pFont ), uno::UNO_QUERY ); + } + + return xFont; +} + +void VCLXGraphics::selectFont( const awt::FontDescriptor& rDescription ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; maFont = VCLUnoHelper::CreateFont( rDescription, Font() ); } -void VCLXGraphics::setTextColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::setTextColor( sal_Int32 nColor ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; maTextColor = Color( (sal_uInt32)nColor ); } -void VCLXGraphics::setTextFillColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException) +::sal_Int32 VCLXGraphics::getTextColor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return maTextColor.GetColor(); +} + +void VCLXGraphics::setTextFillColor( sal_Int32 nColor ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; maTextFillColor = Color( (sal_uInt32)nColor ); } -void VCLXGraphics::setLineColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException) +::sal_Int32 VCLXGraphics::getTextFillColor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return maTextFillColor.GetColor(); +} + +void VCLXGraphics::setLineColor( sal_Int32 nColor ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; maLineColor = Color( (sal_uInt32)nColor ); } -void VCLXGraphics::setFillColor( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException) +::sal_Int32 VCLXGraphics::getLineColor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return maLineColor.GetColor(); +} + +void VCLXGraphics::setFillColor( sal_Int32 nColor ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; maFillColor = Color( (sal_uInt32)nColor ); } -void VCLXGraphics::setRasterOp( ::com::sun::star::awt::RasterOperation eROP ) throw(::com::sun::star::uno::RuntimeException) +::sal_Int32 VCLXGraphics::getFillColor() throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return maFillColor.GetColor(); +} + +void VCLXGraphics::setRasterOp( awt::RasterOperation eROP ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; meRasterOp = (RasterOp)eROP; } -void VCLXGraphics::setClipRegion( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRegion >& rxRegion ) throw(::com::sun::star::uno::RuntimeException) +awt::RasterOperation VCLXGraphics::getRasterOp() +throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + return (awt::RasterOperation) meRasterOp; +} + +void VCLXGraphics::setClipRegion( const uno::Reference< awt::XRegion >& rxRegion ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -222,7 +282,7 @@ void VCLXGraphics::setClipRegion( const ::com::sun::star::uno::Reference< ::com: mpClipRegion = NULL; } -void VCLXGraphics::intersectClipRegion( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XRegion >& rxRegion ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::intersectClipRegion( const uno::Reference< awt::XRegion >& rxRegion ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -236,7 +296,7 @@ void VCLXGraphics::intersectClipRegion( const ::com::sun::star::uno::Reference< } } -void VCLXGraphics::push( ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::push( ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -245,7 +305,7 @@ void VCLXGraphics::push( ) throw(::com::sun::star::uno::RuntimeException) mpOutputDevice->Push(); } -void VCLXGraphics::pop( ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::pop( ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -254,7 +314,20 @@ void VCLXGraphics::pop( ) throw(::com::sun::star::uno::RuntimeException) mpOutputDevice->Pop(); } -void VCLXGraphics::copy( const ::com::sun::star::uno::Reference< ::com::sun::star::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(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::clear( + const awt::Rectangle& aRect ) +throw(uno::RuntimeException) +{ + SolarMutexGuard aGuard; + + if( mpOutputDevice ) + { + const ::Rectangle aVCLRect = VCLUnoHelper::ConvertToVCLRect( aRect ); + mpOutputDevice->Erase( aVCLRect ); + } +} + +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) { SolarMutexGuard aGuard; @@ -271,14 +344,14 @@ void VCLXGraphics::copy( const ::com::sun::star::uno::Reference< ::com::sun::sta } } -void VCLXGraphics::draw( const ::com::sun::star::uno::Reference< ::com::sun::star::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(::com::sun::star::uno::RuntimeException) +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) { SolarMutexGuard aGuard; if( mpOutputDevice ) { InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP); - ::com::sun::star::uno::Reference< ::com::sun::star::awt::XBitmap > xBitmap( rxBitmapHandle, ::com::sun::star::uno::UNO_QUERY ); + uno::Reference< awt::XBitmap > xBitmap( rxBitmapHandle, uno::UNO_QUERY ); BitmapEx aBmpEx = VCLUnoHelper::GetBitmap( xBitmap ); Point aPos(nDestX - nSourceX, nDestY - nSourceY); @@ -303,7 +376,7 @@ void VCLXGraphics::draw( const ::com::sun::star::uno::Reference< ::com::sun::sta } } -void VCLXGraphics::drawPixel( sal_Int32 x, sal_Int32 y ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawPixel( sal_Int32 x, sal_Int32 y ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -314,7 +387,7 @@ void VCLXGraphics::drawPixel( sal_Int32 x, sal_Int32 y ) throw(::com::sun::star: } } -void VCLXGraphics::drawLine( sal_Int32 x1, sal_Int32 y1, sal_Int32 x2, sal_Int32 y2 ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawLine( sal_Int32 x1, sal_Int32 y1, sal_Int32 x2, sal_Int32 y2 ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -325,7 +398,7 @@ void VCLXGraphics::drawLine( sal_Int32 x1, sal_Int32 y1, sal_Int32 x2, sal_Int32 } } -void VCLXGraphics::drawRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -336,7 +409,7 @@ void VCLXGraphics::drawRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int3 } } -void VCLXGraphics::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) +void VCLXGraphics::drawRoundedRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height, sal_Int32 nHorzRound, sal_Int32 nVertRound ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -347,7 +420,7 @@ void VCLXGraphics::drawRoundedRect( sal_Int32 x, sal_Int32 y, sal_Int32 width, s } } -void VCLXGraphics::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) +void VCLXGraphics::drawPolyLine( const uno::Sequence< sal_Int32 >& DataX, const uno::Sequence< sal_Int32 >& DataY ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -358,7 +431,7 @@ void VCLXGraphics::drawPolyLine( const ::com::sun::star::uno::Sequence< sal_Int3 } } -void VCLXGraphics::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) +void VCLXGraphics::drawPolygon( const uno::Sequence< sal_Int32 >& DataX, const uno::Sequence< sal_Int32 >& DataY ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -369,7 +442,7 @@ void VCLXGraphics::drawPolygon( const ::com::sun::star::uno::Sequence< sal_Int32 } } -void VCLXGraphics::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) +void VCLXGraphics::drawPolyPolygon( const uno::Sequence< uno::Sequence< sal_Int32 > >& DataX, const uno::Sequence< uno::Sequence< sal_Int32 > >& DataY ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -385,7 +458,7 @@ void VCLXGraphics::drawPolyPolygon( const ::com::sun::star::uno::Sequence< ::com } } -void VCLXGraphics::drawEllipse( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawEllipse( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -396,7 +469,7 @@ void VCLXGraphics::drawEllipse( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_I } } -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(::com::sun::star::uno::RuntimeException) +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) { SolarMutexGuard aGuard; @@ -407,7 +480,7 @@ void VCLXGraphics::drawArc( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 } } -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(::com::sun::star::uno::RuntimeException) +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) { SolarMutexGuard aGuard; @@ -418,7 +491,7 @@ void VCLXGraphics::drawPie( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 } } -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(::com::sun::star::uno::RuntimeException) +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) { SolarMutexGuard aGuard; @@ -429,7 +502,7 @@ void VCLXGraphics::drawChord( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int } } -void VCLXGraphics::drawGradient( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height, const ::com::sun::star::awt::Gradient& rGradient ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawGradient( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_Int32 height, const awt::Gradient& rGradient ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -448,7 +521,7 @@ void VCLXGraphics::drawGradient( sal_Int32 x, sal_Int32 y, sal_Int32 width, sal_ } } -void VCLXGraphics::drawText( sal_Int32 x, sal_Int32 y, const OUString& rText ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawText( sal_Int32 x, sal_Int32 y, const OUString& rText ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -459,7 +532,7 @@ void VCLXGraphics::drawText( sal_Int32 x, sal_Int32 y, const OUString& rText ) t } } -void VCLXGraphics::drawTextArray( sal_Int32 x, sal_Int32 y, const OUString& rText, const ::com::sun::star::uno::Sequence< sal_Int32 >& rLongs ) throw(::com::sun::star::uno::RuntimeException) +void VCLXGraphics::drawTextArray( sal_Int32 x, sal_Int32 y, const OUString& rText, const uno::Sequence< sal_Int32 >& rLongs ) throw(uno::RuntimeException) { SolarMutexGuard aGuard; @@ -471,6 +544,18 @@ void VCLXGraphics::drawTextArray( sal_Int32 x, sal_Int32 y, const OUString& rTex } +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) +{ + SolarMutexGuard aGuard; - + if( mpOutputDevice && xGraphic.is() ) + { + Image aImage( xGraphic ); + if ( !!aImage ) + { + InitOutputDevice( INITOUTDEV_CLIPREGION|INITOUTDEV_RASTEROP|INITOUTDEV_COLORS ); + mpOutputDevice->DrawImage( Point( x, y ), Size( width, height ), aImage, nStyle ); + } + } +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |