ReactOS 0.4.16-dev-336-gb667d82
draw.c File Reference
#include <win32k.h>
Include dependency graph for draw.c:

Go to the source code of this file.

Macros

#define RBInnerSoft   RBInnerNormal /* These are the same */
 
#define RBOuterSoft   RBOuterNormal
 

Functions

 DBG_DEFAULT_CHANNEL (UserDefwnd)
 
BOOL FASTCALL IntDrawDiagEdge (HDC hdc, LPRECT rc, UINT uType, UINT uFlags)
 
BOOL FASTCALL IntDrawRectEdge (HDC hdc, LPRECT rc, UINT uType, UINT uFlags)
 
int FASTCALL UITOOLS_MakeSquareRect (LPRECT src, LPRECT dst)
 
void FASTCALL UITOOLS_DrawCheckedRect (HDC dc, LPRECT rect)
 
BOOL FASTCALL UITOOLS95_DFC_ButtonPush (HDC dc, LPRECT r, UINT uFlags)
 
BOOL FASTCALL UITOOLS95_DFC_ButtonCheckRadio (HDC dc, LPRECT r, UINT uFlags, BOOL Radio)
 
BOOL FASTCALL UITOOLS95_DrawFrameButton (HDC hdc, LPRECT rc, UINT uState)
 
BOOL FASTCALL UITOOLS95_DrawFrameCaption (HDC dc, LPRECT r, UINT uFlags)
 
BOOL FASTCALL UITOOLS95_DrawFrameScroll (HDC dc, LPRECT r, UINT uFlags)
 
BOOL FASTCALL UITOOLS95_DrawFrameMenu (HDC dc, LPRECT r, UINT uFlags)
 
INT WINAPI FrameRect (HDC hDC, CONST RECT *lprc, HBRUSH hbr)
 
INT WINAPI FillRect (HDC hDC, CONST RECT *lprc, HBRUSH hbr)
 
BOOL WINAPI DrawEdge (HDC hDC, LPRECT rc, UINT edge, UINT flags)
 
BOOL WINAPI DrawFrameControl (HDC hDC, LPRECT rc, UINT uType, UINT uState)
 

Variables

static const signed char LTInnerNormal []
 
static const signed char LTOuterNormal []
 
static const signed char RBInnerNormal []
 
static const signed char RBOuterNormal []
 
static const signed char LTInnerSoft []
 
static const signed char LTOuterSoft []
 
static const signed char LTRBOuterMono []
 
static const signed char LTRBInnerMono []
 
static const signed char LTRBOuterFlat []
 
static const signed char LTRBInnerFlat []
 

Macro Definition Documentation

◆ RBInnerSoft

#define RBInnerSoft   RBInnerNormal /* These are the same */

Definition at line 63 of file draw.c.

◆ RBOuterSoft

#define RBOuterSoft   RBOuterNormal

Definition at line 64 of file draw.c.

Function Documentation

◆ DBG_DEFAULT_CHANNEL()

DBG_DEFAULT_CHANNEL ( UserDefwnd  )

◆ DrawEdge()

BOOL WINAPI DrawEdge ( HDC  hDC,
LPRECT  rc,
UINT  edge,
UINT  flags 
)

Definition at line 1085 of file draw.c.

1086{
1087 if (flags & BF_DIAGONAL)
1088 return IntDrawDiagEdge(hDC, rc, edge, flags);
1089 else
1090 return IntDrawRectEdge(hDC, rc, edge, flags);
1091}
static HDC hDC
Definition: 3dtext.c:33
GLbitfield flags
Definition: glext.h:7161
BOOL FASTCALL IntDrawDiagEdge(HDC hdc, LPRECT rc, UINT uType, UINT uFlags)
Definition: draw.c:96
BOOL FASTCALL IntDrawRectEdge(HDC hdc, LPRECT rc, UINT uType, UINT uFlags)
Definition: draw.c:410
#define BF_DIAGONAL
Definition: winuser.h:463

◆ DrawFrameControl()

BOOL WINAPI DrawFrameControl ( HDC  hDC,
LPRECT  rc,
UINT  uType,
UINT  uState 
)

Definition at line 1094 of file draw.c.

1095{
1096 if (GreGetMapMode(hDC) != MM_TEXT)
1097 return FALSE;
1098
1099 switch(uType)
1100 {
1101 case DFC_BUTTON:
1102 return UITOOLS95_DrawFrameButton(hDC, rc, uState);
1103 case DFC_CAPTION:
1104 return UITOOLS95_DrawFrameCaption(hDC, rc, uState);
1105 case DFC_MENU:
1106 {
1107 BOOL ret;
1108 COLORREF rgbOldText;
1109 INT iOldBackMode;
1110
1111 if (uState & (DFCS_MENUARROWUP | DFCS_MENUARROWDOWN))
1112 {
1113 if (!(uState & DFCS_TRANSPARENT))
1114 FillRect(hDC, rc, IntGetSysColorBrush(COLOR_MENU)); /* Fill by menu color */
1115 }
1116 else
1117 {
1118 FillRect(hDC, rc, (HBRUSH)NtGdiGetStockObject(WHITE_BRUSH)); /* Fill by white */
1119 }
1120
1121 rgbOldText = IntGdiSetTextColor(hDC, RGB(0, 0, 0)); /* Draw by black */
1122 iOldBackMode = IntGdiSetBkMode(hDC, TRANSPARENT);
1123 ret = UITOOLS95_DrawFrameMenu(hDC, rc, uState);
1124 IntGdiSetBkMode(hDC, iOldBackMode);
1125 IntGdiSetTextColor(hDC, rgbOldText);
1126 return ret;
1127 }
1128#if 0
1129 case DFC_POPUPMENU:
1131 break;
1132#endif
1133 case DFC_SCROLL:
1134 return UITOOLS95_DrawFrameScroll(hDC, rc, uState);
1135 }
1136 return FALSE;
1137}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
int FASTCALL GreGetMapMode(HDC)
Definition: dcutil.c:65
COLORREF FASTCALL IntGdiSetTextColor(HDC hDC, COLORREF color)
Definition: dcutil.c:172
INT FASTCALL IntGdiSetBkMode(HDC hDC, INT backgroundMode)
Definition: dcutil.c:124
#define FALSE
Definition: types.h:117
#define RGB(r, g, b)
Definition: precomp.h:71
unsigned int BOOL
Definition: ntddk_ex.h:94
HGDIOBJ FASTCALL IntGetSysColorBrush(INT Object)
Definition: stockobj.c:317
__kernel_entry W32KAPI HANDLE APIENTRY NtGdiGetStockObject(_In_ INT iObject)
int32_t INT
Definition: typedefs.h:58
#define DFCS_MENUARROWUP
Definition: undocuser.h:158
#define DFCS_MENUARROWDOWN
Definition: undocuser.h:159
int ret
BOOL FASTCALL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
Definition: draw.c:959
BOOL FASTCALL UITOOLS95_DrawFrameButton(HDC hdc, LPRECT rc, UINT uState)
Definition: draw.c:759
BOOL FASTCALL UITOOLS95_DrawFrameScroll(HDC dc, LPRECT r, UINT uFlags)
Definition: draw.c:856
BOOL FASTCALL UITOOLS95_DrawFrameCaption(HDC dc, LPRECT r, UINT uFlags)
Definition: draw.c:788
DWORD COLORREF
Definition: windef.h:300
#define TRANSPARENT
Definition: wingdi.h:950
#define WHITE_BRUSH
Definition: wingdi.h:902
#define MM_TEXT
Definition: wingdi.h:873
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
#define DFC_SCROLL
Definition: winuser.h:475
#define COLOR_MENU
Definition: winuser.h:920
#define DFC_MENU
Definition: winuser.h:474
#define DFC_BUTTON
Definition: winuser.h:476
#define DFC_CAPTION
Definition: winuser.h:473

