Release 0.3.0
[wine] / windows / painting.c
1 /*
2  * Window painting functions
3  *
4  * Copyright 1993 Alexandre Julliard
5  */
6
7 static char Copyright[] = "Copyright  Alexandre Julliard, 1993";
8
9 #include <math.h>
10 #include <X11/Xlib.h>
11
12 #include "win.h"
13
14   /* Last CTLCOLOR id */
15 #define CTLCOLOR_MAX   CTLCOLOR_STATIC
16
17
18 /***********************************************************************
19  *           BeginPaint    (USER.39)
20  */
21 HDC BeginPaint( HWND hwnd, LPPAINTSTRUCT lps ) 
22 {
23     WND * wndPtr = WIN_FindWndPtr( hwnd );
24     if (!wndPtr) return 0;
25
26     lps->hdc = GetDC( hwnd );
27     if (!lps->hdc) return 0;
28     
29     SelectVisRgn( lps->hdc, wndPtr->hrgnUpdate );
30     if (wndPtr->hrgnUpdate)
31     {
32         GetRgnBox( wndPtr->hrgnUpdate, &lps->rcPaint );
33         DeleteObject( wndPtr->hrgnUpdate );
34         wndPtr->hrgnUpdate = 0;
35     }
36     else
37     {
38         lps->rcPaint.left   = 0;
39         lps->rcPaint.top    = 0;
40         lps->rcPaint.right  = wndPtr->rectClient.right-wndPtr->rectClient.left;
41         lps->rcPaint.bottom = wndPtr->rectClient.bottom-wndPtr->rectClient.top;
42     }    
43
44     if (!(wndPtr->flags & WIN_ERASE_UPDATERGN)) lps->fErase = TRUE;
45     else lps->fErase = !SendMessage( hwnd, WM_ERASEBKGND, lps->hdc, 0 );
46
47     GlobalUnlock( hwnd );
48     return lps->hdc;
49 }
50
51
52 /***********************************************************************
53  *           EndPaint    (USER.40)
54  */
55 void EndPaint( HWND hwnd, LPPAINTSTRUCT lps )
56 {
57     ReleaseDC( hwnd, lps->hdc );
58 }
59
60
61 /***********************************************************************
62  *           FillWindow    (USER.324)
63  */
64 void FillWindow( HWND hwndParent, HWND hwnd, HDC hdc, HBRUSH hbrush )
65 {
66     RECT rect;
67     WND * wndPtr = WIN_FindWndPtr( hwnd );
68     if (!wndPtr) return;
69     rect.left   = 0;
70     rect.top    = 0;
71     rect.right  = wndPtr->rectClient.right - wndPtr->rectClient.left;
72     rect.bottom = wndPtr->rectClient.bottom - wndPtr->rectClient.top;
73     PaintRect( hwndParent, hwnd, hdc, hbrush, &rect );
74     GlobalUnlock( hwnd );
75 }
76
77
78 /***********************************************************************
79  *           PaintRect    (USER.325)
80  */
81 void PaintRect(HWND hwndParent, HWND hwnd, HDC hdc, HBRUSH hbrush, LPRECT rect)
82 {
83       /* Send WM_CTLCOLOR message if needed */
84
85     if (hbrush <= CTLCOLOR_MAX)
86     {
87         if (!hwndParent) return;
88         hbrush = (HBRUSH)SendMessage( hwndParent, WM_CTLCOLOR,
89                                       hdc, hwnd | (hbrush << 16) );
90     }
91     if (hbrush) FillRect( hdc, rect, hbrush );
92 }