Mercurial > hg > openttd
changeset 8335:5d87abba6871 draft
(svn r11901) -Add: add two widgets for dropdowns, one raised and one inset, to eventually replace use of two widgets for each dropdown control.
author | peter1138 <peter1138@openttd.org> |
---|---|
date | Thu, 17 Jan 2008 18:09:15 +0000 |
parents | 6ed81efdeff6 |
children | 4f73dcb0e148 |
files | src/widget.cpp src/widgets/dropdown.cpp src/window_gui.h |
diffstat | 3 files changed, 34 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/widget.cpp +++ b/src/widget.cpp @@ -472,6 +472,28 @@ DrawStringCenteredTruncated(r.left + 2, r.right - 2, r.top + 2, wi->data, 0x84); break; } + + case WWT_DROPDOWN: { + assert(r.bottom - r.top == 11); // ensure consistent size + + StringID str = wi->data; + DrawFrameRect(r.left, r.top, r.right - 12, r.bottom, wi->color, FR_NONE); + DrawFrameRect(r.right - 11, r.top, r.right, r.bottom, wi->color, clicked ? FR_LOWERED : FR_NONE); + DrawString(r.right - (clicked ? 8 : 9), r.top + (clicked ? 2 : 1), STR_0225, TC_BLACK); + if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 1, str, TC_BLACK, r.right - r.left - 12); + break; + } + + case WWT_DROPDOWNIN: { + assert(r.bottom - r.top == 11); // ensure consistent size + + StringID str = wi->data; + DrawFrameRect(r.left, r.top, r.right, r.bottom, wi->color, FR_LOWERED | FR_DARKENED); + DrawFrameRect(r.right - 11, r.top + 1, r.right - 1, r.bottom - 1, wi->color, clicked ? FR_LOWERED : FR_NONE); + DrawString(r.right - (clicked ? 8 : 9), r.top + (clicked ? 2 : 1), STR_0225, TC_BLACK); + if (str != STR_NULL) DrawStringTruncated(r.left + 2, r.top + 2, str, TC_BLACK, r.right - r.left - 12); + break; + } } if (w->IsWidgetDisabled(i)) {
--- a/src/widgets/dropdown.cpp +++ b/src/widgets/dropdown.cpp @@ -220,7 +220,7 @@ const Widget *wi = &w->widget[button]; /* The preferred position is just below the dropdown calling widget */ - int top = w->top + wi->bottom + 2; + int top = w->top + wi->bottom + 1; int height = list->size() * 10 + 4; /* Check if the status bar is visible, as we don't want to draw over it */ @@ -235,8 +235,8 @@ int screen_top = w3 == NULL ? 0 : w3->top + w3->height; /* If not, check if it will fit above the widget */ - if (w->top + wi->top - height - 1 > screen_top) { - top = w->top + wi->top - height - 1; + if (w->top + wi->top - height > screen_top) { + top = w->top + wi->top - height; } else { /* ... and lastly if it won't, enable the scroll bar and fit the * list in below the widget */ @@ -246,17 +246,21 @@ } } + /* XXX Temporary fix to make dropdown compatible with separate widgets */ + const Widget *wil = wi; + if (wi->type != WWT_DROPDOWN && wi->type != WWT_DROPDOWNIN) wil--; + Window *dw = AllocateWindow( - w->left + wi[-1].left + 1, + w->left + wil->left, top, - wi->right - wi[-1].left + 1, + wi->right - wil->left + 1, height, DropDownMenuWndProc, WC_DROPDOWN_MENU, _dropdown_menu_widgets); dw->widget[0].color = wi->color; - dw->widget[0].right = wi->right - wi[-1].left; + dw->widget[0].right = wi->right - wil->left; dw->widget[0].bottom = height - 1; dw->SetWidgetHiddenState(1, !scroll);
--- a/src/window_gui.h +++ b/src/window_gui.h @@ -492,6 +492,8 @@ WWT_SCROLL2BAR, ///< 2nd vertical scrollbar WWT_RESIZEBOX, WWT_CLOSEBOX, + WWT_DROPDOWN, ///< Raised drop down list (regular) + WWT_DROPDOWNIN, ///< Inset drop down list (used on game options only) WWT_LAST, ///< Last Item. use WIDGETS_END to fill up padding!! WWT_MASK = 0x1F,