From 7b545001a10042c03ddde09ac9e0e6c3cdf6f8ca Mon Sep 17 00:00:00 2001 From: Chris Sherlock Date: Tue, 27 May 2014 00:49:56 +1000 Subject: vcl: move functionality from window2.cxx Change-Id: I68d1c7bb32df9024ea57a07d7d3b051efc08b2ed --- vcl/inc/svdata.hxx | 5 +++ vcl/source/window/clipping.cxx | 86 +++++++++++++++++++++++++++++++++++++++ vcl/source/window/window2.cxx | 91 ------------------------------------------ 3 files changed, 91 insertions(+), 91 deletions(-) (limited to 'vcl') diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx index 7fa60e37266c..155346fbf00a 100644 --- a/vcl/inc/svdata.hxx +++ b/vcl/inc/svdata.hxx @@ -393,6 +393,11 @@ private: void AttachToWindow( const Window* ); }; +struct ImplFocusDelData : public ImplDelData +{ + Window* mpFocusWin; +}; + struct ImplSVEvent { void* mpData; diff --git a/vcl/source/window/clipping.cxx b/vcl/source/window/clipping.cxx index f7afeb1bd436..6c09c571f9f6 100644 --- a/vcl/source/window/clipping.cxx +++ b/vcl/source/window/clipping.cxx @@ -706,4 +706,90 @@ void Window::ImplCalcOverlapRegion( const Rectangle& rSourceRect, Region& rRegio } } +bool Window::ImplIsWindowInFront( const Window* pTestWindow ) const +{ + // check for overlapping window + pTestWindow = pTestWindow->ImplGetFirstOverlapWindow(); + const Window* pTempWindow = pTestWindow; + const Window* pThisWindow = ImplGetFirstOverlapWindow(); + if ( pTempWindow == pThisWindow ) + return false; + do + { + if ( pTempWindow == pThisWindow ) + return true; + if ( pTempWindow->mpWindowImpl->mbFrame ) + break; + pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; + } + while ( pTempWindow ); + pTempWindow = pThisWindow; + do + { + if ( pTempWindow == pTestWindow ) + return false; + if ( pTempWindow->mpWindowImpl->mbFrame ) + break; + pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; + } + while ( pTempWindow ); + + // move window to same level + if ( pThisWindow->mpWindowImpl->mpOverlapWindow != pTestWindow->mpWindowImpl->mpOverlapWindow ) + { + sal_uInt16 nThisLevel = 0; + sal_uInt16 nTestLevel = 0; + pTempWindow = pThisWindow; + do + { + nThisLevel++; + pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; + } + while ( !pTempWindow->mpWindowImpl->mbFrame ); + pTempWindow = pTestWindow; + do + { + nTestLevel++; + pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; + } + while ( !pTempWindow->mpWindowImpl->mbFrame ); + + if ( nThisLevel < nTestLevel ) + { + do + { + if ( pTestWindow->mpWindowImpl->mpOverlapWindow == pThisWindow->mpWindowImpl->mpOverlapWindow ) + break; + if ( pTestWindow->mpWindowImpl->mbFrame ) + break; + pTestWindow = pTestWindow->mpWindowImpl->mpOverlapWindow; + } + while ( pTestWindow ); + } + else + { + do + { + if ( pThisWindow->mpWindowImpl->mpOverlapWindow == pTempWindow->mpWindowImpl->mpOverlapWindow ) + break; + if ( pThisWindow->mpWindowImpl->mbFrame ) + break; + pThisWindow = pThisWindow->mpWindowImpl->mpOverlapWindow; + } + while ( pThisWindow ); + } + } + + // if TestWindow is before ThisWindow, it is in front + pTempWindow = pTestWindow; + while ( pTempWindow ) + { + if ( pTempWindow == pThisWindow ) + return true; + pTempWindow = pTempWindow->mpWindowImpl->mpNext; + } + + return false; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx index 8c9b44fb6a5d..393195332614 100644 --- a/vcl/source/window/window2.cxx +++ b/vcl/source/window/window2.cxx @@ -50,97 +50,6 @@ using namespace com::sun::star; #define IMPL_MAXSAVEBACKSIZE (640*480) #define IMPL_MAXALLSAVEBACKSIZE (800*600*2) -struct ImplFocusDelData : public ImplDelData -{ - Window* mpFocusWin; -}; - -bool Window::ImplIsWindowInFront( const Window* pTestWindow ) const -{ - // check for overlapping window - pTestWindow = pTestWindow->ImplGetFirstOverlapWindow(); - const Window* pTempWindow = pTestWindow; - const Window* pThisWindow = ImplGetFirstOverlapWindow(); - if ( pTempWindow == pThisWindow ) - return false; - do - { - if ( pTempWindow == pThisWindow ) - return true; - if ( pTempWindow->mpWindowImpl->mbFrame ) - break; - pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; - } - while ( pTempWindow ); - pTempWindow = pThisWindow; - do - { - if ( pTempWindow == pTestWindow ) - return false; - if ( pTempWindow->mpWindowImpl->mbFrame ) - break; - pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; - } - while ( pTempWindow ); - - // move window to same level - if ( pThisWindow->mpWindowImpl->mpOverlapWindow != pTestWindow->mpWindowImpl->mpOverlapWindow ) - { - sal_uInt16 nThisLevel = 0; - sal_uInt16 nTestLevel = 0; - pTempWindow = pThisWindow; - do - { - nThisLevel++; - pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; - } - while ( !pTempWindow->mpWindowImpl->mbFrame ); - pTempWindow = pTestWindow; - do - { - nTestLevel++; - pTempWindow = pTempWindow->mpWindowImpl->mpOverlapWindow; - } - while ( !pTempWindow->mpWindowImpl->mbFrame ); - - if ( nThisLevel < nTestLevel ) - { - do - { - if ( pTestWindow->mpWindowImpl->mpOverlapWindow == pThisWindow->mpWindowImpl->mpOverlapWindow ) - break; - if ( pTestWindow->mpWindowImpl->mbFrame ) - break; - pTestWindow = pTestWindow->mpWindowImpl->mpOverlapWindow; - } - while ( pTestWindow ); - } - else - { - do - { - if ( pThisWindow->mpWindowImpl->mpOverlapWindow == pTempWindow->mpWindowImpl->mpOverlapWindow ) - break; - if ( pThisWindow->mpWindowImpl->mbFrame ) - break; - pThisWindow = pThisWindow->mpWindowImpl->mpOverlapWindow; - } - while ( pThisWindow ); - } - } - - // if TestWindow is before ThisWindow, it is in front - pTempWindow = pTestWindow; - while ( pTempWindow ) - { - if ( pTempWindow == pThisWindow ) - return true; - pTempWindow = pTempWindow->mpWindowImpl->mpNext; - } - - return false; -} - void Window::ImplSaveOverlapBackground() { DBG_ASSERT( !mpWindowImpl->mpOverlapData->mpSaveBackDev, "Window::ImplSaveOverlapBackground() - Background already saved" ); -- cgit