rtoss - Diff between revs 181 and 182

Subversion Repositories:
Rev:
Show entire file - Ignore whitespace
Rev 181 Rev 182
Line 1... Line 1...
1 /* 1 /*
2 ** Copyright (C) 2003 Nullsoft, Inc. -  
-   2 ** Copyright (C) 2003-2008 Nullsoft, Inc.
3 ** 3 **
4 ** This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held 4 ** This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held
5 ** liable for any damages arising from the use of this software. 5 ** liable for any damages arising from the use of this software.
6 ** 6 **
7 ** Permission is granted to anyone to use this software for any purpose, including commercial applications, and to 7 ** Permission is granted to anyone to use this software for any purpose, including commercial applications, and to
Line 18... Line 18...
18 18
19 #ifndef _WA_DLG_H_ 19 #ifndef _WA_DLG_H_
20 #define _WA_DLG_H_ 20 #define _WA_DLG_H_
21 21
22 #include "wa_ipc.h" 22 #include "wa_ipc.h"
23 -  
-   23 #ifdef __cplusplus
-   24 extern "C" {
-   25 #endif
24 /* 26 /*
25   -  
26   dont know where to put this yet :) -  
27        1) gen.bmp has a generic window frame for plugins to use. 27        1) gen.bmp has a generic window frame for plugins to use.
28           its format is similar to the minibrowser's. 28           its format is similar to the minibrowser's.
29           In addition gen.bmp includes a font for the titlebar, in both 29           In addition gen.bmp includes a font for the titlebar, in both
30           highlight and no-highlight modes. The font is variable width, 30           highlight and no-highlight modes. The font is variable width,
31           and it uses the first color before the letter A as the delimiter. 31           and it uses the first color before the letter A as the delimiter.
Line 58... Line 58...
58             x=82: scrollbar dead area color 58             x=82: scrollbar dead area color
59             x=84: listview/treeview selection bar text color (active) 59             x=84: listview/treeview selection bar text color (active)
60             x=86: listview/treeview selection bar back color (active) 60             x=86: listview/treeview selection bar back color (active)
61             x=88: listview/treeview selection bar text color (inactive) 61             x=88: listview/treeview selection bar text color (inactive)
62             x=90: listview/treeview selection bar back color (inactive) 62             x=90: listview/treeview selection bar back color (inactive)
-   63                         x=92: alternate item background
-   64                         x=94: alternate item foreground
63 */ 65 */
64 -  
65 66
66 #define DCW_SUNKENBORDER 0x00010000 67 #define DCW_SUNKENBORDER 0x00010000
67 #define DCW_DIVIDER 0x00020000 68 #define DCW_DIVIDER 0x00020000
68 69
69 enum 70 enum
Line 88... Line 89...
88   WADLG_SCROLLBAR_DEADAREA_COLOR, 89   WADLG_SCROLLBAR_DEADAREA_COLOR,
89   WADLG_SELBAR_FGCOLOR, 90   WADLG_SELBAR_FGCOLOR,
90   WADLG_SELBAR_BGCOLOR, 91   WADLG_SELBAR_BGCOLOR,
91   WADLG_INACT_SELBAR_FGCOLOR, 92   WADLG_INACT_SELBAR_FGCOLOR,
92   WADLG_INACT_SELBAR_BGCOLOR, 93   WADLG_INACT_SELBAR_BGCOLOR,
-   94   WADLG_ITEMBG2,
-   95   WADLG_ITEMFG2,
93   WADLG_NUM_COLORS 96   WADLG_NUM_COLORS
94 }; 97 };
95 98
96 -  
-   99 typedef enum _WACURSOR  // used in IPC_GETSKINCURSORS
-   100 {
-   101         WACURSOR_VOLUME = 0,            // volume & balane
-   102         WACURSOR_POSITION = 1,          // position
-   103         WACURSOR_BTN_WINSHADE = 2,      // winshade
-   104         WACURSOR_BTN_MINIMIZE = 3,      // minimize
-   105         WACURSOR_BTN_CLOSE = 4,         // close
-   106         WACURSOR_MENU =         5,                      // main menu
-   107         WACURSOR_TITLEBAR = 6,          // title bar
-   108         WACURSOR_SONGNAME = 7,         
-   109         WACURSOR_NORMAL = 8,
-   110         WACURSOR_WINSHADE_BTN_WINSHADE = 9,
-   111         WACURSOR_WINSHADE_BTN_MINIMIZE = 10,
-   112         WACURSOR_WINSHADE_POSITION = 11,
-   113         WACURSOR_WINSHADE_BTN_CLOSE = 12,
-   114         WACURSOR_WINSHADE_MENU = 13,
-   115         WACURSOR_WINSHADE_NORMAL = 14,
-   116         WACURSOR_PL_BTN_WINSHADE = 15,
-   117         WACURSOR_PL_BTN_CLOSE = 16,
-   118         WACURSOR_PL_TITLEBAR = 17,
-   119         WACURSOR_PL_VSCROLL = 18,
-   120         WACURSOR_PL_RESIZE = 19,
-   121         WACURSOR_PL_NORMAL = 20,
-   122         WACURSOR_PL_WINSHADE_BTN_WINSHADE = 21,
-   123         WACURSOR_PL_WINSHADE_BTN_CLOSE = 22,
-   124         WACURSOR_PL_WINSHADE_HSIZE = 23,
-   125         WACURSOR_PL_WINSHADE_NORMAL = 24,
-   126         WACURSOR_EQ_SLIDER = 25,
-   127         WACURSOR_EQ_BTN_CLOSE = 26,
-   128         WACURSOR_EQ_TITLEBAR = 27,
-   129         WACURSOR_EQ_NORMAL = 28,
-   130 } WACURSOR;
97 131
98 void WADlg_init(HWND hwndWinamp); // call this on init, or on WM_DISPLAYCHANGE 132 void WADlg_init(HWND hwndWinamp); // call this on init, or on WM_DISPLAYCHANGE
99 void WADlg_close(); 133 void WADlg_close();
100 -  
101 int WADlg_getColor(int idx); 134 int WADlg_getColor(int idx);
-   135 int WADlg_initted();
102 136
103 int WADlg_handleDialogMsgs(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // -  
-   137 LRESULT WADlg_handleDialogMsgs(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); //
104 void WADlg_DrawChildWindowBorders(HWND hwndDlg, int *tab, int tabsize); // each entry in tab would be the id | DCW_* 138 void WADlg_DrawChildWindowBorders(HWND hwndDlg, int *tab, int tabsize); // each entry in tab would be the id | DCW_*
105 139
106 HBITMAP WADlg_getBitmap(); 140 HBITMAP WADlg_getBitmap();
107 -  
108 141
109 /// define WA_DLG_IMPLEMENT in one of your source files before including this .h 142 /// define WA_DLG_IMPLEMENT in one of your source files before including this .h
110 // if you are making a media library plugin, you dont need to do this, look at view_ex for 143 // if you are making a media library plugin, you dont need to do this, look at view_ex for
111 // an example of how to get the function *'s via an IPC message. 144 // an example of how to get the function *'s via an IPC message.
-   145 #ifdef __cplusplus
-   146 }
-   147 #endif
112 148
113 #ifdef WA_DLG_IMPLEMENT 149 #ifdef WA_DLG_IMPLEMENT
114 150
115 static HBRUSH wadlg_lastbrush; -  
116 static HBITMAP wadlg_bitmap; // load this manually -  
-   151 static HBRUSH wadlg_lastbrush=0;
-   152 static HBITMAP wadlg_bitmap=0; // load this manually
117 static int wadlg_colors[WADLG_NUM_COLORS]; 153 static int wadlg_colors[WADLG_NUM_COLORS];
118 static int wadlg_defcolors[WADLG_NUM_COLORS]= 154 static int wadlg_defcolors[WADLG_NUM_COLORS]=
119 { 155 {
120 RGB(0,0,0), -  
121 RGB(0,255,0), -  
122 RGB(36,36,60), -  
123 RGB(57,56,66), -  
124 RGB(255,255,255), -  
125 RGB(132,148,165),   -  
126 RGB(0,0,198), -  
127 RGB(36*2,36*2,60*2), -  
128 RGB(255,255,255), -  
129 RGB(36*3,36*3,60*3), -  
130 RGB(36,36,60), -  
131 RGB(36*0.5,36*0.5,60*0.5), -  
132 RGB(36,36,60), -  
133 RGB(36*1,36*1,60*1), -  
134 RGB(36*1,36*1,60*1), -  
135 RGB(121,130,150), -  
136 RGB(78,88,110), -  
137 RGB(36*1,36*1,60*1), -  
138 RGB(255,255,255), -  
139 RGB(0,0,180), -  
140 RGB(0,255,0), -  
141 RGB(0,0,128), -  
-   156         RGB(0,0,0),
-   157         RGB(0,255,0),
-   158         RGB(36,36,60),
-   159         RGB(57,56,66),
-   160         RGB(255,255,255),
-   161         RGB(132,148,165),  
-   162         RGB(0,0,198),
-   163         RGB(36*2,36*2,60*2),
-   164         RGB(255,255,255),
-   165         RGB(36*3,36*3,60*3),
-   166         RGB(36,36,60),
-   167         RGB(36*0.5,36*0.5,60*0.5),
-   168         RGB(36,36,60),
-   169         RGB(36*1,36*1,60*1),
-   170         RGB(36*1,36*1,60*1),
-   171         RGB(121,130,150),
-   172         RGB(78,88,110),
-   173         RGB(36*1,36*1,60*1),
-   174         RGB(255,255,255),
-   175         RGB(0,0,180),
-   176         RGB(0,255,0),
-   177         RGB(0,0,128),
-   178         RGB(0,0,0),
-   179         RGB(0,255,0),
142 }; 180 };
-   181
-   182 int WADlg_initted()
-   183 {
-   184         return !!wadlg_bitmap;
-   185 }
143 186
144 int WADlg_getColor(int idx) 187 int WADlg_getColor(int idx)
145 { 188 {
146   if (idx < 0 || idx >= WADLG_NUM_COLORS) return 0; -  
147   return wadlg_colors[idx]; -  
-   189         if (idx < 0 || idx >= WADLG_NUM_COLORS) return 0;
-   190         return wadlg_colors[idx];
148 } 191 }
149 192
150 HBITMAP WADlg_getBitmap() 193 HBITMAP WADlg_getBitmap()
151 { 194 {
152   return wadlg_bitmap; -  
-   195         return wadlg_bitmap;
153 } 196 }
154 197
155 void WADlg_init(HWND hwndWinamp) // call this on init, or on WM_DISPLAYCHANGE 198 void WADlg_init(HWND hwndWinamp) // call this on init, or on WM_DISPLAYCHANGE
156 { 199 {
157   if (wadlg_bitmap) DeleteObject(wadlg_bitmap); -  
158   wadlg_bitmap = (HBITMAP) SendMessage(hwndWinamp,WM_WA_IPC,0,IPC_GET_GENSKINBITMAP); -  
159   if (wadlg_bitmap) -  
160   { -  
161     HDC tmpDC=CreateCompatibleDC(NULL); -  
162     HGDIOBJ o=SelectObject(tmpDC,(HGDIOBJ)wadlg_bitmap); -  
163     int x; -  
164     int defbgcol=GetPixel(tmpDC,111,0); -  
165     for (x = 0; x < WADLG_NUM_COLORS; x ++) -  
166     { -  
167       int a=GetPixel(tmpDC,48+x*2,0); -  
168       if (a == CLR_INVALID || a == RGB(0,198,255) || a == defbgcol) -  
169       { -  
170         //defaults for old skins -  
171         if (x == WADLG_SELBAR_FGCOLOR || x == WADLG_INACT_SELBAR_FGCOLOR) a=wadlg_colors[WADLG_WNDFG]; -  
172         else if (x == WADLG_SELBAR_BGCOLOR || x == WADLG_INACT_SELBAR_BGCOLOR) -  
173         { -  
174           a=wadlg_colors[WADLG_SELCOLOR]; -  
175           if (x == WADLG_INACT_SELBAR_BGCOLOR) -  
176             a=((a/2)&0x7F7F7F)+(((wadlg_colors[WADLG_WNDBG])/2)&0x7F7F7F); -  
177         } -  
178         else a=wadlg_defcolors[x]; -  
179       } -  
180       wadlg_colors[x]=a; -  
181     } -  
-   200         if (wadlg_bitmap) DeleteObject(wadlg_bitmap);
-   201         wadlg_bitmap = (HBITMAP) SendMessage(hwndWinamp,WM_WA_IPC,0,IPC_GET_GENSKINBITMAP);
-   202         if (wadlg_bitmap)
-   203         {
-   204                 HDC tmpDC=CreateCompatibleDC(NULL);
-   205                 HGDIOBJ o=SelectObject(tmpDC,(HGDIOBJ)wadlg_bitmap);
-   206                 int defbgcol=GetPixel(tmpDC,111,0);
-   207                 for (int x = 0; x < WADLG_NUM_COLORS; x ++)
-   208                 {
-   209                         int a=GetPixel(tmpDC,48+x*2,0);
-   210                         if (a == CLR_INVALID || a == RGB(0,198,255) || a == defbgcol)
-   211                         {
-   212                                 //defaults for old skins
-   213                                 if (x == WADLG_SELBAR_FGCOLOR || x == WADLG_INACT_SELBAR_FGCOLOR) a=wadlg_colors[WADLG_WNDFG];
-   214                                 else if (x == WADLG_SELBAR_BGCOLOR || x == WADLG_INACT_SELBAR_BGCOLOR)
-   215                                 {
-   216                                         a=wadlg_colors[WADLG_SELCOLOR];
-   217                                         if (x == WADLG_INACT_SELBAR_BGCOLOR)
-   218                                         a=((a/2)&0x7F7F7F)+(((wadlg_colors[WADLG_WNDBG])/2)&0x7F7F7F);
-   219                                 }
-   220                                 else if (x == WADLG_ITEMBG2)
-   221                                 {
-   222                                         a=wadlg_colors[WADLG_ITEMBG];
-   223                                 }
-   224                                 else if (x == WADLG_ITEMFG2)
-   225                                 {
-   226                                         a=wadlg_colors[WADLG_ITEMFG];
-   227                                 }
-   228                                 else a=wadlg_defcolors[x];
-   229                         }
-   230                         wadlg_colors[x]=a;
-   231                 }
182 232
183     SelectObject(tmpDC,o); -  
184     DeleteDC(tmpDC); -  
185   } -  
-   233                 SelectObject(tmpDC,o);
-   234                 DeleteDC(tmpDC);
-   235         }
186 } 236 }
187 237
188 void WADlg_close() 238 void WADlg_close()
189 { 239 {
190   if (wadlg_bitmap) DeleteObject(wadlg_bitmap); -  
191   wadlg_bitmap=0; -  
192   if (wadlg_lastbrush) DeleteObject(wadlg_lastbrush); -  
193   wadlg_lastbrush=0; -  
-   240         if (wadlg_bitmap) DeleteObject(wadlg_bitmap);
-   241         wadlg_bitmap=0;
-   242         if (wadlg_lastbrush) DeleteObject(wadlg_lastbrush);
-   243         wadlg_lastbrush=0;
194 } 244 }
195 245
196 void WADlg_dotLine(HDC hdc, int left, int top, int len, int vert) 246 void WADlg_dotLine(HDC hdc, int left, int top, int len, int vert)
197 { 247 {
198   for(int i=(top&1);i<len-1;i+=2) -  
199   { -  
200     if(vert) { -  
201       MoveToEx(hdc,left,top+i,NULL); -  
202       LineTo(hdc,left,top+i+1); -  
203     } else { -  
204       MoveToEx(hdc,left+i,top,NULL); -  
205       LineTo(hdc,left+i+1,top); -  
206     } -  
207   } -  
-   248         for(int i=(top&1);i<len-1;i+=2)
-   249         {
-   250             if(vert)
-   251                 {
-   252                         MoveToEx(hdc,left,top+i,NULL);
-   253                         LineTo(hdc,left,top+i+1);
-   254                 }
-   255                 else
-   256                 {
-   257                         MoveToEx(hdc,left+i,top,NULL);
-   258                         LineTo(hdc,left+i+1,top);
-   259                 }
-   260         }
208 } 261 }
209 262
210 int WADlg_handleDialogMsgs(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) -  
-   263 LRESULT WADlg_handleDialogMsgs(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
211 { 264 {
212         if (uMsg == WM_DRAWITEM) 265         if (uMsg == WM_DRAWITEM)
213         { 266         {
214                 DRAWITEMSTRUCT *di = (DRAWITEMSTRUCT *)lParam; 267                 DRAWITEMSTRUCT *di = (DRAWITEMSTRUCT *)lParam;
215                 if (di->CtlType == ODT_BUTTON) { 268                 if (di->CtlType == ODT_BUTTON) {
216                         char wt[256]; -  
-   269                         wchar_t wt[256];
217                         RECT r; 270                         RECT r;
218                         GetDlgItemText(hwndDlg,wParam,wt,sizeof(wt)); -  
-   271                         GetDlgItemTextW(hwndDlg,(INT)wParam,wt,sizeof(wt)/sizeof(*wt));
219 272
220       HDC hdc = CreateCompatibleDC(di->hDC); -  
221       SelectObject(hdc,wadlg_bitmap); -  
-   273                         HDC hdc = CreateCompatibleDC(di->hDC);
-   274                         HBITMAP hbmpOld = (HBITMAP)SelectObject(hdc, wadlg_bitmap);
222 275
223                         r=di->rcItem; 276                         r=di->rcItem;
224       SetStretchBltMode(di->hDC,COLORONCOLOR); -  
-   277                         SetStretchBltMode(di->hDC,COLORONCOLOR);
225 278
-   279                         int yoffs = (di->itemState & ODS_SELECTED) ? 15 : 0;
226 280
227       int yoffs = (di->itemState & ODS_SELECTED) ? 15 : 0; -  
-   281                         BitBlt(di->hDC,r.left,r.top,4,4,hdc,0,yoffs,SRCCOPY); // top left
-   282                         StretchBlt(di->hDC,r.left+4,r.top,r.right-r.left-4-4,4,hdc,4,yoffs,47-4-4,4,SRCCOPY); // top center
-   283                         BitBlt(di->hDC,r.right-4,r.top,4,4,hdc,47-4,yoffs,SRCCOPY); // top right
228 284
229       BitBlt(di->hDC,r.left,r.top,4,4,hdc,0,yoffs,SRCCOPY); // top left -  
230       StretchBlt(di->hDC,r.left+4,r.top,r.right-r.left-4-4,4,hdc,4,yoffs,47-4-4,4,SRCCOPY); // top center -  
231       BitBlt(di->hDC,r.right-4,r.top,4,4,hdc,47-4,yoffs,SRCCOPY); // top right -  
-   285                         StretchBlt(di->hDC,r.left,r.top+4,4,r.bottom-r.top-4-4,hdc,0,4+yoffs,4,15-4-4,SRCCOPY); // left edge
-   286                         StretchBlt(di->hDC,r.right-4,r.top+4,4,r.bottom-r.top-4-4,hdc,47-4,4+yoffs,4,15-4-4,SRCCOPY); // right edge
232 287
233       StretchBlt(di->hDC,r.left,r.top+4,4,r.bottom-r.top-4-4,hdc,0,4+yoffs,4,15-4-4,SRCCOPY); // left edge -  
234       StretchBlt(di->hDC,r.right-4,r.top+4,4,r.bottom-r.top-4-4,hdc,47-4,4+yoffs,4,15-4-4,SRCCOPY); // right edge -  
235 -  
236       // center -  
237       StretchBlt(di->hDC,r.left+4,r.top+4,r.right-r.left-4-4,r.bottom-r.top-4-4,hdc,4,4+yoffs,47-4-4,15-4-4,SRCCOPY); -  
238 -  
239 -  
240       BitBlt(di->hDC,r.left,r.bottom-4,4,4,hdc,0,15-4+yoffs,SRCCOPY); // bottom left -  
241       StretchBlt(di->hDC,r.left+4,r.bottom-4,r.right-r.left-4-4,4,hdc,4,15-4+yoffs,47-4-4,4,SRCCOPY); // bottom center -  
242       BitBlt(di->hDC,r.right-4,r.bottom-4,4,4,hdc,47-4,15-4+yoffs,SRCCOPY); // bottom right -  
-   288                         // center
-   289                         StretchBlt(di->hDC,r.left+4,r.top+4,r.right-r.left-4-4,r.bottom-r.top-4-4,hdc,4,4+yoffs,47-4-4,15-4-4,SRCCOPY);
243 290
-   291                         BitBlt(di->hDC,r.left,r.bottom-4,4,4,hdc,0,15-4+yoffs,SRCCOPY); // bottom left
-   292                         StretchBlt(di->hDC,r.left+4,r.bottom-4,r.right-r.left-4-4,4,hdc,4,15-4+yoffs,47-4-4,4,SRCCOPY); // bottom center
-   293                         BitBlt(di->hDC,r.right-4,r.bottom-4,4,4,hdc,47-4,15-4+yoffs,SRCCOPY); // bottom right
244 294
245                         // draw text 295                         // draw text
246       SetBkMode(di->hDC,TRANSPARENT); -  
247                         SetTextColor(di->hDC,wadlg_colors[WADLG_BUTTONFG]); -  
248       if (di->itemState & ODS_SELECTED) {r.left+=2; r.top+=2;} -  
249                         DrawText(di->hDC,wt,-1,&r,DT_VCENTER|DT_SINGLELINE|DT_CENTER); -  
250       DeleteDC(hdc); -  
-   296                         SetBkMode(di->hDC,TRANSPARENT);
251 297
252       if(GetFocus()==di->hwndItem) { -  
253         HPEN pen=CreatePen(PS_SOLID,0,RGB(0,0,0)); -  
254         SelectObject(di->hDC,pen); -  
255         WADlg_dotLine(di->hDC,r.left+2,r.top+2,r.right-r.left-3,0); -  
256         WADlg_dotLine(di->hDC,r.right-3,r.top+2,r.bottom-r.top-3,1); -  
257         WADlg_dotLine(di->hDC,r.left+2,r.top+2,r.bottom-r.top-3,1); -  
258         WADlg_dotLine(di->hDC,r.left+2,r.bottom-3,r.right-r.left-3,0); -  
259         DeleteObject(pen); -  
260       } -  
-   298                         // this will do a different style for the button text depending on enabled state of the button
-   299                         COLORREF colour = wadlg_colors[WADLG_BUTTONFG];
-   300                         if(!IsWindowEnabled(di->hwndItem)){
-   301                                 COLORREF fg = wadlg_colors[WADLG_WNDFG],
-   302                                                  bg = wadlg_colors[WADLG_WNDBG];
-   303                                                  colour = RGB((GetRValue(fg)+GetRValue(bg))/2,
-   304                                                                           (GetGValue(fg)+GetGValue(bg))/2,
-   305                                                                           (GetBValue(fg)+GetBValue(bg))/2);
-   306                         }
-   307                         SetTextColor(di->hDC,colour);
-   308                
-   309                         if (di->itemState & ODS_SELECTED) {r.left+=2; r.top+=2;}
-   310                         DrawTextW(di->hDC,wt,-1,&r,DT_VCENTER|DT_SINGLELINE|DT_CENTER);
-   311          
-   312                         SelectObject(hdc, hbmpOld);
-   313                         DeleteDC(hdc);
-   314
-   315                         if(GetFocus()==di->hwndItem) {
-   316                                 HPEN hpen, hpenOld;
-   317                                 hpen =CreatePen(PS_SOLID,0,RGB(0,0,0));
-   318                                 hpenOld = (HPEN)SelectObject(di->hDC, hpen);
-   319                                 WADlg_dotLine(di->hDC,r.left+2,r.top+2,r.right-r.left-3,0);
-   320                                 WADlg_dotLine(di->hDC,r.right-3,r.top+2,r.bottom-r.top-3,1);
-   321                                 WADlg_dotLine(di->hDC,r.left+2,r.top+2,r.bottom-r.top-3,1);
-   322                                 WADlg_dotLine(di->hDC,r.left+2,r.bottom-3,r.right-r.left-3,0);
-   323                                 SelectObject(di->hDC, hpenOld);
-   324                                 DeleteObject(hpen);
-   325                         }
261                 }       326                 }      
262         } 327         }
263   switch(uMsg) -  
264   { -  
265     case WM_CTLCOLORLISTBOX: -  
266     case WM_CTLCOLORDLG: -  
267     case WM_CTLCOLORBTN: -  
268     case WM_CTLCOLORSTATIC: -  
269     case WM_CTLCOLOREDIT: -  
270     { -  
271       int bgcolor=(uMsg == WM_CTLCOLOREDIT || uMsg == WM_CTLCOLORLISTBOX) ? wadlg_colors[WADLG_ITEMBG] : (uMsg == WM_CTLCOLORBTN ? wadlg_colors[WADLG_ITEMBG] : wadlg_colors[WADLG_WNDBG]); -  
272       LOGBRUSH lb={BS_SOLID,GetNearestColor((HDC)wParam,bgcolor)}; -  
273       if (wadlg_lastbrush) DeleteObject(wadlg_lastbrush); -  
274       wadlg_lastbrush=CreateBrushIndirect(&lb); -  
275       SetTextColor((HDC)wParam,uMsg == WM_CTLCOLORSTATIC ? wadlg_colors[WADLG_WNDFG] : wadlg_colors[WADLG_ITEMFG]); -  
276       SetBkColor((HDC)wParam,lb.lbColor); -  
277       return (int)wadlg_lastbrush; -  
278     } -  
279   } -  
280   return 0; -  
-   328
-   329         switch(uMsg)
-   330         {
-   331                 case WM_CTLCOLORLISTBOX:
-   332                 case WM_CTLCOLORDLG:
-   333                 case WM_CTLCOLORBTN:
-   334                 case WM_CTLCOLORSTATIC:
-   335                 case WM_CTLCOLOREDIT:
-   336                 {
-   337                         int bgcolor=(uMsg == WM_CTLCOLOREDIT || uMsg == WM_CTLCOLORLISTBOX) ? wadlg_colors[WADLG_ITEMBG] : (uMsg == WM_CTLCOLORBTN ? wadlg_colors[WADLG_ITEMBG] : wadlg_colors[WADLG_WNDBG]);
-   338                         LOGBRUSH lb={BS_SOLID,GetNearestColor((HDC)wParam,bgcolor)};
-   339                         if (wadlg_lastbrush) DeleteObject(wadlg_lastbrush);
-   340                         wadlg_lastbrush=CreateBrushIndirect(&lb);
-   341                         SetTextColor((HDC)wParam,uMsg == WM_CTLCOLORSTATIC ? wadlg_colors[WADLG_WNDFG] : wadlg_colors[WADLG_ITEMFG]);
-   342                         SetBkColor((HDC)wParam,lb.lbColor);
-   343                         return (LRESULT)wadlg_lastbrush;
-   344                 }
-   345         }
-   346         return 0;
281 } 347 }
282 348
283 static int RectInRect(RECT *rect1, RECT *rect2) 349 static int RectInRect(RECT *rect1, RECT *rect2)
284 { 350 {
285   // this has a bias towards true 351   // this has a bias towards true
Line 297... Line 363...
297       ; 363       ;
298 } 364 }
299 365
300 static void WADlg_removeFromRgn(HRGN hrgn, int left, int top, int right, int bottom) 366 static void WADlg_removeFromRgn(HRGN hrgn, int left, int top, int right, int bottom)
301 { 367 {
302   HRGN rgn2=CreateRectRgn(left,top,right,bottom); -  
303   CombineRgn(hrgn,hrgn,rgn2,RGN_DIFF); -  
304   DeleteObject(rgn2); -  
-   368         HRGN rgn2=CreateRectRgn(left,top,right,bottom);
-   369         CombineRgn(hrgn,hrgn,rgn2,RGN_DIFF);
-   370         DeleteObject(rgn2);
305 } 371 }
306 372
307 void WADlg_DrawChildWindowBorders(HWND hwndDlg, int *tab, int tabsize) 373 void WADlg_DrawChildWindowBorders(HWND hwndDlg, int *tab, int tabsize)
308 { 374 {
309   PAINTSTRUCT ps; -  
310   BeginPaint(hwndDlg,&ps); -  
-   375         PAINTSTRUCT ps;
-   376         BeginPaint(hwndDlg,&ps);
-   377         HRGN hrgn = (ps.fErase) ? CreateRectRgnIndirect(&ps.rcPaint) : NULL;
-   378         HPEN pen = CreatePen(PS_SOLID, 0, wadlg_colors[WADLG_HILITE]);
-   379         HGDIOBJ o = SelectObject(ps.hdc, pen);
311 380
312   HRGN hrgn=NULL; -  
313   if(ps.fErase) -  
314   { -  
315     RECT r=ps.rcPaint; -  
316     hrgn=CreateRectRgn(r.left,r.top,r.right,r.bottom); -  
317   } -  
-   381         while (tabsize--)
-   382         {
-   383                 RECT r;
-   384                 int a = *tab++;
-   385                 GetWindowRect(GetDlgItem(hwndDlg, a & 0xffff),&r);
-   386                 MapWindowPoints(HWND_DESKTOP, hwndDlg, (LPPOINT)&r, 2);
-   387    
-   388                 if (RectInRect(&ps.rcPaint,&r))
-   389                 {
-   390                         if ((a & 0xffff0000) == DCW_SUNKENBORDER)
-   391                         {
-   392                                 MoveToEx(ps.hdc,r.left,r.bottom,NULL);
-   393                                 LineTo(ps.hdc,r.right,r.bottom);
-   394                                 LineTo(ps.hdc,r.right,r.top-1);
-   395                                 if(hrgn)
-   396                                 {
-   397                                         WADlg_removeFromRgn(hrgn,r.left,r.bottom,r.right,r.bottom+1);
-   398                                         WADlg_removeFromRgn(hrgn,r.right,r.top,r.right+1,r.bottom);
-   399                                 }
-   400                         }
-   401                         else if ((a & 0xffff0000) == DCW_DIVIDER)
-   402                         {
-   403                                 if (r.right - r.left < r.bottom - r.top) // vertical
-   404                                 {
-   405                                         int left=(r.left+r.right)/2;
-   406                                         MoveToEx(ps.hdc,left,r.top,NULL);
-   407                                         LineTo(ps.hdc,left,r.bottom+1);
-   408                                         if(hrgn) WADlg_removeFromRgn(hrgn,left,r.top,left+1,r.bottom);
-   409                                 }
-   410                                 else // horiz
-   411                                 {
-   412                                         int top=(r.top+r.bottom)/2;
-   413                                         MoveToEx(ps.hdc,r.left,top,NULL);
-   414                                         LineTo(ps.hdc,r.right+1,top);
-   415                                         if(hrgn) WADlg_removeFromRgn(hrgn,r.left,top,r.right,top+1);
-   416                                 }
-   417                         }
-   418                 }
-   419         }
318 420
319   HPEN pen=CreatePen(PS_SOLID,0,wadlg_colors[WADLG_HILITE]); -  
320   HGDIOBJ o=SelectObject(ps.hdc,pen); -  
-   421         SelectObject(ps.hdc, o);
-   422         DeleteObject(pen);
321 423
322   while (tabsize--) -  
323   { -  
324     RECT r; -  
325     int a=*tab++; -  
326     GetWindowRect(GetDlgItem(hwndDlg,a&0xffff),&r); -  
327     ScreenToClient(hwndDlg,(LPPOINT)&r); -  
328     ScreenToClient(hwndDlg,((LPPOINT)&r)+1); -  
329 -  
330     if (RectInRect(&ps.rcPaint,&r)) -  
331     { -  
332       if ((a & 0xffff0000) == DCW_SUNKENBORDER) -  
333       { -  
334         MoveToEx(ps.hdc,r.left,r.bottom,NULL); -  
335         LineTo(ps.hdc,r.right,r.bottom); -  
336         LineTo(ps.hdc,r.right,r.top-1); -  
337         if(hrgn) -  
338         { -  
339           WADlg_removeFromRgn(hrgn,r.left,r.bottom,r.right,r.bottom+1); -  
340           WADlg_removeFromRgn(hrgn,r.right,r.top,r.right+1,r.bottom); -  
341         } -  
342       } -  
343       else if ((a & 0xffff0000) == DCW_DIVIDER) -  
344       { -  
345         if (r.right - r.left < r.bottom - r.top) // vertical -  
346         { -  
347           int left=(r.left+r.right)/2; -  
348           MoveToEx(ps.hdc,left,r.top,NULL); -  
349           LineTo(ps.hdc,left,r.bottom+1); -  
350           if(hrgn) WADlg_removeFromRgn(hrgn,left,r.top,left+1,r.bottom); -  
351         } -  
352         else // horiz -  
353         { -  
354           int top=(r.top+r.bottom)/2; -  
355           MoveToEx(ps.hdc,r.left,top,NULL); -  
356           LineTo(ps.hdc,r.right+1,top); -  
357           if(hrgn) WADlg_removeFromRgn(hrgn,r.left,top,r.right,top+1); -  
358         } -  
359       } -  
360     } -  
361   } -  
362 -  
363   SelectObject(ps.hdc,o); -  
364   DeleteObject(pen); -  
365 -  
366   if(hrgn) { -  
367     //erase bkgnd while clipping out our own drawn stuff (for flickerless display) -  
368     HBRUSH b=CreateSolidBrush(wadlg_colors[WADLG_WNDBG]); -  
369     FillRgn(ps.hdc,hrgn,b); -  
370     DeleteObject(b); -  
371     DeleteObject(hrgn); -  
372   } -  
373   EndPaint(hwndDlg,&ps); -  
-   424         if(hrgn)
-   425         {
-   426                 //erase bkgnd while clipping out our own drawn stuff (for flickerless display)
-   427                 HBRUSH b = CreateSolidBrush(wadlg_colors[WADLG_WNDBG]);
-   428                 FillRgn(ps.hdc,hrgn,b);
-   429                 DeleteObject(b);
-   430             DeleteObject(hrgn);
-   431         }
-   432         EndPaint(hwndDlg,&ps);
374 } 433 }
375 #endif 434 #endif
376 435
377 #endif//_WA_DLG_H_ 436 #endif//_WA_DLG_H_