Author: fireball
Date: Fri Jan 14 14:34:26 2011
New Revision: 50383
URL:
http://svn.reactos.org/svn/reactos?rev=50383&view=rev
Log:
- Repaint all children only in case of non-desktop window paint operation. Should remove
unnecessary redrawing and thus increase performance.
Modified:
branches/arwinss/reactos/subsystems/win32/win32k/swm/winman.c
Modified: branches/arwinss/reactos/subsystems/win32/win32k/swm/winman.c
URL:
http://svn.reactos.org/svn/reactos/branches/arwinss/reactos/subsystems/win3…
==============================================================================
--- branches/arwinss/reactos/subsystems/win32/win32k/swm/winman.c [iso-8859-1] (original)
+++ branches/arwinss/reactos/subsystems/win32/win32k/swm/winman.c [iso-8859-1] Fri Jan 14
14:34:26 2011
@@ -95,6 +95,7 @@
struct region *ClientRegion;
int client_left = 0, client_top = 0;
UINT i;
+ ULONG flags = RDW_INVALIDATE | RDW_ERASE;
ClientRegion = create_empty_region();
copy_region(ClientRegion, Region);
@@ -114,27 +115,33 @@
//DPRINT1("rect (%d,%d)-(%d,%d)\n", TmpRect.left, TmpRect.top,
TmpRect.right, TmpRect.bottom);
/* Bring every rect in a region to front */
- for (i=0; i<Region->num_rects; i++)
- {
+ if (Window != &SwmRoot)
+ {
+ for (i=0; i<Region->num_rects; i++)
+ {
#if 0
- DbgPrint("(%d,%d)-(%d,%d), and redraw coords (%d,%d)-(%d,%d); ",
Region->rects[i].left, Region->rects[i].top,
- Region->rects[i].right, Region->rects[i].bottom,
- Region->rects[i].left - Window->Window.left, Region->rects[i].top -
Window->Window.top,
- Region->rects[i].right - Window->Window.left,
Region->rects[i].bottom - Window->Window.top);
+ DbgPrint("(%d,%d)-(%d,%d), and redraw coords (%d,%d)-(%d,%d); ",
Region->rects[i].left, Region->rects[i].top,
+ Region->rects[i].right, Region->rects[i].bottom,
+ Region->rects[i].left - Window->Window.left,
Region->rects[i].top - Window->Window.top,
+ Region->rects[i].right - Window->Window.left,
Region->rects[i].bottom - Window->Window.top);
#endif
- req.rect = Region->rects[i];
- req.window = (UINT_PTR)Window->hwnd;
- req_update_window_zorder(&req, &reply);
- }
- //DbgPrint("\n");
+ req.rect = Region->rects[i];
+ req.window = (UINT_PTR)Window->hwnd;
+ req_update_window_zorder(&req, &reply);
+ }
+ //DbgPrint("\n");
+ }
/* Convert region to client coordinates */
client_to_screen( Win, &client_left, &client_top );
offset_region(ClientRegion, -client_left, -client_top);
+ if (Window != &SwmRoot)
+ flags |= RDW_ALLCHILDREN;
+
/* Redraw window */
- redraw_window(Win, ClientRegion, 1, RDW_INVALIDATE | RDW_ERASE | RDW_FRAME |
RDW_ALLCHILDREN );
+ redraw_window(Win, ClientRegion, 1, flags | RDW_FRAME);
UserLeave();