◆ FillRect()

INT WINAPI FillRect ( HDC  hDC,
CONST RECT lprc,
HBRUSH  hbr 
)

Definition at line 1057 of file draw.c.

1058{
1059 BOOL Ret;
1060 HBRUSH prevhbr = NULL;
1061
1062 /* Select brush if specified */
1063 if (hbr)
1064 {
1065 /* Handle system colors */
1066 if (hbr <= (HBRUSH)(COLOR_MENUBAR + 1))
1067 hbr = IntGetSysColorBrush(PtrToUlong(hbr) - 1);
1068
1069 prevhbr = NtGdiSelectBrush(hDC, hbr);
1070 if (prevhbr == NULL)
1071 return (INT)FALSE;
1072 }
1073
1074 Ret = NtGdiPatBlt(hDC, lprc->left, lprc->top, lprc->right - lprc->left,
1075 lprc->bottom - lprc->top, PATCOPY);
1076
1077 /* Select old brush */
1078 if (prevhbr)
1079 NtGdiSelectBrush(hDC, prevhbr);
1080
1081 return (INT)Ret;
1082}
#define NULL
Definition: types.h:112
#define PtrToUlong(u)
Definition: config.h:107
__kernel_entry W32KAPI HBRUSH APIENTRY NtGdiSelectBrush(_In_ HDC hdc, _In_ HBRUSH hbrush)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiPatBlt(_In_ HDC hdcDest, _In_ INT x, _In_ INT y, _In_ INT cx, _In_ INT cy, _In_ DWORD dwRop)
Definition: bitblt.c:992
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define PATCOPY
Definition: wingdi.h:335
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4469

◆ FrameRect()

INT WINAPI FrameRect ( HDC  hDC,
CONST RECT lprc,
HBRUSH  hbr 
)

Definition at line 1038 of file draw.c.

1039{
1040 HBRUSH oldbrush;
1041 RECT r = *lprc;
1042
1043 if ((r.right <= r.left) || (r.bottom <= r.top)) return 0;
1044 if (!(oldbrush = NtGdiSelectBrush(hDC, hbr))) return 0;
1045
1046 NtGdiPatBlt(hDC, r.left, r.top, 1, r.bottom - r.top, PATCOPY);
1047 NtGdiPatBlt(hDC, r.right - 1, r.top, 1, r.bottom - r.top, PATCOPY);
1048 NtGdiPatBlt(hDC, r.left, r.top, r.right - r.left, 1, PATCOPY);
1049 NtGdiPatBlt(hDC, r.left, r.bottom - 1, r.right - r.left, 1, PATCOPY);
1050
1051 NtGdiSelectBrush(hDC, oldbrush);
1052 return TRUE;
1053}
#define TRUE
Definition: types.h:120
GLdouble GLdouble GLdouble r
Definition: gl.h:2055

◆ IntDrawDiagEdge()

BOOL FASTCALL IntDrawDiagEdge ( HDC  hdc,
LPRECT  rc,
UINT  uType,
UINT  uFlags 
)

Definition at line 96 of file draw.c.

97{
98 POINT Points[4];
99 signed char InnerI, OuterI;
100 HPEN InnerPen, OuterPen;
101 POINT SavePoint;
102 HPEN SavePen;
103 int spx, spy;
104 int epx, epy;
105 int Width = rc->right - rc->left;
106 int Height= rc->bottom - rc->top;
107 int SmallDiam = Width > Height ? Height : Width;
108 BOOL retval = !( ((uType & BDR_INNER) == BDR_INNER
109 || (uType & BDR_OUTER) == BDR_OUTER)
110 && !(uFlags & (BF_FLAT|BF_MONO)) );
111 int add = (LTRBInnerMono[uType & (BDR_INNER|BDR_OUTER)] != -1 ? 1 : 0)
112 + (LTRBOuterMono[uType & (BDR_INNER|BDR_OUTER)] != -1 ? 1 : 0);
113
114 /* Init some vars */
115 OuterPen = InnerPen = (HPEN)NtGdiGetStockObject(NULL_PEN);
116 SavePen = (HPEN)NtGdiSelectPen(hdc, InnerPen);
117 spx = spy = epx = epy = 0; /* Satisfy the compiler... */
118
119 /* Determine the colors of the edges */
120 if(uFlags & BF_MONO)
121 {
122 InnerI = LTRBInnerMono[uType & (BDR_INNER|BDR_OUTER)];
123 OuterI = LTRBOuterMono[uType & (BDR_INNER|BDR_OUTER)];
124 }
125 else if(uFlags & BF_FLAT)
126 {
127 InnerI = LTRBInnerFlat[uType & (BDR_INNER|BDR_OUTER)];
128 OuterI = LTRBOuterFlat[uType & (BDR_INNER|BDR_OUTER)];
129 }
130 else if(uFlags & BF_SOFT)
131 {
132 if(uFlags & BF_BOTTOM)
133 {
134 InnerI = RBInnerSoft[uType & (BDR_INNER|BDR_OUTER)];
135 OuterI = RBOuterSoft[uType & (BDR_INNER|BDR_OUTER)];
136 }
137 else
138 {
139 InnerI = LTInnerSoft[uType & (BDR_INNER|BDR_OUTER)];
140 OuterI = LTOuterSoft[uType & (BDR_INNER|BDR_OUTER)];
141 }
142 }
143 else
144 {
145 if(uFlags & BF_BOTTOM)
146 {
147 InnerI = RBInnerNormal[uType & (BDR_INNER|BDR_OUTER)];
148 OuterI = RBOuterNormal[uType & (BDR_INNER|BDR_OUTER)];
149 }
150 else
151 {
152 InnerI = LTInnerNormal[uType & (BDR_INNER|BDR_OUTER)];
153 OuterI = LTOuterNormal[uType & (BDR_INNER|BDR_OUTER)];
154 }
155 }
156
157 if(InnerI != -1)
158 InnerPen = NtGdiGetStockObject(DC_PEN);
159 if(OuterI != -1)
160 OuterPen = NtGdiGetStockObject(DC_PEN);
161
162 GreMoveTo(hdc, 0, 0, &SavePoint);
163
164 /* Don't ask me why, but this is what is visible... */
165 /* This must be possible to do much simpler, but I fail to */
166 /* see the logic in the MS implementation (sigh...). */
167 /* So, this might look a bit brute force here (and it is), but */
168 /* it gets the job done;) */
169
170 switch(uFlags & BF_RECT)
171 {
172 case 0:
173 case BF_LEFT:
174 case BF_BOTTOM:
175 case BF_BOTTOMLEFT:
176 /* Left bottom endpoint */
177 epx = rc->left-1;
178 spx = epx + SmallDiam;
179 epy = rc->bottom;
180 spy = epy - SmallDiam;
181 break;
182
183 case BF_TOPLEFT:
184 case BF_BOTTOMRIGHT:
185 /* Left top endpoint */
186 epx = rc->left-1;
187 spx = epx + SmallDiam;
188 epy = rc->top-1;
189 spy = epy + SmallDiam;
190 break;
191
192 case BF_TOP:
193 case BF_RIGHT:
194 case BF_TOPRIGHT:
195 case BF_RIGHT|BF_LEFT:
197 case BF_BOTTOM|BF_TOP:
201 case BF_RECT:
202 /* Right top endpoint */
203 spx = rc->left;
204 epx = spx + SmallDiam;
205 spy = rc->bottom-1;
206 epy = spy - SmallDiam;
207 break;
208 }
209
210 GreMoveTo(hdc, spx, spy, NULL);
211 NtGdiSelectPen(hdc, OuterPen);
213 NtGdiLineTo(hdc, epx, epy);
214
215 NtGdiSelectPen(hdc, InnerPen);
217
218 switch(uFlags & (BF_RECT|BF_DIAGONAL))
219 {
221 case (BF_DIAGONAL|BF_BOTTOM):
222 case BF_DIAGONAL:
223 case (BF_DIAGONAL|BF_LEFT):
224 GreMoveTo(hdc, spx-1, spy, NULL);
225 NtGdiLineTo(hdc, epx, epy-1);
226 Points[0].x = spx-add;
227 Points[0].y = spy;
228 Points[1].x = rc->left;
229 Points[1].y = rc->top;
230 Points[2].x = epx+1;
231 Points[2].y = epy-1-add;
232 Points[3] = Points[2];
233 break;
234
236 GreMoveTo(hdc, spx-1, spy, NULL);
237 NtGdiLineTo(hdc, epx, epy+1);
238 Points[0].x = spx-add;
239 Points[0].y = spy;
240 Points[1].x = rc->left;
241 Points[1].y = rc->bottom-1;
242 Points[2].x = epx+1;
243 Points[2].y = epy+1+add;
244 Points[3] = Points[2];
245 break;
246
251 GreMoveTo(hdc, spx+1, spy, NULL);
252 NtGdiLineTo(hdc, epx, epy+1);
253 Points[0].x = epx-1;
254 Points[0].y = epy+1+add;
255 Points[1].x = rc->right-1;
256 Points[1].y = rc->top+add;
257 Points[2].x = rc->right-1;
258 Points[2].y = rc->bottom-1;
259 Points[3].x = spx+add;
260 Points[3].y = spy;
261 break;
262
264 GreMoveTo(hdc, spx, spy-1, NULL);
265 NtGdiLineTo(hdc, epx+1, epy);
266 Points[0].x = epx+1+add;
267 Points[0].y = epy+1;
268 Points[1].x = rc->right-1;
269 Points[1].y = rc->top;
270 Points[2].x = rc->right-1;
271 Points[2].y = rc->bottom-1-add;
272 Points[3].x = spx;
273 Points[3].y = spy-add;
274 break;
275
276 case (BF_DIAGONAL|BF_TOP):
279 GreMoveTo(hdc, spx+1, spy-1, NULL);
280 NtGdiLineTo(hdc, epx, epy);
281 Points[0].x = epx-1;
282 Points[0].y = epy+1;
283 Points[1].x = rc->right-1;
284 Points[1].y = rc->top;
285 Points[2].x = rc->right-1;
286 Points[2].y = rc->bottom-1-add;
287 Points[3].x = spx+add;
288 Points[3].y = spy-add;
289 break;
290
291 case (BF_DIAGONAL|BF_RIGHT):
294 GreMoveTo(hdc, spx, spy, NULL);
295 NtGdiLineTo(hdc, epx-1, epy+1);
296 Points[0].x = spx;
297 Points[0].y = spy;
298 Points[1].x = rc->left;
299 Points[1].y = rc->top+add;
300 Points[2].x = epx-1-add;
301 Points[2].y = epy+1+add;
302 Points[3] = Points[2];
303 break;
304 }
305
306 /* Fill the interior if asked */
307 if((uFlags & BF_MIDDLE) && retval)
308 {
309 HBRUSH hbsave;
310 HPEN hpsave;
311 hbsave = (HBRUSH)NtGdiSelectBrush(hdc, NtGdiGetStockObject(DC_BRUSH));
312 hpsave = (HPEN)NtGdiSelectPen(hdc, NtGdiGetStockObject(DC_PEN));
315 IntPolygon(hdc, Points, 4);
316 NtGdiSelectBrush(hdc, hbsave);
317 NtGdiSelectPen(hdc, hpsave);
318 }
319
320 /* Adjust rectangle if asked */
321 if(uFlags & BF_ADJUST)
322 {
323 if(uFlags & BF_LEFT)
324 rc->left += add;
325 if(uFlags & BF_RIGHT)
326 rc->right -= add;
327 if(uFlags & BF_TOP)
328 rc->top += add;
329 if(uFlags & BF_BOTTOM)
330 rc->bottom -= add;
331 }
332
333 /* Cleanup */
334 NtGdiSelectPen(hdc, SavePen);
335 GreMoveTo(hdc, SavePoint.x, SavePoint.y, NULL);
336
337 return retval;
338}
COLORREF FASTCALL IntSetDCPenColor(HDC, COLORREF)
Definition: dcutil.c:259
COLORREF FASTCALL IntSetDCBrushColor(HDC, COLORREF)
Definition: dcutil.c:206
static const signed char LTOuterNormal[]
Definition: draw.c:23
static const signed char LTRBInnerMono[]
Definition: draw.c:51
static const signed char RBOuterNormal[]
Definition: draw.c:37
static const signed char LTRBOuterMono[]
Definition: draw.c:44
static const signed char LTInnerNormal[]
Definition: draw.c:16
static const signed char RBInnerNormal[]
Definition: draw.c:30
UINT uFlags
Definition: api.c:59
static const signed char LTOuterSoft[]
Definition: draw.c:878
static const signed char LTRBInnerFlat[]
Definition: draw.c:909
static const signed char LTRBOuterFlat[]
Definition: draw.c:902
#define RBInnerSoft
Definition: draw.c:885
#define RBOuterSoft
Definition: draw.c:886
static const signed char LTInnerSoft[]
Definition: draw.c:871
BOOL FASTCALL IntPolygon(HDC hdc, POINT *Point, int Count)
Definition: fillshap.c:199
BOOL FASTCALL GreMoveTo(HDC hdc, INT x, INT y, LPPOINT pptOut)
Definition: line.c:110
DWORD FASTCALL IntGetSysColor(INT nIndex)
Definition: stockobj.c:323
HDC hdc
Definition: main.c:9
__kernel_entry W32KAPI HPEN APIENTRY NtGdiSelectPen(_In_ HDC hdc, _In_ HPEN hpen)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiLineTo(_In_ HDC hdc, _In_ INT x, _In_ INT y)
long y
Definition: polytest.cpp:48
long x
Definition: polytest.cpp:48
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
#define NULL_PEN
Definition: wingdi.h:904
#define BDR_INNER
Definition: winuser.h:447
#define COLOR_WINDOW
Definition: winuser.h:921
#define BF_LEFT
Definition: winuser.h:454
#define BF_DIAGONAL_ENDTOPRIGHT
Definition: winuser.h:464
#define BF_ADJUST
Definition: winuser.h:470
#define BF_MIDDLE
Definition: winuser.h:468
#define BF_BOTTOM
Definition: winuser.h:457
#define BF_FLAT
Definition: winuser.h:471
#define BF_TOP
Definition: winuser.h:455
#define BF_BOTTOMRIGHT
Definition: winuser.h:461
#define BF_RIGHT
Definition: winuser.h:456
#define BF_DIAGONAL_ENDBOTTOMLEFT
Definition: winuser.h:466
#define BF_TOPRIGHT
Definition: winuser.h:459
#define BF_DIAGONAL_ENDBOTTOMRIGHT
Definition: winuser.h:467
#define BF_TOPLEFT
Definition: winuser.h:458
#define BDR_OUTER
Definition: winuser.h:446
#define BF_MONO
Definition: winuser.h:472
#define BF_BOTTOMLEFT
Definition: winuser.h:460
#define BF_SOFT
Definition: winuser.h:469
#define BF_RECT
Definition: winuser.h:462
#define BF_DIAGONAL_ENDTOPLEFT
Definition: winuser.h:465
#define COLOR_BTNFACE
Definition: winuser.h:931

Referenced by DrawEdge().

◆ IntDrawRectEdge()

BOOL FASTCALL IntDrawRectEdge ( HDC  hdc,
LPRECT  rc,
UINT  uType,
UINT  uFlags 
)

Definition at line 410 of file draw.c.

411{
412 signed char LTInnerI, LTOuterI;
413 signed char RBInnerI, RBOuterI;
414 HPEN LTInnerPen, LTOuterPen;
415 HPEN RBInnerPen, RBOuterPen;
416 RECT InnerRect = *rc;
417 POINT SavePoint;
418 HPEN SavePen;
419 int LBpenplus = 0;
420 int LTpenplus = 0;
421 int RTpenplus = 0;
422 int RBpenplus = 0;
423 BOOL retval = !( ((uType & BDR_INNER) == BDR_INNER
424 || (uType & BDR_OUTER) == BDR_OUTER)
425 && !(uFlags & (BF_FLAT|BF_MONO)) );
426 /* Init some vars */
427 LTInnerPen = LTOuterPen = RBInnerPen = RBOuterPen = (HPEN)NtGdiGetStockObject(NULL_PEN);
428 SavePen = (HPEN)NtGdiSelectPen(hdc, LTInnerPen);
429
430 /* Determine the colors of the edges */
431 if(uFlags & BF_MONO)
432 {
433 LTInnerI = RBInnerI = LTRBInnerMono[uType & (BDR_INNER|BDR_OUTER)];
434 LTOuterI = RBOuterI = LTRBOuterMono[uType & (BDR_INNER|BDR_OUTER)];
435 }
436 else if(uFlags & BF_FLAT)
437 {
438 LTInnerI = RBInnerI = LTRBInnerFlat[uType & (BDR_INNER|BDR_OUTER)];
439 LTOuterI = RBOuterI = LTRBOuterFlat[uType & (BDR_INNER|BDR_OUTER)];
440
441 /* Bertho Stultiens states above that this function exactly matches win95
442 * In win98 BF_FLAT rectangles have an inner border same color as the
443 * middle (COLOR_BTNFACE). I believe it's the same for win95 but since
444 * I don't know I go with Bertho and just sets it for win98 until proven
445 * otherwise.
446 * Dennis Björklund, 10 June, 99
447 */
448 if( LTInnerI != -1 )
449 LTInnerI = RBInnerI = COLOR_BTNFACE;
450 }
451 else if(uFlags & BF_SOFT)
452 {
453 LTInnerI = LTInnerSoft[uType & (BDR_INNER|BDR_OUTER)];
454 LTOuterI = LTOuterSoft[uType & (BDR_INNER|BDR_OUTER)];
455 RBInnerI = RBInnerSoft[uType & (BDR_INNER|BDR_OUTER)];
456 RBOuterI = RBOuterSoft[uType & (BDR_INNER|BDR_OUTER)];
457 }
458 else
459 {
460 LTInnerI = LTInnerNormal[uType & (BDR_INNER|BDR_OUTER)];
461 LTOuterI = LTOuterNormal[uType & (BDR_INNER|BDR_OUTER)];
462 RBInnerI = RBInnerNormal[uType & (BDR_INNER|BDR_OUTER)];
463 RBOuterI = RBOuterNormal[uType & (BDR_INNER|BDR_OUTER)];
464 }
465
467 LBpenplus = 1;
469 RTpenplus = 1;
471 RBpenplus = 1;
472 if((uFlags & BF_TOPLEFT) == BF_TOPLEFT)
473 LTpenplus = 1;
474
475 if(LTInnerI != -1)
476 LTInnerPen = NtGdiGetStockObject(DC_PEN);
477 if(LTOuterI != -1)
478 LTOuterPen = NtGdiGetStockObject(DC_PEN);
479 if(RBInnerI != -1)
480 RBInnerPen = NtGdiGetStockObject(DC_PEN);
481 if(RBOuterI != -1)
482 RBOuterPen = NtGdiGetStockObject(DC_PEN);
483 if((uFlags & BF_MIDDLE) && retval)
484 {
487 }
488 GreMoveTo(hdc, 0, 0, &SavePoint);
489
490 /* Draw the outer edge */
491 NtGdiSelectPen(hdc, LTOuterPen);
493 if(uFlags & BF_TOP)
494 {
495 GreMoveTo(hdc, InnerRect.left, InnerRect.top, NULL);
496 NtGdiLineTo(hdc, InnerRect.right, InnerRect.top);
497 }
498 if(uFlags & BF_LEFT)
499 {
500 GreMoveTo(hdc, InnerRect.left, InnerRect.top, NULL);
501 NtGdiLineTo(hdc, InnerRect.left, InnerRect.bottom);
502 }
503 NtGdiSelectPen(hdc, RBOuterPen);
505 if(uFlags & BF_BOTTOM)
506 {
507 GreMoveTo(hdc, InnerRect.left, InnerRect.bottom-1, NULL);
508 NtGdiLineTo(hdc, InnerRect.right, InnerRect.bottom-1);
509 }
510 if(uFlags & BF_RIGHT)
511 {
512 GreMoveTo(hdc, InnerRect.right-1, InnerRect.top, NULL);
513 NtGdiLineTo(hdc, InnerRect.right-1, InnerRect.bottom);
514 }
515
516 /* Draw the inner edge */
517 NtGdiSelectPen(hdc, LTInnerPen);
519 if(uFlags & BF_TOP)
520 {
521 GreMoveTo(hdc, InnerRect.left+LTpenplus, InnerRect.top+1, NULL);
522 NtGdiLineTo(hdc, InnerRect.right-RTpenplus, InnerRect.top+1);
523 }
524 if(uFlags & BF_LEFT)
525 {
526 GreMoveTo(hdc, InnerRect.left+1, InnerRect.top+LTpenplus, NULL);
527 NtGdiLineTo(hdc, InnerRect.left+1, InnerRect.bottom-LBpenplus);
528 }
529 NtGdiSelectPen(hdc, RBInnerPen);
531 if(uFlags & BF_BOTTOM)
532 {
533 GreMoveTo(hdc, InnerRect.left+LBpenplus, InnerRect.bottom-2, NULL);
534 NtGdiLineTo(hdc, InnerRect.right-RBpenplus, InnerRect.bottom-2);
535 }
536 if(uFlags & BF_RIGHT)
537 {
538 GreMoveTo(hdc, InnerRect.right-2, InnerRect.top+RTpenplus, NULL);
539 NtGdiLineTo(hdc, InnerRect.right-2, InnerRect.bottom-RBpenplus);
540 }
541
542 if( ((uFlags & BF_MIDDLE) && retval) || (uFlags & BF_ADJUST) )
543 {
544 int add = (LTRBInnerMono[uType & (BDR_INNER|BDR_OUTER)] != -1 ? 1 : 0)
545 + (LTRBOuterMono[uType & (BDR_INNER|BDR_OUTER)] != -1 ? 1 : 0);
546
547 if(uFlags & BF_LEFT)
548 InnerRect.left += add;
549 if(uFlags & BF_RIGHT)
550 InnerRect.right -= add;
551 if(uFlags & BF_TOP)
552 InnerRect.top += add;
553 if(uFlags & BF_BOTTOM)
554 InnerRect.bottom -= add;
555
556 if(uFlags & BF_ADJUST)
557 *rc = InnerRect;
558 }
559
560 /* Cleanup */
561 NtGdiSelectPen(hdc, SavePen);
562 GreMoveTo(hdc, SavePoint.x, SavePoint.y, NULL);
563 return retval;
564}

Referenced by DrawEdge(), UITOOLS95_DFC_ButtonPush(), UITOOLS95_DrawFrameCaption(), and UITOOLS95_DrawFrameScroll().

◆ UITOOLS95_DFC_ButtonCheckRadio()

BOOL FASTCALL UITOOLS95_DFC_ButtonCheckRadio ( HDC  dc,
LPRECT  r,
UINT  uFlags,
BOOL  Radio 
)

Definition at line 664 of file draw.c.

665{
666 LOGFONTW lf;
667 HFONT hFont, hOldFont;
668 int i;
669 WCHAR OutRight, OutLeft, InRight, InLeft, Center;
670 RECT myr;
671 INT cxy, nBkMode;
672
673 cxy = UITOOLS_MakeSquareRect(r, &myr);
674 if (Radio)
675 {
676 OutRight = 'j'; // Outer right
677 OutLeft = 'k'; // Outer left
678 InRight = 'l'; // inner left
679 InLeft = 'm'; // inner right
680 Center = 'n'; // center
681 } else
682 {
683 OutRight = 'c'; // Outer right
684 OutLeft = 'd'; // Outer left
685 InRight = 'e'; // inner left
686 InLeft = 'f'; // inner right
687 Center = 'g'; // center
688 }
689
690 RtlZeroMemory(&lf, sizeof(LOGFONTW));
691 lf.lfHeight = cxy;
692 lf.lfWidth = 0;
693 lf.lfWeight = FW_NORMAL;
695 RtlCopyMemory(lf.lfFaceName, L"Marlett", sizeof(L"Marlett"));
697 hOldFont = NtGdiSelectFont(dc, hFont);
698
699 nBkMode = GreGetBkMode(dc);
700
701 if(Radio && ((uFlags & 0xff) == DFCS_BUTTONRADIOMASK))
702 {
705 GreTextOutW(dc, myr.left, myr.top, &Center, 1);
708 GreTextOutW(dc, myr.left, myr.top, &OutRight, 1);
710 GreTextOutW(dc, myr.left, myr.top, &OutLeft, 1);
711 }
712 else
713 {
715
716 /* Center section, white for active, grey for inactive */
719 GreTextOutW(dc, myr.left, myr.top, &Center, 1);
720
721 if(uFlags & (DFCS_FLAT | DFCS_MONO))
722 {
724 GreTextOutW(dc, myr.left, myr.top, &OutRight, 1);
725 GreTextOutW(dc, myr.left, myr.top, &OutLeft, 1);
726 GreTextOutW(dc, myr.left, myr.top, &InRight, 1);
727 GreTextOutW(dc, myr.left, myr.top, &InLeft, 1);
728 }
729 else
730 {
732 GreTextOutW(dc, myr.left, myr.top, &OutRight, 1);
734 GreTextOutW(dc, myr.left, myr.top, &OutLeft, 1);
736 GreTextOutW(dc, myr.left, myr.top, &InRight, 1);
738 GreTextOutW(dc, myr.left, myr.top, &InLeft, 1);
739 }
740 }
741
742 if(uFlags & DFCS_CHECKED)
743 {
744 WCHAR Check = (Radio) ? 'i' : 'b';
745
747 GreTextOutW(dc, myr.left, myr.top, &Check, 1);
748 }
749
751 NtGdiSelectFont(dc, hOldFont);
753 IntGdiSetBkMode(dc, nBkMode);
754
755 return TRUE;
756}
HFONT hFont
Definition: main.c:53
int FASTCALL GreGetBkMode(HDC)
Definition: dcutil.c:35
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static const WCHAR dc[]
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
int Check()
Definition: movefile.cpp:196
__kernel_entry W32KAPI HFONT APIENTRY NtGdiSelectFont(_In_ HDC hdc, _In_ HFONT hf)
Definition: dcobjs.c:597
#define L(x)
Definition: ntvdm.h:50
LONG lfHeight
Definition: dimm.idl:59
LONG lfWeight
Definition: dimm.idl:63
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LONG lfWidth
Definition: dimm.idl:60
BYTE lfCharSet
Definition: dimm.idl:67
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
HFONT FASTCALL GreCreateFontIndirectW(LOGFONTW *lplf)
Definition: font.c:23
BOOL NTAPI GreDeleteObject(HGDIOBJ hobj)
Definition: gdiobj.c:1158
BOOL FASTCALL GreTextOutW(HDC hdc, int nXStart, int nYStart, LPCWSTR lpString, int cchString)
Definition: text.c:61
int FASTCALL UITOOLS_MakeSquareRect(LPRECT src, LPRECT dst)
Definition: draw.c:566
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define OPAQUE
Definition: wingdi.h:949
#define FW_NORMAL
Definition: wingdi.h:373
#define COLOR_WINDOWFRAME
Definition: winuser.h:922
#define COLOR_WINDOWTEXT
Definition: winuser.h:924
#define DFCS_FLAT
Definition: winuser.h:510
#define DFCS_INACTIVE
Definition: winuser.h:502
#define COLOR_3DDKSHADOW
Definition: winuser.h:942
#define DFCS_MONO
Definition: winuser.h:511
#define DFCS_BUTTONRADIOMASK
Definition: winuser.h:498
#define COLOR_BTNSHADOW
Definition: winuser.h:933
#define DFCS_CHECKED
Definition: winuser.h:504
#define COLOR_BTNHIGHLIGHT
Definition: winuser.h:938
#define DFCS_PUSHED
Definition: winuser.h:503
#define COLOR_3DLIGHT
Definition: winuser.h:943
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by UITOOLS95_DrawFrameButton().

◆ UITOOLS95_DFC_ButtonPush()

BOOL FASTCALL UITOOLS95_DFC_ButtonPush ( HDC  dc,
LPRECT  r,
UINT  uFlags 
)

Definition at line 620 of file draw.c.

621{
622 UINT edge;
623 RECT myr = *r;
624
626 edge = EDGE_SUNKEN;
627 else
628 edge = EDGE_RAISED;
629
630 if(uFlags & DFCS_CHECKED)
631 {
632 if(uFlags & DFCS_MONO)
634 else
636
638 }
639 else
640 {
641 if(uFlags & DFCS_MONO)
642 {
645 }
646 else
647 {
649 }
650 }
651
652 /* Adjust rectangle if asked */
654 {
655 r->left += 2;
656 r->right -= 2;
657 r->top += 2;
658 r->bottom -= 2;
659 }
660
661 return TRUE;
662}
unsigned int UINT
Definition: ndis.h:50
void FASTCALL UITOOLS_DrawCheckedRect(HDC dc, LPRECT rect)
Definition: draw.c:590
#define EDGE_SUNKEN
Definition: winuser.h:451
#define DFCS_ADJUSTRECT
Definition: winuser.h:509
#define EDGE_RAISED
Definition: winuser.h:450

Referenced by UITOOLS95_DrawFrameButton().

◆ UITOOLS95_DrawFrameButton()

BOOL FASTCALL UITOOLS95_DrawFrameButton ( HDC  hdc,
LPRECT  rc,
UINT  uState 
)

Definition at line 759 of file draw.c.

760{
761 switch(uState & 0x1f)
762 {
763 case DFCS_BUTTONPUSH:
764 return UITOOLS95_DFC_ButtonPush(hdc, rc, uState);
765
766 case DFCS_BUTTONCHECK:
768 return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, FALSE);
769
772 if (uState & DFCS_BUTTONRADIOIMAGE)
773 FillRect(hdc, rc, (HBRUSH)NtGdiGetStockObject(BLACK_BRUSH)); /* Fill by black */
774 else
775 FillRect(hdc, rc, (HBRUSH)NtGdiGetStockObject(WHITE_BRUSH)); /* Fill by white */
776
777 return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
778
779 case DFCS_BUTTONRADIO:
780 return UITOOLS95_DFC_ButtonCheckRadio(hdc, rc, uState, TRUE);
781
782 default:
783 ERR("Invalid button state=0x%04x\n", uState);
784 }
785 return FALSE;
786}
#define ERR(fmt,...)
Definition: precomp.h:57
BOOL FASTCALL UITOOLS95_DFC_ButtonPush(HDC dc, LPRECT r, UINT uFlags)
Definition: draw.c:620
BOOL FASTCALL UITOOLS95_DFC_ButtonCheckRadio(HDC dc, LPRECT r, UINT uFlags, BOOL Radio)
Definition: draw.c:664
#define BLACK_BRUSH
Definition: wingdi.h:896
#define DFCS_BUTTONPUSH
Definition: winuser.h:501
#define DFCS_BUTTONCHECK
Definition: winuser.h:496
#define DFCS_BUTTON3STATE
Definition: winuser.h:500
#define DFCS_BUTTONRADIO
Definition: winuser.h:499
#define DFCS_BUTTONRADIOIMAGE
Definition: winuser.h:497

Referenced by DrawFrameControl(), and RealDrawFrameControl().

◆ UITOOLS95_DrawFrameCaption()

BOOL FASTCALL UITOOLS95_DrawFrameCaption ( HDC  dc,
LPRECT  r,
UINT  uFlags 
)

Definition at line 788 of file draw.c.

789{
790 LOGFONTW lf;
791 HFONT hFont, hOldFont;
792 COLORREF clrsave;
793 RECT myr;
794 INT bkmode;
796 switch(uFlags & 0xf)
797 {
799 Symbol = 'r';
800 break;
801 case DFCS_CAPTIONHELP:
802 Symbol = 's';
803 break;
804 case DFCS_CAPTIONMIN:
805 Symbol = '0';
806 break;
807 case DFCS_CAPTIONMAX:
808 Symbol = '1';
809 break;
811 Symbol = '2';
812 break;
813 default:
814 ERR("Invalid caption; flags=0x%04x\n", uFlags);
815 return FALSE;
816 }
818 RtlZeroMemory(&lf, sizeof(LOGFONTW));
820 myr.left += 1;
821 myr.top += 1;
822 myr.right -= 1;
823 myr.bottom -= 1;
824 if(uFlags & DFCS_PUSHED)
825 RECTL_vOffsetRect(&myr,1,1);
826 lf.lfHeight = myr.bottom - myr.top;
827 lf.lfWidth = 0;
828 lf.lfWeight = FW_NORMAL;
831 RtlCopyMemory(lf.lfFaceName, L"Marlett", sizeof(L"Marlett"));
833 /* save font and text color */
834 hOldFont = NtGdiSelectFont(dc, hFont);
835 clrsave = GreGetTextColor(dc);
836 bkmode = GreGetBkMode(dc);
837 /* set color and drawing mode */
840 {
841 /* draw shadow */
843 GreTextOutW(dc, myr.left + 1, myr.top + 1, &Symbol, 1);
844 }
846 /* draw selected symbol */
847 GreTextOutW(dc, myr.left, myr.top, &Symbol, 1);
848 /* restore previous settings */
849 IntGdiSetTextColor(dc, clrsave);
850 NtGdiSelectFont(dc, hOldFont);
851 IntGdiSetBkMode(dc, bkmode);
853 return TRUE;
854}
Definition: Symbol.h:9
COLORREF FASTCALL GreGetTextColor(HDC)
Definition: dcutil.c:80
BYTE lfQuality
Definition: dimm.idl:70
FORCEINLINE VOID RECTL_vOffsetRect(_Inout_ RECTL *prcl, _In_ INT cx, _In_ INT cy)
Definition: rect.h:31
#define NONANTIALIASED_QUALITY
Definition: wingdi.h:439
#define COLOR_BTNTEXT
Definition: winuser.h:936
#define DFCS_CAPTIONMIN
Definition: winuser.h:481
#define DFCS_CAPTIONCLOSE
Definition: winuser.h:480
#define DFCS_CAPTIONRESTORE
Definition: winuser.h:483
#define DFCS_CAPTIONMAX
Definition: winuser.h:482
#define DFCS_CAPTIONHELP
Definition: winuser.h:484

Referenced by DrawFrameControl(), and RealDrawFrameControl().

◆ UITOOLS95_DrawFrameMenu()

BOOL FASTCALL UITOOLS95_DrawFrameMenu ( HDC  dc,
LPRECT  r,
UINT  uFlags 
)

Definition at line 959 of file draw.c.

960{
961 LOGFONTW lf;
962 HFONT hFont, hOldFont;
964 RECT myr;
965 INT cxy;
966 cxy = UITOOLS_MakeSquareRect(r, &myr);
967 switch(uFlags & 0x1f)
968 {
969 case DFCS_MENUARROWUP:
970 Symbol = '5';
971 break;
972
974 Symbol = '6';
975 break;
976
977 case DFCS_MENUARROW:
978 Symbol = '8';
979 break;
980
982 Symbol = 'w'; // FIXME: needs to confirm
983 break;
984
985 case DFCS_MENUBULLET:
986 Symbol = 'h';
987 break;
988
989 case DFCS_MENUCHECK:
991 Symbol = 'a';
992 break;
993
994 default:
995 ERR("Invalid menu; flags=0x%04x\n", uFlags);
996 return FALSE;
997 }
998 /* acquire ressources only if valid menu */
999 RtlZeroMemory(&lf, sizeof(LOGFONTW));
1000 lf.lfHeight = cxy;
1001 lf.lfWidth = 0;
1002 lf.lfWeight = FW_NORMAL;
1004 RtlCopyMemory(lf.lfFaceName, L"Marlett", sizeof(L"Marlett"));
1006 /* save font */
1007 hOldFont = NtGdiSelectFont(dc, hFont);
1008
1009 if ((uFlags & 0x1f) == DFCS_MENUARROWUP ||
1010 (uFlags & 0x1f) == DFCS_MENUARROWDOWN )
1011 {
1012#if 0
1013 if (uFlags & DFCS_INACTIVE)
1014 {
1015 /* draw shadow */
1017 GreTextOutW(dc, myr.left + 1, myr.top + 1, &Symbol, 1);
1018 }
1019#endif
1021 }
1022 /* draw selected symbol */
1023 GreTextOutW(dc, myr.left, myr.top, &Symbol, 1);
1024 /* restore previous settings */
1025 NtGdiSelectFont(dc, hOldFont);
1027 return TRUE;
1028}
#define DFCS_MENUCHECK
Definition: winuser.h:486
#define DFCS_MENUARROW
Definition: winuser.h:485
#define DFCS_MENUARROWRIGHT
Definition: winuser.h:488
#define DFCS_MENUBULLET
Definition: winuser.h:487

Referenced by DrawFrameControl(), MENU_DrawMenuItem(), MENU_DrawScrollArrows(), and RealDrawFrameControl().

◆ UITOOLS95_DrawFrameScroll()

BOOL FASTCALL UITOOLS95_DrawFrameScroll ( HDC  dc,
LPRECT  r,
UINT  uFlags 
)

Definition at line 856 of file draw.c.

857{
858 LOGFONTW lf;
859 HFONT hFont, hOldFont;
860 COLORREF clrsave;
861 RECT myr;
862 INT bkmode;
864 switch(uFlags & 0x1f)
865 {
867 case DFCS_SCROLLDOWN:
868 Symbol = '6';
869 break;
870
871 case DFCS_SCROLLUP:
872 Symbol = '5';
873 break;
874
875 case DFCS_SCROLLLEFT:
876 Symbol = '3';
877 break;
878
879 case DFCS_SCROLLRIGHT:
880 Symbol = '4';
881 break;
882
885 RtlZeroMemory(&lf, sizeof(LOGFONTW));
887 lf.lfHeight = myr.bottom - myr.top;
888 lf.lfWidth = 0;
889 lf.lfWeight = FW_NORMAL;
891 RtlCopyMemory(lf.lfFaceName, L"Marlett", sizeof(L"Marlett"));
893 /* save font and text color */
894 hOldFont = NtGdiSelectFont(dc, hFont);
895 clrsave = GreGetTextColor(dc);
896 bkmode = GreGetBkMode(dc);
897 /* set color and drawing mode */
899 if (!(uFlags & (DFCS_MONO | DFCS_FLAT)))
900 {
902 /* draw selected symbol */
903 Symbol = ((uFlags & 0xff) == DFCS_SCROLLSIZEGRIP) ? 'o' : 'x';
904 GreTextOutW(dc, myr.left, myr.top, &Symbol, 1);
906 } else
908 /* draw selected symbol */
909 Symbol = ((uFlags & 0xff) == DFCS_SCROLLSIZEGRIP) ? 'p' : 'y';
910 GreTextOutW(dc, myr.left, myr.top, &Symbol, 1);
911 /* restore previous settings */
912 IntGdiSetTextColor(dc, clrsave);
913 NtGdiSelectFont(dc, hOldFont);
914 IntGdiSetBkMode(dc, bkmode);
916 return TRUE;
917 default:
918 ERR("Invalid scroll; flags=0x%04x\n", uFlags);
919 return FALSE;
920 }
922 RtlZeroMemory(&lf, sizeof(LOGFONTW));
924 myr.left += 1;
925 myr.top += 1;
926 myr.right -= 1;
927 myr.bottom -= 1;
928 if(uFlags & DFCS_PUSHED)
929 RECTL_vOffsetRect(&myr,1,1);
930 lf.lfHeight = myr.bottom - myr.top;
931 lf.lfWidth = 0;
932 lf.lfWeight = FW_NORMAL;
934 RtlCopyMemory(lf.lfFaceName, L"Marlett", sizeof(L"Marlett"));
936 /* save font and text color */
937 hOldFont = NtGdiSelectFont(dc, hFont);
938 clrsave = GreGetTextColor(dc);
939 bkmode = GreGetBkMode(dc);
940 /* set color and drawing mode */
943 {
944 /* draw shadow */
946 GreTextOutW(dc, myr.left + 1, myr.top + 1, &Symbol, 1);
947 }
949 /* draw selected symbol */
950 GreTextOutW(dc, myr.left, myr.top, &Symbol, 1);
951 /* restore previous settings */
952 IntGdiSetTextColor(dc, clrsave);
953 NtGdiSelectFont(dc, hOldFont);
954 IntGdiSetBkMode(dc, bkmode);
956 return TRUE;
957}
#define DFCS_SCROLLSIZEGRIPRIGHT
Definition: winuser.h:495
#define DFCS_SCROLLSIZEGRIP
Definition: winuser.h:494
#define DFCS_SCROLLUP
Definition: winuser.h:489
#define DFCS_SCROLLCOMBOBOX
Definition: winuser.h:493
#define DFCS_SCROLLLEFT
Definition: winuser.h:491
#define DFCS_SCROLLRIGHT
Definition: winuser.h:492
#define DFCS_SCROLLDOWN
Definition: winuser.h:490

Referenced by DrawFrameControl(), and RealDrawFrameControl().

◆ UITOOLS_DrawCheckedRect()

void FASTCALL UITOOLS_DrawCheckedRect ( HDC  dc,
LPRECT  rect 
)

Definition at line 590 of file draw.c.

591{
592 if(IntGetSysColor(COLOR_BTNHIGHLIGHT) == RGB(255, 255, 255))
593 {
594 HBRUSH hbsave;
595 COLORREF bg;
596
598 bg = IntGdiSetBkColor(dc, RGB(255, 255, 255));
599 hbsave = NtGdiSelectBrush(dc, gpsi->hbrGray);
600 NtGdiPatBlt(dc, rect->left, rect->top, rect->right-rect->left, rect->bottom-rect->top, 0x00FA0089);
601 NtGdiSelectBrush(dc, hbsave);
602 IntGdiSetBkColor(dc, bg);
603 }
604 else
605 {
607 }
608}
COLORREF FASTCALL IntGdiSetBkColor(_In_ HDC hDC, _In_ COLORREF Color)
PSERVERINFO gpsi
Definition: imm.c:18
& rect
Definition: startmenu.cpp:1413

Referenced by UITOOLS95_DFC_ButtonPush().

◆ UITOOLS_MakeSquareRect()

int FASTCALL UITOOLS_MakeSquareRect ( LPRECT  src,
LPRECT  dst 
)

Definition at line 566 of file draw.c.

567{
568 int Width = src->right - src->left;
569 int Height = src->bottom - src->top;
570 int SmallDiam = Width > Height ? Height : Width;
571
572 *dst = *src;
573
574 /* Make it a square box */
575 if(Width < Height) /* SmallDiam == Width */
576 {
577 dst->top += (Height-Width)/2;
578 dst->bottom = dst->top + SmallDiam;
579 }
580 else if(Width > Height) /* SmallDiam == Height */
581 {
582 dst->left += (Width-Height)/2;
583 dst->right = dst->left + SmallDiam;
584 }
585
586 return SmallDiam;
587}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340

Referenced by UITOOLS95_DFC_ButtonCheckRadio(), UITOOLS95_DrawFrameCaption(), UITOOLS95_DrawFrameMenu(), and UITOOLS95_DrawFrameScroll().

Variable Documentation

◆ LTInnerNormal

const signed char LTInnerNormal[]
static
Initial value:
= {
-1, -1, -1, -1,
-1, -1, -1, -1
}

Definition at line 21 of file draw.c.

◆ LTInnerSoft

const signed char LTInnerSoft[]
static
Initial value:
= {
-1, -1, -1, -1,
-1, -1, -1, -1
}

Definition at line 49 of file draw.c.

◆ LTOuterNormal

const signed char LTOuterNormal[]
static

◆ LTOuterSoft

◆ LTRBInnerFlat

const signed char LTRBInnerFlat[]
static
Initial value:

Definition at line 87 of file draw.c.

◆ LTRBInnerMono

const signed char LTRBInnerMono[]
static
Initial value:

Definition at line 73 of file draw.c.

◆ LTRBOuterFlat

◆ LTRBOuterMono

◆ RBInnerNormal

const signed char RBInnerNormal[]
static
Initial value:
= {
-1, -1, -1, -1,
-1, -1, -1, -1
}

Definition at line 35 of file draw.c.

◆ RBOuterNormal