52 { |
52 { |
53 int mi, ma, pos; |
53 int mi, ma, pos; |
54 Scrollbar *sb; |
54 Scrollbar *sb; |
55 |
55 |
56 switch (wi->type) { |
56 switch (wi->type) { |
57 case WWT_SCROLLBAR: { |
57 case WWT_SCROLLBAR: |
58 /* vertical scroller */ |
58 /* vertical scroller */ |
59 w->flags4 &= ~WF_HSCROLL; |
59 w->flags4 &= ~WF_HSCROLL; |
60 w->flags4 &= ~WF_SCROLL2; |
60 w->flags4 &= ~WF_SCROLL2; |
61 mi = wi->top; |
61 mi = wi->top; |
62 ma = wi->bottom; |
62 ma = wi->bottom; |
63 pos = y; |
63 pos = y; |
64 sb = &w->vscroll; |
64 sb = &w->vscroll; |
65 break; |
65 break; |
66 } |
66 |
67 case WWT_SCROLL2BAR: { |
67 case WWT_SCROLL2BAR: |
68 /* 2nd vertical scroller */ |
68 /* 2nd vertical scroller */ |
69 w->flags4 &= ~WF_HSCROLL; |
69 w->flags4 &= ~WF_HSCROLL; |
70 w->flags4 |= WF_SCROLL2; |
70 w->flags4 |= WF_SCROLL2; |
71 mi = wi->top; |
71 mi = wi->top; |
72 ma = wi->bottom; |
72 ma = wi->bottom; |
73 pos = y; |
73 pos = y; |
74 sb = &w->vscroll2; |
74 sb = &w->vscroll2; |
75 break; |
75 break; |
76 } |
76 |
77 case WWT_HSCROLLBAR: { |
77 case WWT_HSCROLLBAR: |
78 /* horizontal scroller */ |
78 /* horizontal scroller */ |
79 w->flags4 &= ~WF_SCROLL2; |
79 w->flags4 &= ~WF_SCROLL2; |
80 w->flags4 |= WF_HSCROLL; |
80 w->flags4 |= WF_HSCROLL; |
81 mi = wi->left; |
81 mi = wi->left; |
82 ma = wi->right; |
82 ma = wi->right; |
83 pos = x; |
83 pos = x; |
84 sb = &w->hscroll; |
84 sb = &w->hscroll; |
85 break; |
85 break; |
86 } |
86 |
87 default: return; //this should never happen |
87 default: NOT_REACHED(); |
88 } |
88 } |
89 if (pos <= mi+9) { |
89 if (pos <= mi+9) { |
90 /* Pressing the upper button? */ |
90 /* Pressing the upper button? */ |
91 w->flags4 |= WF_SCROLL_UP; |
91 w->flags4 |= WF_SCROLL_UP; |
92 if (_scroller_click_timeout == 0) { |
92 if (_scroller_click_timeout == 0) { |
93 _scroller_click_timeout = 6; |
93 _scroller_click_timeout = 6; |
94 if (sb->pos != 0) sb->pos--; |
94 if (sb->pos != 0) sb->pos--; |
95 } |
95 } |
96 _left_button_clicked = false; |
96 _left_button_clicked = false; |
97 } else if (pos >= ma-10) { |
97 } else if (pos >= ma - 10) { |
98 /* Pressing the lower button? */ |
98 /* Pressing the lower button? */ |
99 w->flags4 |= WF_SCROLL_DOWN; |
99 w->flags4 |= WF_SCROLL_DOWN; |
100 |
100 |
101 if (_scroller_click_timeout == 0) { |
101 if (_scroller_click_timeout == 0) { |
102 _scroller_click_timeout = 6; |
102 _scroller_click_timeout = 6; |
214 if ((wi->type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++; |
214 if ((wi->type & WWT_MASK) == WWT_IMGBTN_2 && clicked) img++; |
215 DrawSprite(img, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked); |
215 DrawSprite(img, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked); |
216 break; |
216 break; |
217 } |
217 } |
218 |
218 |
219 case WWT_PANEL: { |
219 case WWT_PANEL: |
220 assert(wi->data == 0); |
220 assert(wi->data == 0); |
221 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
221 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
222 break; |
222 break; |
223 } |
|
224 |
223 |
225 case WWT_TEXTBTN: |
224 case WWT_TEXTBTN: |
226 case WWT_TEXTBTN_2: { |
225 case WWT_TEXTBTN_2: |
227 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
226 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
228 } |
227 /* FALL THROUGH */ |
229 /* fall through */ |
|
230 |
228 |
231 case WWT_LABEL: { |
229 case WWT_LABEL: { |
232 StringID str = wi->data; |
230 StringID str = wi->data; |
233 |
231 |
234 if ((wi->type & WWT_MASK) == WWT_TEXTBTN_2 && clicked) str++; |
232 if ((wi->type & WWT_MASK) == WWT_TEXTBTN_2 && clicked) str++; |
251 if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 1, str, TC_FROMSTRING, r.right - r.left - 10); |
249 if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 1, str, TC_FROMSTRING, r.right - r.left - 10); |
252 break; |
250 break; |
253 } |
251 } |
254 |
252 |
255 case WWT_MATRIX: { |
253 case WWT_MATRIX: { |
256 int c, d, ctr; |
|
257 int x, amt1, amt2; |
|
258 int color; |
|
259 |
|
260 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
254 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
261 |
255 |
262 c = GB(wi->data, 0, 8); |
256 int c = GB(wi->data, 0, 8); |
263 amt1 = (wi->right - wi->left + 1) / c; |
257 int amt1 = (wi->right - wi->left + 1) / c; |
264 |
258 |
265 d = GB(wi->data, 8, 8); |
259 int d = GB(wi->data, 8, 8); |
266 amt2 = (wi->bottom - wi->top + 1) / d; |
260 int amt2 = (wi->bottom - wi->top + 1) / d; |
267 |
261 |
268 color = _colour_gradient[wi->color & 0xF][6]; |
262 int color = _colour_gradient[wi->color & 0xF][6]; |
269 |
263 |
270 x = r.left; |
264 int x = r.left; |
271 for (ctr = c; ctr > 1; ctr--) { |
265 for (int ctr = c; ctr > 1; ctr--) { |
272 x += amt1; |
266 x += amt1; |
273 GfxFillRect(x, r.top + 1, x, r.bottom - 1, color); |
267 GfxFillRect(x, r.top + 1, x, r.bottom - 1, color); |
274 } |
268 } |
275 |
269 |
276 x = r.top; |
270 x = r.top; |
277 for (ctr = d; ctr > 1; ctr--) { |
271 for (int ctr = d; ctr > 1; ctr--) { |
278 x += amt2; |
272 x += amt2; |
279 GfxFillRect(r.left + 1, x, r.right - 1, x, color); |
273 GfxFillRect(r.left + 1, x, r.right - 1, x, color); |
280 } |
274 } |
281 |
275 |
282 color = _colour_gradient[wi->color & 0xF][4]; |
276 color = _colour_gradient[wi->color & 0xF][4]; |
283 |
277 |
284 x = r.left - 1; |
278 x = r.left - 1; |
285 for (ctr = c; ctr > 1; ctr--) { |
279 for (int ctr = c; ctr > 1; ctr--) { |
286 x += amt1; |
280 x += amt1; |
287 GfxFillRect(x, r.top + 1, x, r.bottom - 1, color); |
281 GfxFillRect(x, r.top + 1, x, r.bottom - 1, color); |
288 } |
282 } |
289 |
283 |
290 x = r.top - 1; |
284 x = r.top - 1; |
291 for (ctr = d; ctr > 1; ctr--) { |
285 for (int ctr = d; ctr > 1; ctr--) { |
292 x += amt2; |
286 x += amt2; |
293 GfxFillRect(r.left + 1, x, r.right - 1, x, color); |
287 GfxFillRect(r.left + 1, x, r.right - 1, x, color); |
294 } |
288 } |
295 |
289 |
296 break; |
290 break; |
297 } |
291 } |
298 |
292 |
299 /* vertical scrollbar */ |
293 /* vertical scrollbar */ |
300 case WWT_SCROLLBAR: { |
294 case WWT_SCROLLBAR: { |
301 Point pt; |
|
302 int c1, c2; |
|
303 |
|
304 assert(wi->data == 0); |
295 assert(wi->data == 0); |
305 assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
296 assert(r.right - r.left == 11); // To ensure the same sizes are used everywhere! |
306 |
297 |
307 /* draw up/down buttons */ |
298 /* draw up/down buttons */ |
308 clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_UP); |
299 clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_UP); |
309 DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
300 DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
310 DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, TC_BLACK); |
301 DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, TC_BLACK); |
311 |
302 |
312 clicked = (((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_DOWN)); |
303 clicked = (((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_DOWN)); |
313 DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
304 DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
314 DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, TC_BLACK); |
305 DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, TC_BLACK); |
315 |
306 |
316 c1 = _colour_gradient[wi->color & 0xF][3]; |
307 int c1 = _colour_gradient[wi->color & 0xF][3]; |
317 c2 = _colour_gradient[wi->color & 0xF][7]; |
308 int c2 = _colour_gradient[wi->color & 0xF][7]; |
318 |
309 |
319 /* draw "shaded" background */ |
310 /* draw "shaded" background */ |
320 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2); |
311 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2); |
321 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
312 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
322 |
313 |
324 GfxFillRect(r.left + 2, r.top + 10, r.left + 2, r.bottom - 10, c1); |
315 GfxFillRect(r.left + 2, r.top + 10, r.left + 2, r.bottom - 10, c1); |
325 GfxFillRect(r.left + 3, r.top + 10, r.left + 3, r.bottom - 10, c2); |
316 GfxFillRect(r.left + 3, r.top + 10, r.left + 3, r.bottom - 10, c2); |
326 GfxFillRect(r.left + 7, r.top + 10, r.left + 7, r.bottom - 10, c1); |
317 GfxFillRect(r.left + 7, r.top + 10, r.left + 7, r.bottom - 10, c1); |
327 GfxFillRect(r.left + 8, r.top + 10, r.left + 8, r.bottom - 10, c2); |
318 GfxFillRect(r.left + 8, r.top + 10, r.left + 8, r.bottom - 10, c2); |
328 |
319 |
329 pt = HandleScrollbarHittest(&w->vscroll, r.top, r.bottom); |
320 Point pt = HandleScrollbarHittest(&w->vscroll, r.top, r.bottom); |
330 DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_MIDDLE ? FR_LOWERED : FR_NONE); |
321 DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == WF_SCROLL_MIDDLE ? FR_LOWERED : FR_NONE); |
331 break; |
322 break; |
332 } |
323 } |
|
324 |
333 case WWT_SCROLL2BAR: { |
325 case WWT_SCROLL2BAR: { |
334 Point pt; |
|
335 int c1, c2; |
|
336 |
|
337 assert(wi->data == 0); |
326 assert(wi->data == 0); |
338 assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
327 assert(r.right - r.left == 11); // To ensure the same sizes are used everywhere! |
339 |
328 |
340 /* draw up/down buttons */ |
329 /* draw up/down buttons */ |
341 clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_UP | WF_SCROLL2)); |
330 clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_UP | WF_SCROLL2)); |
342 DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
331 DrawFrameRect(r.left, r.top, r.right, r.top + 9, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
343 DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, TC_BLACK); |
332 DoDrawString(UPARROW, r.left + 2 + clicked, r.top + clicked, TC_BLACK); |
344 |
333 |
345 clicked = ((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_DOWN | WF_SCROLL2)); |
334 clicked = ((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_DOWN | WF_SCROLL2)); |
346 DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
335 DrawFrameRect(r.left, r.bottom - 9, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
347 DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, TC_BLACK); |
336 DoDrawString(DOWNARROW, r.left + 2 + clicked, r.bottom - 9 + clicked, TC_BLACK); |
348 |
337 |
349 c1 = _colour_gradient[wi->color & 0xF][3]; |
338 int c1 = _colour_gradient[wi->color & 0xF][3]; |
350 c2 = _colour_gradient[wi->color & 0xF][7]; |
339 int c2 = _colour_gradient[wi->color & 0xF][7]; |
351 |
340 |
352 /* draw "shaded" background */ |
341 /* draw "shaded" background */ |
353 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2); |
342 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c2); |
354 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
343 GfxFillRect(r.left, r.top + 10, r.right, r.bottom - 10, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
355 |
344 |
357 GfxFillRect(r.left + 2, r.top + 10, r.left + 2, r.bottom - 10, c1); |
346 GfxFillRect(r.left + 2, r.top + 10, r.left + 2, r.bottom - 10, c1); |
358 GfxFillRect(r.left + 3, r.top + 10, r.left + 3, r.bottom - 10, c2); |
347 GfxFillRect(r.left + 3, r.top + 10, r.left + 3, r.bottom - 10, c2); |
359 GfxFillRect(r.left + 7, r.top + 10, r.left + 7, r.bottom - 10, c1); |
348 GfxFillRect(r.left + 7, r.top + 10, r.left + 7, r.bottom - 10, c1); |
360 GfxFillRect(r.left + 8, r.top + 10, r.left + 8, r.bottom - 10, c2); |
349 GfxFillRect(r.left + 8, r.top + 10, r.left + 8, r.bottom - 10, c2); |
361 |
350 |
362 pt = HandleScrollbarHittest(&w->vscroll2, r.top, r.bottom); |
351 Point pt = HandleScrollbarHittest(&w->vscroll2, r.top, r.bottom); |
363 DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_MIDDLE | WF_SCROLL2) ? FR_LOWERED : FR_NONE); |
352 DrawFrameRect(r.left, pt.x, r.right, pt.y, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL | WF_SCROLL2)) == (WF_SCROLL_MIDDLE | WF_SCROLL2) ? FR_LOWERED : FR_NONE); |
364 break; |
353 break; |
365 } |
354 } |
366 |
355 |
367 /* horizontal scrollbar */ |
356 /* horizontal scrollbar */ |
368 case WWT_HSCROLLBAR: { |
357 case WWT_HSCROLLBAR: { |
369 Point pt; |
|
370 int c1, c2; |
|
371 |
|
372 assert(wi->data == 0); |
358 assert(wi->data == 0); |
373 assert(r.bottom - r.top == 11); // XXX - to ensure the same sizes are used everywhere! |
359 assert(r.bottom - r.top == 11); // To ensure the same sizes are used everywhere! |
374 |
360 |
375 clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL)) == (WF_SCROLL_UP | WF_HSCROLL)); |
361 clicked = ((w->flags4 & (WF_SCROLL_UP | WF_HSCROLL)) == (WF_SCROLL_UP | WF_HSCROLL)); |
376 DrawFrameRect(r.left, r.top, r.left + 9, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
362 DrawFrameRect(r.left, r.top, r.left + 9, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
377 DrawSprite(SPR_ARROW_LEFT, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked); |
363 DrawSprite(SPR_ARROW_LEFT, PAL_NONE, r.left + 1 + clicked, r.top + 1 + clicked); |
378 |
364 |
379 clicked = ((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL)) == (WF_SCROLL_DOWN | WF_HSCROLL)); |
365 clicked = ((w->flags4 & (WF_SCROLL_DOWN | WF_HSCROLL)) == (WF_SCROLL_DOWN | WF_HSCROLL)); |
380 DrawFrameRect(r.right - 9, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
366 DrawFrameRect(r.right - 9, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
381 DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, r.right - 8 + clicked, r.top + 1 + clicked); |
367 DrawSprite(SPR_ARROW_RIGHT, PAL_NONE, r.right - 8 + clicked, r.top + 1 + clicked); |
382 |
368 |
383 c1 = _colour_gradient[wi->color & 0xF][3]; |
369 int c1 = _colour_gradient[wi->color & 0xF][3]; |
384 c2 = _colour_gradient[wi->color & 0xF][7]; |
370 int c2 = _colour_gradient[wi->color & 0xF][7]; |
385 |
371 |
386 /* draw "shaded" background */ |
372 /* draw "shaded" background */ |
387 GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c2); |
373 GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c2); |
388 GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
374 GfxFillRect(r.left + 10, r.top, r.right - 10, r.bottom, c1 | (1 << PALETTE_MODIFIER_GREYOUT)); |
389 |
375 |
392 GfxFillRect(r.left + 10, r.top + 3, r.right - 10, r.top + 3, c2); |
378 GfxFillRect(r.left + 10, r.top + 3, r.right - 10, r.top + 3, c2); |
393 GfxFillRect(r.left + 10, r.top + 7, r.right - 10, r.top + 7, c1); |
379 GfxFillRect(r.left + 10, r.top + 7, r.right - 10, r.top + 7, c1); |
394 GfxFillRect(r.left + 10, r.top + 8, r.right - 10, r.top + 8, c2); |
380 GfxFillRect(r.left + 10, r.top + 8, r.right - 10, r.top + 8, c2); |
395 |
381 |
396 /* draw actual scrollbar */ |
382 /* draw actual scrollbar */ |
397 pt = HandleScrollbarHittest(&w->hscroll, r.left, r.right); |
383 Point pt = HandleScrollbarHittest(&w->hscroll, r.left, r.right); |
398 DrawFrameRect(pt.x, r.top, pt.y, r.bottom, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == (WF_SCROLL_MIDDLE | WF_HSCROLL) ? FR_LOWERED : FR_NONE); |
384 DrawFrameRect(pt.x, r.top, pt.y, r.bottom, wi->color, (w->flags4 & (WF_SCROLL_MIDDLE | WF_HSCROLL)) == (WF_SCROLL_MIDDLE | WF_HSCROLL) ? FR_LOWERED : FR_NONE); |
399 |
385 |
400 break; |
386 break; |
401 } |
387 } |
402 |
388 |
403 case WWT_FRAME: { |
389 case WWT_FRAME: { |
404 const StringID str = wi->data; |
390 const StringID str = wi->data; |
405 int c1, c2; |
|
406 int x2 = r.left; // by default the left side is the left side of the widget |
391 int x2 = r.left; // by default the left side is the left side of the widget |
407 |
392 |
408 if (str != STR_NULL) x2 = DrawString(r.left + 6, r.top, str, TC_FROMSTRING); |
393 if (str != STR_NULL) x2 = DrawString(r.left + 6, r.top, str, TC_FROMSTRING); |
409 |
394 |
410 c1 = _colour_gradient[wi->color][3]; |
395 int c1 = _colour_gradient[wi->color][3]; |
411 c2 = _colour_gradient[wi->color][7]; |
396 int c2 = _colour_gradient[wi->color][7]; |
412 |
397 |
413 /* Line from upper left corner to start of text */ |
398 /* Line from upper left corner to start of text */ |
414 GfxFillRect(r.left, r.top + 4, r.left + 4, r.top + 4, c1); |
399 GfxFillRect(r.left, r.top + 4, r.left + 4, r.top + 4, c1); |
415 GfxFillRect(r.left + 1, r.top + 5, r.left + 4, r.top + 5, c2); |
400 GfxFillRect(r.left + 1, r.top + 5, r.left + 4, r.top + 5, c2); |
416 |
401 |
430 GfxFillRect(r.left, r.bottom, r.right, r.bottom, c2); |
415 GfxFillRect(r.left, r.bottom, r.right, r.bottom, c2); |
431 |
416 |
432 break; |
417 break; |
433 } |
418 } |
434 |
419 |
435 case WWT_STICKYBOX: { |
420 case WWT_STICKYBOX: |
436 assert(wi->data == 0); |
421 assert(wi->data == 0); |
437 assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
422 assert(r.right - r.left == 11); // To ensure the same sizes are used everywhere! |
438 |
423 |
439 clicked = !!(w->flags4 & WF_STICKY); |
424 clicked = !!(w->flags4 & WF_STICKY); |
440 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
425 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
441 DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + 2 + clicked, r.top + 3 + clicked); |
426 DrawSprite((clicked) ? SPR_PIN_UP : SPR_PIN_DOWN, PAL_NONE, r.left + 2 + clicked, r.top + 3 + clicked); |
442 break; |
427 break; |
443 } |
428 |
444 |
429 case WWT_RESIZEBOX: |
445 case WWT_RESIZEBOX: { |
|
446 assert(wi->data == 0); |
430 assert(wi->data == 0); |
447 assert(r.right - r.left == 11); // XXX - to ensure the same sizes are used everywhere! |
431 assert(r.right - r.left == 11); // To ensure the same sizes are used everywhere! |
448 |
432 |
449 clicked = !!(w->flags4 & WF_SIZING); |
433 clicked = !!(w->flags4 & WF_SIZING); |
450 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
434 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, (clicked) ? FR_LOWERED : FR_NONE); |
451 DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, r.left + 3 + clicked, r.top + 3 + clicked); |
435 DrawSprite(SPR_WINDOW_RESIZE, PAL_NONE, r.left + 3 + clicked, r.top + 3 + clicked); |
452 break; |
436 break; |
453 } |
|
454 |
437 |
455 case WWT_CLOSEBOX: { |
438 case WWT_CLOSEBOX: { |
456 const StringID str = wi->data; |
439 const StringID str = wi->data; |
457 |
440 |
458 assert(str == STR_00C5 || str == STR_00C6); // black or silver cross |
441 assert(str == STR_00C5 || str == STR_00C6); // black or silver cross |
459 assert(r.right - r.left == 10); // ensure the same sizes are used everywhere |
442 assert(r.right - r.left == 10); // To ensure the same sizes are used everywhere |
460 |
443 |
461 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_NONE); |
444 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_NONE); |
462 DrawString(r.left + 2, r.top + 2, str, TC_FROMSTRING); |
445 DrawString(r.left + 2, r.top + 2, str, TC_FROMSTRING); |
463 break; |
446 break; |
464 } |
447 } |
465 |
448 |
466 case WWT_CAPTION: { |
449 case WWT_CAPTION: |
467 assert(r.bottom - r.top == 13); // XXX - to ensure the same sizes are used everywhere! |
450 assert(r.bottom - r.top == 13); // To ensure the same sizes are used everywhere! |
468 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_BORDERONLY); |
451 DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_BORDERONLY); |
469 DrawFrameRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, wi->color, (w->caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY); |
452 DrawFrameRect(r.left + 1, r.top + 1, r.right - 1, r.bottom - 1, wi->color, (w->caption_color == 0xFF) ? FR_LOWERED | FR_DARKENED : FR_LOWERED | FR_DARKENED | FR_BORDERONLY); |
470 |
453 |
471 if (w->caption_color != 0xFF) { |
454 if (w->caption_color != 0xFF) { |
472 GfxFillRect(r.left + 2, r.top + 2, r.right - 2, r.bottom - 2, _colour_gradient[_player_colors[w->caption_color]][4]); |
455 GfxFillRect(r.left + 2, r.top + 2, r.right - 2, r.bottom - 2, _colour_gradient[_player_colors[w->caption_color]][4]); |
473 } |
456 } |
474 |
457 |
475 DrawStringCenteredTruncated(r.left + 2, r.right - 2, r.top + 2, wi->data, 0x84); |
458 DrawStringCenteredTruncated(r.left + 2, r.right - 2, r.top + 2, wi->data, 0x84); |
476 break; |
459 break; |
477 } |
|
478 |
460 |
479 case WWT_DROPDOWN: { |
461 case WWT_DROPDOWN: { |
480 assert(r.bottom - r.top == 11); // ensure consistent size |
462 assert(r.bottom - r.top == 11); // ensure consistent size |
481 |
463 |
482 StringID str = wi->data; |
464 StringID str = wi->data; |