diff options
author | Chris Sherlock <chris.sherlock79@gmail.com> | 2014-11-10 23:23:13 +1100 |
---|---|---|
committer | Chris Sherlock <chris.sherlock79@gmail.com> | 2014-11-11 09:11:38 +0000 |
commit | 896ac21a92d7617f2a1795ce7df3612493e12ba0 (patch) | |
tree | 79a053fdeaedec1dc5f35220c23b1d11dc9c1f52 /vcl/source | |
parent | Avoid -fsanitize=signed-integer-overflow (diff) | |
download | core-896ac21a92d7617f2a1795ce7df3612493e12ba0.tar.gz core-896ac21a92d7617f2a1795ce7df3612493e12ba0.zip |
vcl: move OutputDevice::ImplDrawFrameDev() to Window
I have moved ImplDrawFrameDev() from OutputDevice to Window, because it
deals with frames which is clearly the responsibility of the Window class,
not the OutputDevice class which shouldn't really care about it at all.
I've also renamed it to drawFrameDev() as it's a private function.
Change-Id: I45fd50e8e34fe4a97730c3c857080e4e1ddb1c17
Reviewed-on: https://gerrit.libreoffice.org/12340
Tested-by: LibreOffice gerrit bot <gerrit@libreoffice.org>
Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com>
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/outdev/outdev.cxx | 47 | ||||
-rw-r--r-- | vcl/source/window/clipping.cxx | 14 | ||||
-rw-r--r-- | vcl/source/window/window.cxx | 46 |
3 files changed, 53 insertions, 54 deletions
diff --git a/vcl/source/outdev/outdev.cxx b/vcl/source/outdev/outdev.cxx index 0e11f1738c7f..5295fd49925c 100644 --- a/vcl/source/outdev/outdev.cxx +++ b/vcl/source/outdev/outdev.cxx @@ -396,53 +396,6 @@ bool OutputDevice::SupportsOperation( OutDevSupportType eType ) const return bHasSupport; } -// Frame public functions - -void OutputDevice::ImplDrawFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDevSize, - const OutputDevice& rOutDev, const vcl::Region& rRegion ) -{ - - GDIMetaFile* pOldMetaFile = mpMetaFile; - bool bOldMap = mbMap; - RasterOp eOldROP = GetRasterOp(); - mpMetaFile = NULL; - mbMap = false; - SetRasterOp( ROP_OVERPAINT ); - - if ( !IsDeviceOutputNecessary() ) - return; - - if ( !mpGraphics ) - { - if ( !AcquireGraphics() ) - return; - } - - // ClipRegion zuruecksetzen - if ( rRegion.IsNull() ) - mpGraphics->ResetClipRegion(); - else - SelectClipRegion( rRegion ); - - SalTwoRect aPosAry; - aPosAry.mnSrcX = rDevPt.X(); - aPosAry.mnSrcY = rDevPt.Y(); - aPosAry.mnSrcWidth = rDevSize.Width(); - aPosAry.mnSrcHeight = rDevSize.Height(); - aPosAry.mnDestX = rPt.X(); - aPosAry.mnDestY = rPt.Y(); - aPosAry.mnDestWidth = rDevSize.Width(); - aPosAry.mnDestHeight = rDevSize.Height(); - drawOutDevDirect( &rOutDev, aPosAry ); - - // Ensure that ClipRegion is recalculated and set - mbInitClipRegion = true; - - SetRasterOp( eOldROP ); - mbMap = bOldMap; - mpMetaFile = pOldMetaFile; -} - // Direct OutputDevice drawing public functions void OutputDevice::DrawOutDev( const Point& rDestPt, const Size& rDestSize, diff --git a/vcl/source/window/clipping.cxx b/vcl/source/window/clipping.cxx index d3e40d9e0237..b2054f8f77a4 100644 --- a/vcl/source/window/clipping.cxx +++ b/vcl/source/window/clipping.cxx @@ -884,22 +884,22 @@ bool Window::ImplRestoreOverlapBackground( vcl::Region& rInvRegion ) Point aDestPt( mnOutOffX, mnOutOffY ); Size aDevSize = mpWindowImpl->mpOverlapData->mpSaveBackDev->GetOutputSizePixel(); - OutputDevice *pOutDev = mpWindowImpl->mpFrameWindow->GetOutDev(); + Window *pWin = mpWindowImpl->mpFrameWindow; if ( mpWindowImpl->mpOverlapData->mpSaveBackRgn ) { mpWindowImpl->mpOverlapData->mpSaveBackRgn->Intersect( mpWindowImpl->maWinClipRegion ); rInvRegion = mpWindowImpl->maWinClipRegion; rInvRegion.Exclude( *mpWindowImpl->mpOverlapData->mpSaveBackRgn ); - pOutDev->ImplDrawFrameDev( aDestPt, aDevPt, aDevSize, - *(mpWindowImpl->mpOverlapData->mpSaveBackDev), - *mpWindowImpl->mpOverlapData->mpSaveBackRgn ); + pWin->drawFrameDev( aDestPt, aDevPt, aDevSize, + *(mpWindowImpl->mpOverlapData->mpSaveBackDev), + *mpWindowImpl->mpOverlapData->mpSaveBackRgn ); } else { - pOutDev->ImplDrawFrameDev( aDestPt, aDevPt, aDevSize, - *(mpWindowImpl->mpOverlapData->mpSaveBackDev), - mpWindowImpl->maWinClipRegion ); + pWin->drawFrameDev( aDestPt, aDevPt, aDevSize, + *(mpWindowImpl->mpOverlapData->mpSaveBackDev), + mpWindowImpl->maWinClipRegion ); } ImplDeleteOverlapBackground(); } diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx index c6086dabaebd..e0c2bc6c01bc 100644 --- a/vcl/source/window/window.cxx +++ b/vcl/source/window/window.cxx @@ -1204,6 +1204,52 @@ void Window::getFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDe mbMap = bOldMap; } +void Window::drawFrameDev( const Point& rPt, const Point& rDevPt, const Size& rDevSize, + const OutputDevice& rOutDev, const vcl::Region& rRegion ) +{ + + GDIMetaFile* pOldMetaFile = mpMetaFile; + bool bOldMap = mbMap; + RasterOp eOldROP = GetRasterOp(); + mpMetaFile = NULL; + mbMap = false; + SetRasterOp( ROP_OVERPAINT ); + + if ( !IsDeviceOutputNecessary() ) + return; + + if ( !mpGraphics ) + { + if ( !AcquireGraphics() ) + return; + } + + // ClipRegion zuruecksetzen + if ( rRegion.IsNull() ) + mpGraphics->ResetClipRegion(); + else + SelectClipRegion( rRegion ); + + SalTwoRect aPosAry; + aPosAry.mnSrcX = rDevPt.X(); + aPosAry.mnSrcY = rDevPt.Y(); + aPosAry.mnSrcWidth = rDevSize.Width(); + aPosAry.mnSrcHeight = rDevSize.Height(); + aPosAry.mnDestX = rPt.X(); + aPosAry.mnDestY = rPt.Y(); + aPosAry.mnDestWidth = rDevSize.Width(); + aPosAry.mnDestHeight = rDevSize.Height(); + drawOutDevDirect( &rOutDev, aPosAry ); + + // Ensure that ClipRegion is recalculated and set + mbInitClipRegion = true; + + SetRasterOp( eOldROP ); + mbMap = bOldMap; + mpMetaFile = pOldMetaFile; +} + + ImplWinData* Window::ImplGetWinData() const { if ( !mpWindowImpl->mpWinData ) |