Kaydet (Commit) 7b545001 authored tarafından Chris Sherlock's avatar Chris Sherlock

vcl: move functionality from window2.cxx

Change-Id: I68d1c7bb32df9024ea57a07d7d3b051efc08b2ed
üst fee65f9d
...@@ -393,6 +393,11 @@ private: ...@@ -393,6 +393,11 @@ private:
void AttachToWindow( const Window* ); void AttachToWindow( const Window* );
}; };
struct ImplFocusDelData : public ImplDelData
{
Window* mpFocusWin;
};
struct ImplSVEvent struct ImplSVEvent
{ {
void* mpData; void* mpData;
......
...@@ -706,4 +706,90 @@ void Window::ImplCalcOverlapRegion( const Rectangle& rSourceRect, Region& rRegio ...@@ -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: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -50,97 +50,6 @@ using namespace com::sun::star; ...@@ -50,97 +50,6 @@ using namespace com::sun::star;
#define IMPL_MAXSAVEBACKSIZE (640*480) #define IMPL_MAXSAVEBACKSIZE (640*480)
#define IMPL_MAXALLSAVEBACKSIZE (800*600*2) #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() void Window::ImplSaveOverlapBackground()
{ {
DBG_ASSERT( !mpWindowImpl->mpOverlapData->mpSaveBackDev, "Window::ImplSaveOverlapBackground() - Background already saved" ); DBG_ASSERT( !mpWindowImpl->mpOverlapData->mpSaveBackDev, "Window::ImplSaveOverlapBackground() - Background already saved" );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment