From f2e4bb4b96a7c2176a0dd1dacd9930bf9b68d895 Mon Sep 17 00:00:00 2001 From: Chris Sherlock Date: Thu, 1 May 2014 20:00:56 +1000 Subject: Revert "VCL: move native widget rendering functions out of OutputDevice" This reverts commit 5b86e33b5fb5f8250b88bf14e579cddd98fec36a. --- include/vcl/outdev.hxx | 45 +++++ include/vcl/window.hxx | 49 +----- vcl/Library_vcl.mk | 2 +- vcl/source/outdev/nativecontrols.cxx | 329 +++++++++++++++++++++++++++++++++++ vcl/source/window/nativecontrols.cxx | 307 -------------------------------- 5 files changed, 377 insertions(+), 355 deletions(-) create mode 100644 vcl/source/outdev/nativecontrols.cxx delete mode 100644 vcl/source/window/nativecontrols.cxx diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx index 7051f5a149fe..9cc34e850c48 100644 --- a/include/vcl/outdev.hxx +++ b/include/vcl/outdev.hxx @@ -1795,6 +1795,51 @@ private: ///@} + /** @name Native Widget Rendering functions + + These all just call through to the private mpGraphics functions of the same name. + */ + ///@{ + +public: + + /** Query the platform layer for control support + */ + bool IsNativeControlSupported( ControlType nType, ControlPart nPart ) const; + + /** Query the native control to determine if it was acted upon + */ + bool HitTestNativeControl( ControlType nType, + ControlPart nPart, + const Rectangle& rControlRegion, + const Point& aPos, + bool& rIsInside ) const; + + /** Request rendering of a particular control and/or part + */ + bool DrawNativeControl( ControlType nType, + ControlPart nPart, + const Rectangle& rControlRegion, + ControlState nState, + const ImplControlValue& aValue, + const OUString& aCaption ); + + /** Query the native control's actual drawing region (including adornment) + */ + bool GetNativeControlRegion( ControlType nType, + ControlPart nPart, + const Rectangle& rControlRegion, + ControlState nState, + const ImplControlValue& aValue, + const OUString& aCaption, + Rectangle &rNativeBoundingRegion, + Rectangle &rNativeContentRegion ) const; + ///@} + + /** @name EPS functions + */ + ///@{ + public: /** Added return value to see if EPS could be painted directly. diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx index 19c20d01d520..001dfd5c1d7c 100644 --- a/include/vcl/window.hxx +++ b/include/vcl/window.hxx @@ -970,7 +970,7 @@ public: bool HasChildPathFocus( bool bSystemWindow = false ) const; bool IsActive() const; bool HasActiveChildFrame(); - sal_uInt16 GetGetFocusFlags() const; + sal_uInt16 GetGetFocusFlags() const; void GrabFocusToDocument(); /** @@ -1033,7 +1033,7 @@ public: Window* FindWindow( const Point& rPos ) const; - sal_uInt16 GetChildCount() const; + sal_uInt16 GetChildCount() const; Window* GetChild( sal_uInt16 nChild ) const; Window* GetWindow( sal_uInt16 nType ) const; bool IsChild( const Window* pWindow, bool bSystemWindow = false ) const; @@ -1076,51 +1076,6 @@ public: void SaveBackground( const Point& rPos, const Size& rSize, const Point& rDestOff, VirtualDevice& rSaveDevice ); - - /** @name Native Widget Rendering functions - - These all just call through to the private mpGraphics functions of the same name. - */ - ///@{ - - /** Query the platform layer for control support - */ - bool IsNativeControlSupported( ControlType nType, ControlPart nPart ) const; - - /** @name EPS functions - */ - ///@{ - - - /** Query the native control to determine if it was acted upon - */ - bool HitTestNativeControl( ControlType nType, - ControlPart nPart, - const Rectangle& rControlRegion, - const Point& aPos, - bool& rIsInside ) const; - - /** Request rendering of a particular control and/or part - */ - bool DrawNativeControl( ControlType nType, - ControlPart nPart, - const Rectangle& rControlRegion, - ControlState nState, - const ImplControlValue& aValue, - const OUString& aCaption ); - - /** Query the native control's actual drawing region (including adornment) - */ - bool GetNativeControlRegion( ControlType nType, - ControlPart nPart, - const Rectangle& rControlRegion, - ControlState nState, - const ImplControlValue& aValue, - const OUString& aCaption, - Rectangle &rNativeBoundingRegion, - Rectangle &rNativeContentRegion ) const; - ///@} - const SystemEnvData* GetSystemData() const; ::com::sun::star::uno::Any GetSystemDataAny() const; diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index c331fdfb82b8..d630017e0ae5 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -146,7 +146,6 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/window/window \ vcl/source/window/winproc \ vcl/source/window/wrkwin \ - vcl/source/window/nativecontrols \ vcl/source/control/button \ vcl/source/control/combobox \ vcl/source/control/ctrl \ @@ -196,6 +195,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/source/outdev/gradient \ vcl/source/outdev/curvedshapes \ vcl/source/outdev/wallpaper \ + vcl/source/outdev/nativecontrols \ vcl/source/outdev/map \ vcl/source/gdi/alpha \ vcl/source/gdi/animate \ diff --git a/vcl/source/outdev/nativecontrols.cxx b/vcl/source/outdev/nativecontrols.cxx new file mode 100644 index 000000000000..28e2d35921f5 --- /dev/null +++ b/vcl/source/outdev/nativecontrols.cxx @@ -0,0 +1,329 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include + +#include +#include + +#include + +static bool EnableNativeWidget( const OutputDevice& i_rDevice ) +{ + const OutDevType eType( i_rDevice.GetOutDevType() ); + switch ( eType ) + { + + case OUTDEV_WINDOW: + return dynamic_cast< const Window* >( &i_rDevice )->IsNativeWidgetEnabled(); + + case OUTDEV_VIRDEV: + { + const ::vcl::ExtOutDevData* pOutDevData( i_rDevice.GetExtOutDevData() ); + const ::vcl::PDFExtOutDevData* pPDFData( dynamic_cast< const ::vcl::PDFExtOutDevData* >( pOutDevData ) ); + if ( pPDFData != NULL ) + return false; + return true; + } + + default: + return false; + } +} + +ImplControlValue::~ImplControlValue() +{ +} + +ImplControlValue* ImplControlValue::clone() const +{ + assert( typeid( const ImplControlValue ) == typeid( *this )); + return new ImplControlValue( *this ); +} + +ScrollbarValue::~ScrollbarValue() +{ +} + +ScrollbarValue* ScrollbarValue::clone() const +{ + assert( typeid( const ScrollbarValue ) == typeid( *this )); + return new ScrollbarValue( *this ); +} + +SliderValue::~SliderValue() +{ +} + +SliderValue* SliderValue::clone() const +{ + assert( typeid( const SliderValue ) == typeid( *this )); + return new SliderValue( *this ); +} + +TabitemValue::~TabitemValue() +{ +} + +TabitemValue* TabitemValue::clone() const +{ + assert( typeid( const TabitemValue ) == typeid( *this )); + return new TabitemValue( *this ); +} + +SpinbuttonValue::~SpinbuttonValue() +{ +} + +SpinbuttonValue* SpinbuttonValue::clone() const +{ + assert( typeid( const SpinbuttonValue ) == typeid( *this )); + return new SpinbuttonValue( *this ); +} + +ToolbarValue::~ToolbarValue() +{ +} + +ToolbarValue* ToolbarValue::clone() const +{ + assert( typeid( const ToolbarValue ) == typeid( *this )); + return new ToolbarValue( *this ); +} + +MenubarValue::~MenubarValue() +{ +} + +MenubarValue* MenubarValue::clone() const +{ + assert( typeid( const MenubarValue ) == typeid( *this )); + return new MenubarValue( *this ); +} + +MenupopupValue::~MenupopupValue() +{ +} + +MenupopupValue* MenupopupValue::clone() const +{ + assert( typeid( const MenupopupValue ) == typeid( *this )); + return new MenupopupValue( *this ); +} + +PushButtonValue::~PushButtonValue() +{ +} + +PushButtonValue* PushButtonValue::clone() const +{ + assert( typeid( const PushButtonValue ) == typeid( *this )); + return new PushButtonValue( *this ); +} + +// These functions are mainly passthrough functions that allow access to +// the SalFrame behind a Window object for native widget rendering purposes. + +bool OutputDevice::IsNativeControlSupported( ControlType nType, ControlPart nPart ) const +{ + if( !EnableNativeWidget( *this ) ) + return false; + + if ( !mpGraphics ) + if ( !AcquireGraphics() ) + return false; + + return( mpGraphics->IsNativeControlSupported(nType, nPart) ); +} + +bool OutputDevice::HitTestNativeControl( ControlType nType, + ControlPart nPart, + const Rectangle& rControlRegion, + const Point& aPos, + bool& rIsInside ) const +{ + if( !EnableNativeWidget( *this ) ) + return false; + + if ( !mpGraphics ) + if ( !AcquireGraphics() ) + return false; + + Point aWinOffs( mnOutOffX, mnOutOffY ); + Rectangle screenRegion( rControlRegion ); + screenRegion.Move( aWinOffs.X(), aWinOffs.Y()); + + return( mpGraphics->HitTestNativeControl(nType, nPart, screenRegion, Point( aPos.X() + mnOutOffX, aPos.Y() + mnOutOffY ), + rIsInside, this ) ); +} + +static boost::shared_ptr< ImplControlValue > TransformControlValue( const ImplControlValue& rVal, const OutputDevice& rDev ) +{ + boost::shared_ptr< ImplControlValue > aResult; + switch( rVal.getType() ) + { + case CTRL_SLIDER: + { + const SliderValue* pSlVal = static_cast(&rVal); + SliderValue* pNew = new SliderValue( *pSlVal ); + aResult.reset( pNew ); + pNew->maThumbRect = rDev.ImplLogicToDevicePixel( pSlVal->maThumbRect ); + } + break; + case CTRL_SCROLLBAR: + { + const ScrollbarValue* pScVal = static_cast(&rVal); + ScrollbarValue* pNew = new ScrollbarValue( *pScVal ); + aResult.reset( pNew ); + pNew->maThumbRect = rDev.ImplLogicToDevicePixel( pScVal->maThumbRect ); + pNew->maButton1Rect = rDev.ImplLogicToDevicePixel( pScVal->maButton1Rect ); + pNew->maButton2Rect = rDev.ImplLogicToDevicePixel( pScVal->maButton2Rect ); + } + break; + case CTRL_SPINBUTTONS: + { + const SpinbuttonValue* pSpVal = static_cast(&rVal); + SpinbuttonValue* pNew = new SpinbuttonValue( *pSpVal ); + aResult.reset( pNew ); + pNew->maUpperRect = rDev.ImplLogicToDevicePixel( pSpVal->maUpperRect ); + pNew->maLowerRect = rDev.ImplLogicToDevicePixel( pSpVal->maLowerRect ); + } + break; + case CTRL_TOOLBAR: + { + const ToolbarValue* pTVal = static_cast(&rVal); + ToolbarValue* pNew = new ToolbarValue( *pTVal ); + aResult.reset( pNew ); + pNew->maGripRect = rDev.ImplLogicToDevicePixel( pTVal->maGripRect ); + } + break; + case CTRL_TAB_ITEM: + { + const TabitemValue* pTIVal = static_cast(&rVal); + TabitemValue* pNew = new TabitemValue( *pTIVal ); + aResult.reset( pNew ); + } + break; + case CTRL_MENUBAR: + { + const MenubarValue* pMVal = static_cast(&rVal); + MenubarValue* pNew = new MenubarValue( *pMVal ); + aResult.reset( pNew ); + } + break; + case CTRL_PUSHBUTTON: + { + const PushButtonValue* pBVal = static_cast(&rVal); + PushButtonValue* pNew = new PushButtonValue( *pBVal ); + aResult.reset( pNew ); + } + break; + case CTRL_GENERIC: + aResult.reset( new ImplControlValue( rVal ) ); + break; + case CTRL_MENU_POPUP: + { + const MenupopupValue* pMVal = static_cast(&rVal); + MenupopupValue* pNew = new MenupopupValue( *pMVal ); + pNew->maItemRect = rDev.ImplLogicToDevicePixel( pMVal->maItemRect ); + aResult.reset( pNew ); + } + break; + default: + OSL_FAIL( "unknown ImplControlValue type !" ); + break; + } + return aResult; +} +bool OutputDevice::DrawNativeControl( ControlType nType, + ControlPart nPart, + const Rectangle& rControlRegion, + ControlState nState, + const ImplControlValue& aValue, + const OUString& aCaption ) +{ + if( !EnableNativeWidget( *this ) ) + return false; + + // make sure the current clip region is initialized correctly + if ( !mpGraphics ) + if ( !AcquireGraphics() ) + return false; + + if ( mbInitClipRegion ) + InitClipRegion(); + if ( mbOutputClipped ) + return true; + + if ( mbInitLineColor ) + InitLineColor(); + if ( mbInitFillColor ) + InitFillColor(); + + // Convert the coordinates from relative to Window-absolute, so we draw + // in the correct place in platform code + boost::shared_ptr< ImplControlValue > aScreenCtrlValue( TransformControlValue( aValue, *this ) ); + Rectangle screenRegion( ImplLogicToDevicePixel( rControlRegion ) ); + + Region aTestRegion( GetActiveClipRegion() ); + aTestRegion.Intersect( rControlRegion ); + if (aTestRegion == Region(rControlRegion)) + nState |= CTRL_CACHING_ALLOWED; // control is not clipped, caching allowed + + bool bRet = mpGraphics->DrawNativeControl(nType, nPart, screenRegion, nState, *aScreenCtrlValue, aCaption, this ); + + return bRet; +} + +bool OutputDevice::GetNativeControlRegion( ControlType nType, + ControlPart nPart, + const Rectangle& rControlRegion, + ControlState nState, + const ImplControlValue& aValue, + const OUString& aCaption, + Rectangle &rNativeBoundingRegion, + Rectangle &rNativeContentRegion ) const +{ + if( !EnableNativeWidget( *this ) ) + return false; + + if ( !mpGraphics ) + if ( !AcquireGraphics() ) + return false; + + // Convert the coordinates from relative to Window-absolute, so we draw + // in the correct place in platform code + boost::shared_ptr< ImplControlValue > aScreenCtrlValue( TransformControlValue( aValue, *this ) ); + Rectangle screenRegion( ImplLogicToDevicePixel( rControlRegion ) ); + + bool bRet = mpGraphics->GetNativeControlRegion(nType, nPart, screenRegion, nState, *aScreenCtrlValue, + aCaption, rNativeBoundingRegion, + rNativeContentRegion, this ); + if( bRet ) + { + // transform back native regions + rNativeBoundingRegion = ImplDevicePixelToLogic( rNativeBoundingRegion ); + rNativeContentRegion = ImplDevicePixelToLogic( rNativeContentRegion ); + } + + return bRet; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/window/nativecontrols.cxx b/vcl/source/window/nativecontrols.cxx deleted file mode 100644 index 38c84981c64f..000000000000 --- a/vcl/source/window/nativecontrols.cxx +++ /dev/null @@ -1,307 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include -#include - -#include -#include - -#include - -ImplControlValue::~ImplControlValue() -{ -} - -ImplControlValue* ImplControlValue::clone() const -{ - assert( typeid( const ImplControlValue ) == typeid( *this )); - return new ImplControlValue( *this ); -} - -ScrollbarValue::~ScrollbarValue() -{ -} - -ScrollbarValue* ScrollbarValue::clone() const -{ - assert( typeid( const ScrollbarValue ) == typeid( *this )); - return new ScrollbarValue( *this ); -} - -SliderValue::~SliderValue() -{ -} - -SliderValue* SliderValue::clone() const -{ - assert( typeid( const SliderValue ) == typeid( *this )); - return new SliderValue( *this ); -} - -TabitemValue::~TabitemValue() -{ -} - -TabitemValue* TabitemValue::clone() const -{ - assert( typeid( const TabitemValue ) == typeid( *this )); - return new TabitemValue( *this ); -} - -SpinbuttonValue::~SpinbuttonValue() -{ -} - -SpinbuttonValue* SpinbuttonValue::clone() const -{ - assert( typeid( const SpinbuttonValue ) == typeid( *this )); - return new SpinbuttonValue( *this ); -} - -ToolbarValue::~ToolbarValue() -{ -} - -ToolbarValue* ToolbarValue::clone() const -{ - assert( typeid( const ToolbarValue ) == typeid( *this )); - return new ToolbarValue( *this ); -} - -MenubarValue::~MenubarValue() -{ -} - -MenubarValue* MenubarValue::clone() const -{ - assert( typeid( const MenubarValue ) == typeid( *this )); - return new MenubarValue( *this ); -} - -MenupopupValue::~MenupopupValue() -{ -} - -MenupopupValue* MenupopupValue::clone() const -{ - assert( typeid( const MenupopupValue ) == typeid( *this )); - return new MenupopupValue( *this ); -} - -PushButtonValue::~PushButtonValue() -{ -} - -PushButtonValue* PushButtonValue::clone() const -{ - assert( typeid( const PushButtonValue ) == typeid( *this )); - return new PushButtonValue( *this ); -} - -// These functions are mainly passthrough functions that allow access to -// the SalFrame behind a Window object for native widget rendering purposes. - -bool Window::IsNativeControlSupported( ControlType nType, ControlPart nPart ) const -{ - if( !IsNativeWidgetEnabled() ) - return false; - - if ( !mpGraphics ) - if ( !AcquireGraphics() ) - return false; - - return( mpGraphics->IsNativeControlSupported(nType, nPart) ); -} - -bool Window::HitTestNativeControl( ControlType nType, - ControlPart nPart, - const Rectangle& rControlRegion, - const Point& aPos, - bool& rIsInside ) const -{ - if( !IsNativeWidgetEnabled() ) - return false; - - if ( !mpGraphics ) - if ( !AcquireGraphics() ) - return false; - - Point aWinOffs( mnOutOffX, mnOutOffY ); - Rectangle screenRegion( rControlRegion ); - screenRegion.Move( aWinOffs.X(), aWinOffs.Y()); - - return( mpGraphics->HitTestNativeControl(nType, nPart, screenRegion, Point( aPos.X() + mnOutOffX, aPos.Y() + mnOutOffY ), - rIsInside, this ) ); -} - -static boost::shared_ptr< ImplControlValue > TransformControlValue( const ImplControlValue& rVal, const OutputDevice& rDev ) -{ - boost::shared_ptr< ImplControlValue > aResult; - switch( rVal.getType() ) - { - case CTRL_SLIDER: - { - const SliderValue* pSlVal = static_cast(&rVal); - SliderValue* pNew = new SliderValue( *pSlVal ); - aResult.reset( pNew ); - pNew->maThumbRect = rDev.ImplLogicToDevicePixel( pSlVal->maThumbRect ); - } - break; - case CTRL_SCROLLBAR: - { - const ScrollbarValue* pScVal = static_cast(&rVal); - ScrollbarValue* pNew = new ScrollbarValue( *pScVal ); - aResult.reset( pNew ); - pNew->maThumbRect = rDev.ImplLogicToDevicePixel( pScVal->maThumbRect ); - pNew->maButton1Rect = rDev.ImplLogicToDevicePixel( pScVal->maButton1Rect ); - pNew->maButton2Rect = rDev.ImplLogicToDevicePixel( pScVal->maButton2Rect ); - } - break; - case CTRL_SPINBUTTONS: - { - const SpinbuttonValue* pSpVal = static_cast(&rVal); - SpinbuttonValue* pNew = new SpinbuttonValue( *pSpVal ); - aResult.reset( pNew ); - pNew->maUpperRect = rDev.ImplLogicToDevicePixel( pSpVal->maUpperRect ); - pNew->maLowerRect = rDev.ImplLogicToDevicePixel( pSpVal->maLowerRect ); - } - break; - case CTRL_TOOLBAR: - { - const ToolbarValue* pTVal = static_cast(&rVal); - ToolbarValue* pNew = new ToolbarValue( *pTVal ); - aResult.reset( pNew ); - pNew->maGripRect = rDev.ImplLogicToDevicePixel( pTVal->maGripRect ); - } - break; - case CTRL_TAB_ITEM: - { - const TabitemValue* pTIVal = static_cast(&rVal); - TabitemValue* pNew = new TabitemValue( *pTIVal ); - aResult.reset( pNew ); - } - break; - case CTRL_MENUBAR: - { - const MenubarValue* pMVal = static_cast(&rVal); - MenubarValue* pNew = new MenubarValue( *pMVal ); - aResult.reset( pNew ); - } - break; - case CTRL_PUSHBUTTON: - { - const PushButtonValue* pBVal = static_cast(&rVal); - PushButtonValue* pNew = new PushButtonValue( *pBVal ); - aResult.reset( pNew ); - } - break; - case CTRL_GENERIC: - aResult.reset( new ImplControlValue( rVal ) ); - break; - case CTRL_MENU_POPUP: - { - const MenupopupValue* pMVal = static_cast(&rVal); - MenupopupValue* pNew = new MenupopupValue( *pMVal ); - pNew->maItemRect = rDev.ImplLogicToDevicePixel( pMVal->maItemRect ); - aResult.reset( pNew ); - } - break; - default: - OSL_FAIL( "unknown ImplControlValue type !" ); - break; - } - return aResult; -} - -bool Window::DrawNativeControl( ControlType nType, - ControlPart nPart, - const Rectangle& rControlRegion, - ControlState nState, - const ImplControlValue& aValue, - const OUString& aCaption ) -{ - if( !IsNativeWidgetEnabled() ) - return false; - - // make sure the current clip region is initialized correctly - if ( !mpGraphics ) - if ( !AcquireGraphics() ) - return false; - - if ( mbInitClipRegion ) - InitClipRegion(); - if ( mbOutputClipped ) - return true; - - if ( mbInitLineColor ) - InitLineColor(); - if ( mbInitFillColor ) - InitFillColor(); - - // Convert the coordinates from relative to Window-absolute, so we draw - // in the correct place in platform code - boost::shared_ptr< ImplControlValue > aScreenCtrlValue( TransformControlValue( aValue, *this ) ); - Rectangle screenRegion( ImplLogicToDevicePixel( rControlRegion ) ); - - Region aTestRegion( GetActiveClipRegion() ); - aTestRegion.Intersect( rControlRegion ); - if (aTestRegion == Region(rControlRegion)) - nState |= CTRL_CACHING_ALLOWED; // control is not clipped, caching allowed - - bool bRet = mpGraphics->DrawNativeControl(nType, nPart, screenRegion, nState, *aScreenCtrlValue, aCaption, this ); - - return bRet; -} - -bool Window::GetNativeControlRegion( ControlType nType, - ControlPart nPart, - const Rectangle& rControlRegion, - ControlState nState, - const ImplControlValue& aValue, - const OUString& aCaption, - Rectangle &rNativeBoundingRegion, - Rectangle &rNativeContentRegion ) const -{ - if( !IsNativeWidgetEnabled() ) - return false; - - if ( !mpGraphics ) - if ( !AcquireGraphics() ) - return false; - - // Convert the coordinates from relative to Window-absolute, so we draw - // in the correct place in platform code - boost::shared_ptr< ImplControlValue > aScreenCtrlValue( TransformControlValue( aValue, *this ) ); - Rectangle screenRegion( ImplLogicToDevicePixel( rControlRegion ) ); - - bool bRet = mpGraphics->GetNativeControlRegion(nType, nPart, screenRegion, nState, *aScreenCtrlValue, - aCaption, rNativeBoundingRegion, - rNativeContentRegion, this ); - if( bRet ) - { - // transform back native regions - rNativeBoundingRegion = ImplDevicePixelToLogic( rNativeBoundingRegion ); - rNativeContentRegion = ImplDevicePixelToLogic( rNativeContentRegion ); - } - - return bRet; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit