mirror of
https://github.com/reactos/reactos.git
synced 2025-07-03 16:41:24 +00:00
Incomplete support for WS_EX_TRANSPARENT, should fix Task Manager painting bugs.
svn path=/trunk/; revision=17963
This commit is contained in:
parent
32e72ac4f3
commit
eca43c5532
4 changed files with 26 additions and 11 deletions
|
@ -602,13 +602,28 @@ HWND FASTCALL
|
||||||
IntFindWindowToRepaint(PWINDOW_OBJECT Window, PW32THREAD Thread)
|
IntFindWindowToRepaint(PWINDOW_OBJECT Window, PW32THREAD Thread)
|
||||||
{
|
{
|
||||||
HWND hChild;
|
HWND hChild;
|
||||||
|
PWINDOW_OBJECT TempWindow;
|
||||||
|
|
||||||
while (Window != NULL)
|
for (; Window != NULL; Window = Window->NextSibling)
|
||||||
{
|
{
|
||||||
/* FIXME: Transparent windows. */
|
if (IntWndBelongsToThread(Window, Thread) &&
|
||||||
if (IntIsWindowDirty(Window) &&
|
IntIsWindowDirty(Window))
|
||||||
IntWndBelongsToThread(Window, Thread))
|
|
||||||
{
|
{
|
||||||
|
/* Make sure all non-transparent siblings are already drawn. */
|
||||||
|
if (Window->ExStyle & WS_EX_TRANSPARENT)
|
||||||
|
{
|
||||||
|
for (TempWindow = Window->NextSibling; TempWindow != NULL;
|
||||||
|
TempWindow = TempWindow->NextSibling)
|
||||||
|
{
|
||||||
|
if (!(TempWindow->ExStyle & WS_EX_TRANSPARENT) &&
|
||||||
|
IntWndBelongsToThread(TempWindow, Thread) &&
|
||||||
|
IntIsWindowDirty(TempWindow))
|
||||||
|
{
|
||||||
|
return TempWindow->hSelf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Window->hSelf;
|
return Window->hSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -618,8 +633,6 @@ IntFindWindowToRepaint(PWINDOW_OBJECT Window, PW32THREAD Thread)
|
||||||
if (hChild != NULL)
|
if (hChild != NULL)
|
||||||
return hChild;
|
return hChild;
|
||||||
}
|
}
|
||||||
|
|
||||||
Window = Window->NextSibling;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -89,7 +89,8 @@ VIS_ComputeVisibleRegion(
|
||||||
CurrentSibling = CurrentWindow->FirstChild;
|
CurrentSibling = CurrentWindow->FirstChild;
|
||||||
while (CurrentSibling != NULL && CurrentSibling != PreviousWindow)
|
while (CurrentSibling != NULL && CurrentSibling != PreviousWindow)
|
||||||
{
|
{
|
||||||
if (CurrentSibling->Style & WS_VISIBLE)
|
if ((CurrentSibling->Style & WS_VISIBLE) &&
|
||||||
|
!(CurrentSibling->ExStyle & WS_EX_TRANSPARENT))
|
||||||
{
|
{
|
||||||
ClipRgn = UnsafeIntCreateRectRgnIndirect(&CurrentSibling->WindowRect);
|
ClipRgn = UnsafeIntCreateRectRgnIndirect(&CurrentSibling->WindowRect);
|
||||||
/* Combine it with the window region if available */
|
/* Combine it with the window region if available */
|
||||||
|
@ -115,7 +116,8 @@ VIS_ComputeVisibleRegion(
|
||||||
CurrentWindow = Window->FirstChild;
|
CurrentWindow = Window->FirstChild;
|
||||||
while (CurrentWindow)
|
while (CurrentWindow)
|
||||||
{
|
{
|
||||||
if (CurrentWindow->Style & WS_VISIBLE)
|
if ((CurrentWindow->Style & WS_VISIBLE) &&
|
||||||
|
!(CurrentWindow->ExStyle & WS_EX_TRANSPARENT))
|
||||||
{
|
{
|
||||||
ClipRgn = UnsafeIntCreateRectRgnIndirect(&CurrentWindow->WindowRect);
|
ClipRgn = UnsafeIntCreateRectRgnIndirect(&CurrentWindow->WindowRect);
|
||||||
/* Combine it with the window region if available */
|
/* Combine it with the window region if available */
|
||||||
|
|
|
@ -342,7 +342,6 @@ UserGetDCEx(PWINDOW_OBJECT Window OPTIONAL, HANDLE ClipRegion, ULONG Flags)
|
||||||
Flags |= DCX_CACHE;
|
Flags |= DCX_CACHE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (Flags & DCX_USESTYLE)
|
if (Flags & DCX_USESTYLE)
|
||||||
{
|
{
|
||||||
Flags &= ~(DCX_CLIPCHILDREN | DCX_CLIPSIBLINGS | DCX_PARENTCLIP);
|
Flags &= ~(DCX_CLIPCHILDREN | DCX_CLIPSIBLINGS | DCX_PARENTCLIP);
|
||||||
|
|
|
@ -1118,7 +1118,8 @@ co_WinPosSetWindowPos(
|
||||||
* change.
|
* change.
|
||||||
*/
|
*/
|
||||||
if (VisBefore != NULL && VisAfter != NULL && !(WinPos.flags & SWP_NOCOPYBITS) &&
|
if (VisBefore != NULL && VisAfter != NULL && !(WinPos.flags & SWP_NOCOPYBITS) &&
|
||||||
((WinPos.flags & SWP_NOSIZE) || !(WvrFlags & WVR_REDRAW)))
|
((WinPos.flags & SWP_NOSIZE) || !(WvrFlags & WVR_REDRAW)) &&
|
||||||
|
!(Window->ExStyle & WS_EX_TRANSPARENT))
|
||||||
{
|
{
|
||||||
CopyRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
|
CopyRgn = NtGdiCreateRectRgn(0, 0, 0, 0);
|
||||||
RgnType = NtGdiCombineRgn(CopyRgn, VisAfter, VisBefore, RGN_AND);
|
RgnType = NtGdiCombineRgn(CopyRgn, VisAfter, VisBefore, RGN_AND);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue