vcl: clipping functions moved from window.cxx to clipping.cxx
Change-Id: Iaaabbe2002b14540bdf4a51269909b44bf5d8880
This commit is contained in:
@@ -141,6 +141,94 @@ void Window::InitClipRegion()
|
|||||||
mbInitClipRegion = false;
|
mbInitClipRegion = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::SetParentClipMode( sal_uInt16 nMode )
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( mpWindowImpl->mpBorderWindow )
|
||||||
|
mpWindowImpl->mpBorderWindow->SetParentClipMode( nMode );
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !ImplIsOverlapWindow() )
|
||||||
|
{
|
||||||
|
mpWindowImpl->mnParentClipMode = nMode;
|
||||||
|
if ( nMode & PARENTCLIPMODE_CLIP )
|
||||||
|
mpWindowImpl->mpParent->mpWindowImpl->mbClipChildren = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sal_uInt16 Window::GetParentClipMode() const
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( mpWindowImpl->mpBorderWindow )
|
||||||
|
return mpWindowImpl->mpBorderWindow->GetParentClipMode();
|
||||||
|
else
|
||||||
|
return mpWindowImpl->mnParentClipMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::ExpandPaintClipRegion( const Region& rRegion )
|
||||||
|
{
|
||||||
|
if( mpWindowImpl->mpPaintRegion )
|
||||||
|
{
|
||||||
|
Region aPixRegion = LogicToPixel( rRegion );
|
||||||
|
Region aDevPixRegion = ImplPixelToDevicePixel( aPixRegion );
|
||||||
|
|
||||||
|
Region aWinChildRegion = *ImplGetWinChildClipRegion();
|
||||||
|
// --- RTL -- only this region is in frame coordinates, so re-mirror it
|
||||||
|
if( ImplIsAntiparallel() )
|
||||||
|
{
|
||||||
|
const OutputDevice *pOutDev = GetOutDev();
|
||||||
|
pOutDev->ReMirror( aWinChildRegion );
|
||||||
|
}
|
||||||
|
|
||||||
|
aDevPixRegion.Intersect( aWinChildRegion );
|
||||||
|
if( ! aDevPixRegion.IsEmpty() )
|
||||||
|
{
|
||||||
|
mpWindowImpl->mpPaintRegion->Union( aDevPixRegion );
|
||||||
|
mbInitClipRegion = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Region Window::GetWindowClipRegionPixel( sal_uInt16 nFlags ) const
|
||||||
|
{
|
||||||
|
|
||||||
|
Region aWinClipRegion;
|
||||||
|
|
||||||
|
if ( nFlags & WINDOW_GETCLIPREGION_NOCHILDREN )
|
||||||
|
{
|
||||||
|
if ( mpWindowImpl->mbInitWinClipRegion )
|
||||||
|
((Window*)this)->ImplInitWinClipRegion();
|
||||||
|
aWinClipRegion = mpWindowImpl->maWinClipRegion;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Region* pWinChildClipRegion = ((Window*)this)->ImplGetWinChildClipRegion();
|
||||||
|
aWinClipRegion = *pWinChildClipRegion;
|
||||||
|
// --- RTL --- remirror clip region before passing it to somebody
|
||||||
|
if( ImplIsAntiparallel() )
|
||||||
|
{
|
||||||
|
const OutputDevice *pOutDev = GetOutDev();
|
||||||
|
pOutDev->ReMirror( aWinClipRegion );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( nFlags & WINDOW_GETCLIPREGION_NULL )
|
||||||
|
{
|
||||||
|
Rectangle aWinRect( Point( mnOutOffX, mnOutOffY ), Size( mnOutWidth, mnOutHeight ) );
|
||||||
|
Region aWinRegion( aWinRect );
|
||||||
|
|
||||||
|
if ( aWinRegion == aWinClipRegion )
|
||||||
|
aWinClipRegion.SetNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
aWinClipRegion.Move( -mnOutOffX, -mnOutOffY );
|
||||||
|
|
||||||
|
return aWinClipRegion;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Region Window::GetActiveClipRegion() const
|
Region Window::GetActiveClipRegion() const
|
||||||
{
|
{
|
||||||
Region aRegion(true);
|
Region aRegion(true);
|
||||||
@@ -174,6 +262,145 @@ void Window::EnableClipSiblings( bool bClipSiblings )
|
|||||||
mpWindowImpl->mbClipSiblings = bClipSiblings;
|
mpWindowImpl->mbClipSiblings = bClipSiblings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::ImplClipBoundaries( Region& rRegion, bool bThis, bool bOverlaps )
|
||||||
|
{
|
||||||
|
if ( bThis )
|
||||||
|
ImplIntersectWindowClipRegion( rRegion );
|
||||||
|
else if ( ImplIsOverlapWindow() )
|
||||||
|
{
|
||||||
|
// clip to frame if required
|
||||||
|
if ( !mpWindowImpl->mbFrame )
|
||||||
|
rRegion.Intersect( Rectangle( Point( 0, 0 ), Size( mpWindowImpl->mpFrameWindow->mnOutWidth, mpWindowImpl->mpFrameWindow->mnOutHeight ) ) );
|
||||||
|
|
||||||
|
if ( bOverlaps && !rRegion.IsEmpty() )
|
||||||
|
{
|
||||||
|
// Clip Overlap Siblings
|
||||||
|
Window* pStartOverlapWindow = this;
|
||||||
|
while ( !pStartOverlapWindow->mpWindowImpl->mbFrame )
|
||||||
|
{
|
||||||
|
Window* pOverlapWindow = pStartOverlapWindow->mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap;
|
||||||
|
while ( pOverlapWindow && (pOverlapWindow != pStartOverlapWindow) )
|
||||||
|
{
|
||||||
|
pOverlapWindow->ImplExcludeOverlapWindows2( rRegion );
|
||||||
|
pOverlapWindow = pOverlapWindow->mpWindowImpl->mpNext;
|
||||||
|
}
|
||||||
|
pStartOverlapWindow = pStartOverlapWindow->mpWindowImpl->mpOverlapWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clip Child Overlap Windows
|
||||||
|
ImplExcludeOverlapWindows( rRegion );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ImplGetParent()->ImplIntersectWindowClipRegion( rRegion );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Window::ImplClipChildren( Region& rRegion )
|
||||||
|
{
|
||||||
|
bool bOtherClip = false;
|
||||||
|
Window* pWindow = mpWindowImpl->mpFirstChild;
|
||||||
|
while ( pWindow )
|
||||||
|
{
|
||||||
|
if ( pWindow->mpWindowImpl->mbReallyVisible )
|
||||||
|
{
|
||||||
|
// read-out ParentClipMode-Flags
|
||||||
|
sal_uInt16 nClipMode = pWindow->GetParentClipMode();
|
||||||
|
if ( !(nClipMode & PARENTCLIPMODE_NOCLIP) &&
|
||||||
|
((nClipMode & PARENTCLIPMODE_CLIP) || (GetStyle() & WB_CLIPCHILDREN)) )
|
||||||
|
pWindow->ImplExcludeWindowRegion( rRegion );
|
||||||
|
else
|
||||||
|
bOtherClip = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
pWindow = pWindow->mpWindowImpl->mpNext;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bOtherClip;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::ImplClipAllChildren( Region& rRegion )
|
||||||
|
{
|
||||||
|
Window* pWindow = mpWindowImpl->mpFirstChild;
|
||||||
|
while ( pWindow )
|
||||||
|
{
|
||||||
|
if ( pWindow->mpWindowImpl->mbReallyVisible )
|
||||||
|
pWindow->ImplExcludeWindowRegion( rRegion );
|
||||||
|
pWindow = pWindow->mpWindowImpl->mpNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::ImplClipSiblings( Region& rRegion )
|
||||||
|
{
|
||||||
|
Window* pWindow = ImplGetParent()->mpWindowImpl->mpFirstChild;
|
||||||
|
while ( pWindow )
|
||||||
|
{
|
||||||
|
if ( pWindow == this )
|
||||||
|
break;
|
||||||
|
|
||||||
|
if ( pWindow->mpWindowImpl->mbReallyVisible )
|
||||||
|
pWindow->ImplExcludeWindowRegion( rRegion );
|
||||||
|
|
||||||
|
pWindow = pWindow->mpWindowImpl->mpNext;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::ImplInitWinClipRegion()
|
||||||
|
{
|
||||||
|
// Build Window Region
|
||||||
|
mpWindowImpl->maWinClipRegion = Rectangle( Point( mnOutOffX, mnOutOffY ),
|
||||||
|
Size( mnOutWidth, mnOutHeight ) );
|
||||||
|
if ( mpWindowImpl->mbWinRegion )
|
||||||
|
mpWindowImpl->maWinClipRegion.Intersect( ImplPixelToDevicePixel( mpWindowImpl->maWinRegion ) );
|
||||||
|
|
||||||
|
// ClipSiblings
|
||||||
|
if ( mpWindowImpl->mbClipSiblings && !ImplIsOverlapWindow() )
|
||||||
|
ImplClipSiblings( mpWindowImpl->maWinClipRegion );
|
||||||
|
|
||||||
|
// Clip Parent Boundaries
|
||||||
|
ImplClipBoundaries( mpWindowImpl->maWinClipRegion, false, true );
|
||||||
|
|
||||||
|
// Clip Children
|
||||||
|
if ( (GetStyle() & WB_CLIPCHILDREN) || mpWindowImpl->mbClipChildren )
|
||||||
|
mpWindowImpl->mbInitChildRegion = true;
|
||||||
|
|
||||||
|
mpWindowImpl->mbInitWinClipRegion = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::ImplInitWinChildClipRegion()
|
||||||
|
{
|
||||||
|
if ( !mpWindowImpl->mpFirstChild )
|
||||||
|
{
|
||||||
|
if ( mpWindowImpl->mpChildClipRegion )
|
||||||
|
{
|
||||||
|
delete mpWindowImpl->mpChildClipRegion;
|
||||||
|
mpWindowImpl->mpChildClipRegion = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !mpWindowImpl->mpChildClipRegion )
|
||||||
|
mpWindowImpl->mpChildClipRegion = new Region( mpWindowImpl->maWinClipRegion );
|
||||||
|
else
|
||||||
|
*mpWindowImpl->mpChildClipRegion = mpWindowImpl->maWinClipRegion;
|
||||||
|
|
||||||
|
ImplClipChildren( *mpWindowImpl->mpChildClipRegion );
|
||||||
|
}
|
||||||
|
|
||||||
|
mpWindowImpl->mbInitChildRegion = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Region* Window::ImplGetWinChildClipRegion()
|
||||||
|
{
|
||||||
|
if ( mpWindowImpl->mbInitWinClipRegion )
|
||||||
|
ImplInitWinClipRegion();
|
||||||
|
if ( mpWindowImpl->mbInitChildRegion )
|
||||||
|
ImplInitWinChildClipRegion();
|
||||||
|
if ( mpWindowImpl->mpChildClipRegion )
|
||||||
|
return mpWindowImpl->mpChildClipRegion;
|
||||||
|
else
|
||||||
|
return &mpWindowImpl->maWinClipRegion;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Window::ImplSysObjClip( const Region* pOldRegion )
|
bool Window::ImplSysObjClip( const Region* pOldRegion )
|
||||||
{
|
{
|
||||||
|
@@ -1789,145 +1789,6 @@ void Window::ImplExcludeOverlapWindows2( Region& rRegion )
|
|||||||
ImplExcludeOverlapWindows( rRegion );
|
ImplExcludeOverlapWindows( rRegion );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::ImplClipBoundaries( Region& rRegion, bool bThis, bool bOverlaps )
|
|
||||||
{
|
|
||||||
if ( bThis )
|
|
||||||
ImplIntersectWindowClipRegion( rRegion );
|
|
||||||
else if ( ImplIsOverlapWindow() )
|
|
||||||
{
|
|
||||||
// clip to frame if required
|
|
||||||
if ( !mpWindowImpl->mbFrame )
|
|
||||||
rRegion.Intersect( Rectangle( Point( 0, 0 ), Size( mpWindowImpl->mpFrameWindow->mnOutWidth, mpWindowImpl->mpFrameWindow->mnOutHeight ) ) );
|
|
||||||
|
|
||||||
if ( bOverlaps && !rRegion.IsEmpty() )
|
|
||||||
{
|
|
||||||
// Clip Overlap Siblings
|
|
||||||
Window* pStartOverlapWindow = this;
|
|
||||||
while ( !pStartOverlapWindow->mpWindowImpl->mbFrame )
|
|
||||||
{
|
|
||||||
Window* pOverlapWindow = pStartOverlapWindow->mpWindowImpl->mpOverlapWindow->mpWindowImpl->mpFirstOverlap;
|
|
||||||
while ( pOverlapWindow && (pOverlapWindow != pStartOverlapWindow) )
|
|
||||||
{
|
|
||||||
pOverlapWindow->ImplExcludeOverlapWindows2( rRegion );
|
|
||||||
pOverlapWindow = pOverlapWindow->mpWindowImpl->mpNext;
|
|
||||||
}
|
|
||||||
pStartOverlapWindow = pStartOverlapWindow->mpWindowImpl->mpOverlapWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clip Child Overlap Windows
|
|
||||||
ImplExcludeOverlapWindows( rRegion );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ImplGetParent()->ImplIntersectWindowClipRegion( rRegion );
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Window::ImplClipChildren( Region& rRegion )
|
|
||||||
{
|
|
||||||
bool bOtherClip = false;
|
|
||||||
Window* pWindow = mpWindowImpl->mpFirstChild;
|
|
||||||
while ( pWindow )
|
|
||||||
{
|
|
||||||
if ( pWindow->mpWindowImpl->mbReallyVisible )
|
|
||||||
{
|
|
||||||
// read-out ParentClipMode-Flags
|
|
||||||
sal_uInt16 nClipMode = pWindow->GetParentClipMode();
|
|
||||||
if ( !(nClipMode & PARENTCLIPMODE_NOCLIP) &&
|
|
||||||
((nClipMode & PARENTCLIPMODE_CLIP) || (GetStyle() & WB_CLIPCHILDREN)) )
|
|
||||||
pWindow->ImplExcludeWindowRegion( rRegion );
|
|
||||||
else
|
|
||||||
bOtherClip = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
pWindow = pWindow->mpWindowImpl->mpNext;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bOtherClip;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::ImplClipAllChildren( Region& rRegion )
|
|
||||||
{
|
|
||||||
Window* pWindow = mpWindowImpl->mpFirstChild;
|
|
||||||
while ( pWindow )
|
|
||||||
{
|
|
||||||
if ( pWindow->mpWindowImpl->mbReallyVisible )
|
|
||||||
pWindow->ImplExcludeWindowRegion( rRegion );
|
|
||||||
pWindow = pWindow->mpWindowImpl->mpNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::ImplClipSiblings( Region& rRegion )
|
|
||||||
{
|
|
||||||
Window* pWindow = ImplGetParent()->mpWindowImpl->mpFirstChild;
|
|
||||||
while ( pWindow )
|
|
||||||
{
|
|
||||||
if ( pWindow == this )
|
|
||||||
break;
|
|
||||||
|
|
||||||
if ( pWindow->mpWindowImpl->mbReallyVisible )
|
|
||||||
pWindow->ImplExcludeWindowRegion( rRegion );
|
|
||||||
|
|
||||||
pWindow = pWindow->mpWindowImpl->mpNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::ImplInitWinClipRegion()
|
|
||||||
{
|
|
||||||
// Build Window Region
|
|
||||||
mpWindowImpl->maWinClipRegion = Rectangle( Point( mnOutOffX, mnOutOffY ),
|
|
||||||
Size( mnOutWidth, mnOutHeight ) );
|
|
||||||
if ( mpWindowImpl->mbWinRegion )
|
|
||||||
mpWindowImpl->maWinClipRegion.Intersect( ImplPixelToDevicePixel( mpWindowImpl->maWinRegion ) );
|
|
||||||
|
|
||||||
// ClipSiblings
|
|
||||||
if ( mpWindowImpl->mbClipSiblings && !ImplIsOverlapWindow() )
|
|
||||||
ImplClipSiblings( mpWindowImpl->maWinClipRegion );
|
|
||||||
|
|
||||||
// Clip Parent Boundaries
|
|
||||||
ImplClipBoundaries( mpWindowImpl->maWinClipRegion, false, true );
|
|
||||||
|
|
||||||
// Clip Children
|
|
||||||
if ( (GetStyle() & WB_CLIPCHILDREN) || mpWindowImpl->mbClipChildren )
|
|
||||||
mpWindowImpl->mbInitChildRegion = true;
|
|
||||||
|
|
||||||
mpWindowImpl->mbInitWinClipRegion = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::ImplInitWinChildClipRegion()
|
|
||||||
{
|
|
||||||
if ( !mpWindowImpl->mpFirstChild )
|
|
||||||
{
|
|
||||||
if ( mpWindowImpl->mpChildClipRegion )
|
|
||||||
{
|
|
||||||
delete mpWindowImpl->mpChildClipRegion;
|
|
||||||
mpWindowImpl->mpChildClipRegion = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( !mpWindowImpl->mpChildClipRegion )
|
|
||||||
mpWindowImpl->mpChildClipRegion = new Region( mpWindowImpl->maWinClipRegion );
|
|
||||||
else
|
|
||||||
*mpWindowImpl->mpChildClipRegion = mpWindowImpl->maWinClipRegion;
|
|
||||||
|
|
||||||
ImplClipChildren( *mpWindowImpl->mpChildClipRegion );
|
|
||||||
}
|
|
||||||
|
|
||||||
mpWindowImpl->mbInitChildRegion = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Region* Window::ImplGetWinChildClipRegion()
|
|
||||||
{
|
|
||||||
if ( mpWindowImpl->mbInitWinClipRegion )
|
|
||||||
ImplInitWinClipRegion();
|
|
||||||
if ( mpWindowImpl->mbInitChildRegion )
|
|
||||||
ImplInitWinChildClipRegion();
|
|
||||||
if ( mpWindowImpl->mpChildClipRegion )
|
|
||||||
return mpWindowImpl->mpChildClipRegion;
|
|
||||||
else
|
|
||||||
return &mpWindowImpl->maWinClipRegion;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::ImplIntersectAndUnionOverlapWindows( const Region& rInterRegion, Region& rRegion )
|
void Window::ImplIntersectAndUnionOverlapWindows( const Region& rInterRegion, Region& rRegion )
|
||||||
{
|
{
|
||||||
Window* pWindow = mpWindowImpl->mpFirstOverlap;
|
Window* pWindow = mpWindowImpl->mpFirstOverlap;
|
||||||
@@ -4992,31 +4853,6 @@ Font Window::GetPointFont() const
|
|||||||
return aFont;
|
return aFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::SetParentClipMode( sal_uInt16 nMode )
|
|
||||||
{
|
|
||||||
|
|
||||||
if ( mpWindowImpl->mpBorderWindow )
|
|
||||||
mpWindowImpl->mpBorderWindow->SetParentClipMode( nMode );
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( !ImplIsOverlapWindow() )
|
|
||||||
{
|
|
||||||
mpWindowImpl->mnParentClipMode = nMode;
|
|
||||||
if ( nMode & PARENTCLIPMODE_CLIP )
|
|
||||||
mpWindowImpl->mpParent->mpWindowImpl->mbClipChildren = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sal_uInt16 Window::GetParentClipMode() const
|
|
||||||
{
|
|
||||||
|
|
||||||
if ( mpWindowImpl->mpBorderWindow )
|
|
||||||
return mpWindowImpl->mpBorderWindow->GetParentClipMode();
|
|
||||||
else
|
|
||||||
return mpWindowImpl->mnParentClipMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Window::SetWindowRegionPixel()
|
void Window::SetWindowRegionPixel()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -5155,43 +4991,6 @@ bool Window::IsWindowRegionPixel() const
|
|||||||
return mpWindowImpl->mbWinRegion;
|
return mpWindowImpl->mbWinRegion;
|
||||||
}
|
}
|
||||||
|
|
||||||
Region Window::GetWindowClipRegionPixel( sal_uInt16 nFlags ) const
|
|
||||||
{
|
|
||||||
|
|
||||||
Region aWinClipRegion;
|
|
||||||
|
|
||||||
if ( nFlags & WINDOW_GETCLIPREGION_NOCHILDREN )
|
|
||||||
{
|
|
||||||
if ( mpWindowImpl->mbInitWinClipRegion )
|
|
||||||
((Window*)this)->ImplInitWinClipRegion();
|
|
||||||
aWinClipRegion = mpWindowImpl->maWinClipRegion;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Region* pWinChildClipRegion = ((Window*)this)->ImplGetWinChildClipRegion();
|
|
||||||
aWinClipRegion = *pWinChildClipRegion;
|
|
||||||
// --- RTL --- remirror clip region before passing it to somebody
|
|
||||||
if( ImplIsAntiparallel() )
|
|
||||||
{
|
|
||||||
const OutputDevice *pOutDev = GetOutDev();
|
|
||||||
pOutDev->ReMirror( aWinClipRegion );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( nFlags & WINDOW_GETCLIPREGION_NULL )
|
|
||||||
{
|
|
||||||
Rectangle aWinRect( Point( mnOutOffX, mnOutOffY ), Size( mnOutWidth, mnOutHeight ) );
|
|
||||||
Region aWinRegion( aWinRect );
|
|
||||||
|
|
||||||
if ( aWinRegion == aWinClipRegion )
|
|
||||||
aWinClipRegion.SetNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
aWinClipRegion.Move( -mnOutOffX, -mnOutOffY );
|
|
||||||
|
|
||||||
return aWinClipRegion;
|
|
||||||
}
|
|
||||||
|
|
||||||
Region Window::GetPaintRegion() const
|
Region Window::GetPaintRegion() const
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -5208,30 +5007,6 @@ Region Window::GetPaintRegion() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::ExpandPaintClipRegion( const Region& rRegion )
|
|
||||||
{
|
|
||||||
if( mpWindowImpl->mpPaintRegion )
|
|
||||||
{
|
|
||||||
Region aPixRegion = LogicToPixel( rRegion );
|
|
||||||
Region aDevPixRegion = ImplPixelToDevicePixel( aPixRegion );
|
|
||||||
|
|
||||||
Region aWinChildRegion = *ImplGetWinChildClipRegion();
|
|
||||||
// --- RTL -- only this region is in frame coordinates, so re-mirror it
|
|
||||||
if( ImplIsAntiparallel() )
|
|
||||||
{
|
|
||||||
const OutputDevice *pOutDev = GetOutDev();
|
|
||||||
pOutDev->ReMirror( aWinChildRegion );
|
|
||||||
}
|
|
||||||
|
|
||||||
aDevPixRegion.Intersect( aWinChildRegion );
|
|
||||||
if( ! aDevPixRegion.IsEmpty() )
|
|
||||||
{
|
|
||||||
mpWindowImpl->mpPaintRegion->Union( aDevPixRegion );
|
|
||||||
mbInitClipRegion = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static SystemWindow *ImplGetLastSystemWindow( Window *pWin )
|
static SystemWindow *ImplGetLastSystemWindow( Window *pWin )
|
||||||
{
|
{
|
||||||
// get the most top-level system window, the one that contains the taskpanelist
|
// get the most top-level system window, the one that contains the taskpanelist
|
||||||
|
Reference in New Issue
Block a user