1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-04 13:42:55 +01:00

Merge pull request #11985 from AaronVanGeffen/windows/object-selection

Increase widget heights in object selection window
This commit is contained in:
Michael Steenbeek
2020-06-24 23:09:10 +02:00
committed by GitHub
2 changed files with 37 additions and 29 deletions

View File

@@ -1057,6 +1057,13 @@ static void widget_text_box_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widg
gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM;
gCurrentFontFlags = 0;
// Figure out where the text should be positioned vertically.
int32_t height = (widget->bottom - widget->top);
if (height >= 10)
t = w->windowPos.y + std::max<int32_t>(widget->top, widget->top + (height / 2) - 5);
else
t = w->windowPos.y + widget->top - 1;
if (!active || gTextInput == nullptr)
{
if (w->widgets[widgetIndex].text != 0)
@@ -1074,7 +1081,7 @@ static void widget_text_box_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widg
// +13 for cursor when max length.
gfx_wrap_string(wrapped_string, r - l - 5 - 6, &no_lines, &font_height);
gfx_draw_string(dpi, wrapped_string, w->colours[1], { l + 2, t });
gfx_draw_string(dpi, wrapped_string, w->colours[1], { l + 2, t + 1 });
size_t string_length = get_string_size(wrapped_string) - 1;
@@ -1096,6 +1103,6 @@ static void widget_text_box_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widg
if (gTextBoxFrameNo <= 15)
{
colour = ColourMapA[w->colours[1]].mid_light;
gfx_fill_rect(dpi, cur_x, t + 9, cur_x + width, t + 9, colour + 5);
gfx_fill_rect(dpi, cur_x, t + (height - 1), cur_x + width, t + (height - 1), colour + 5);
}
}

View File

@@ -112,7 +112,7 @@ static constexpr const ObjectPageDesc ObjectSelectionPages[] = {
#pragma region Widgets
enum WINDOW_STAFF_LIST_WIDGET_IDX {
enum WINDOW_EDITOR_OBJECT_SELECTION_WIDGET_IDX {
WIDX_BACKGROUND,
WIDX_TITLE,
WIDX_CLOSE,
@@ -122,7 +122,7 @@ enum WINDOW_STAFF_LIST_WIDGET_IDX {
WIDX_PREVIEW,
WIDX_INSTALL_TRACK,
WIDX_FILTER_DROPDOWN,
WIDX_FILTER_STRING_BUTTON,
WIDX_FILTER_TEXT_BOX,
WIDX_FILTER_CLEAR_BUTTON,
WIDX_FILTER_RIDE_TAB_FRAME,
WIDX_FILTER_RIDE_TAB_ALL,
@@ -143,13 +143,13 @@ static bool _window_editor_object_selection_widgets_initialised;
static std::vector<rct_widget> _window_editor_object_selection_widgets = {
WINDOW_SHIM(WINDOW_TITLE, WW, WH),
{ WWT_RESIZE, 1, 0, 599, 43, 399, 0xFFFFFFFF, STR_NONE },
{ WWT_BUTTON, 0, 470, 591, 23, 34, STR_OBJECT_SELECTION_ADVANCED, STR_OBJECT_SELECTION_ADVANCED_TIP },
{ WWT_BUTTON, 0, 470, 591, 22, 35, STR_OBJECT_SELECTION_ADVANCED, STR_OBJECT_SELECTION_ADVANCED_TIP },
{ WWT_SCROLL, 1, 4, 291, 60, 386, SCROLL_VERTICAL, STR_NONE },
{ WWT_FLATBTN, 1, 391, 504, 46, 159, 0xFFFFFFFF, STR_NONE },
{ WWT_BUTTON, 0, 470, 591, 23, 34, STR_INSTALL_NEW_TRACK_DESIGN, STR_INSTALL_NEW_TRACK_DESIGN_TIP },
{ WWT_BUTTON, 0, 350, 463, 23, 34, STR_OBJECT_FILTER, STR_OBJECT_FILTER_TIP },
{ WWT_TEXT_BOX, 1, 4, 214, 46, 57, STR_NONE, STR_NONE },
{ WWT_BUTTON, 1, 218, 287, 46, 57, STR_OBJECT_SEARCH_CLEAR, STR_NONE },
{ WWT_FLATBTN, 1, 391, 504, 45, 159, 0xFFFFFFFF, STR_NONE },
{ WWT_BUTTON, 0, 470, 591, 22, 35, STR_INSTALL_NEW_TRACK_DESIGN, STR_INSTALL_NEW_TRACK_DESIGN_TIP },
{ WWT_BUTTON, 0, 350, 463, 22, 35, STR_OBJECT_FILTER, STR_OBJECT_FILTER_TIP },
{ WWT_TEXT_BOX, 1, 4, 214, 45, 58, STR_NONE, STR_NONE },
{ WWT_BUTTON, 1, 218, 287, 45, 58, STR_OBJECT_SEARCH_CLEAR, STR_NONE },
{ WWT_IMGBTN, 1, 3, 287, 73, 76, 0xFFFFFFFF, STR_NONE },
{ WWT_TAB, 1, 3, 33, 47, 73, IMAGE_TYPE_REMAP | SPR_TAB, STR_OBJECT_FILTER_ALL_RIDES_TIP },
{ WWT_TAB, 1, 34, 64, 47, 73, IMAGE_TYPE_REMAP | SPR_TAB, STR_TRANSPORT_RIDES_TIP },
@@ -389,10 +389,10 @@ rct_window* window_editor_object_selection_open()
window = window_create_centred(
600, 400, &window_editor_object_selection_events, WC_EDITOR_OBJECT_SELECTION, WF_10 | WF_RESIZABLE);
window->widgets = _window_editor_object_selection_widgets.data();
window->widgets[WIDX_FILTER_STRING_BUTTON].string = _filter_string;
window->widgets[WIDX_FILTER_TEXT_BOX].string = _filter_string;
window->enabled_widgets = (1 << WIDX_ADVANCED) | (1 << WIDX_INSTALL_TRACK) | (1 << WIDX_FILTER_DROPDOWN)
| (1 << WIDX_FILTER_STRING_BUTTON) | (1 << WIDX_FILTER_CLEAR_BUTTON) | (1 << WIDX_CLOSE) | (1 << WIDX_LIST_SORT_TYPE)
| (1 << WIDX_FILTER_TEXT_BOX) | (1 << WIDX_FILTER_CLEAR_BUTTON) | (1 << WIDX_CLOSE) | (1 << WIDX_LIST_SORT_TYPE)
| (1UL << WIDX_LIST_SORT_RIDE);
_filter_flags = gConfigInterface.object_selection_filter_flags;
@@ -522,7 +522,7 @@ static void window_editor_object_selection_mouseup(rct_window* w, rct_widgetinde
context_open_intent(&intent);
break;
}
case WIDX_FILTER_STRING_BUTTON:
case WIDX_FILTER_TEXT_BOX:
window_start_textbox(w, widgetIndex, STR_STRING, _filter_string, sizeof(_filter_string));
break;
case WIDX_FILTER_CLEAR_BUTTON:
@@ -669,7 +669,7 @@ static void window_editor_object_selection_dropdown(rct_window* w, rct_widgetind
*/
static void window_editor_object_selection_scrollgetsize(rct_window* w, int32_t scrollIndex, int32_t* width, int32_t* height)
{
*height = static_cast<int32_t>(_listItems.size() * 12);
*height = static_cast<int32_t>(_listItems.size() * SCROLLABLE_ROW_HEIGHT);
}
/**
@@ -884,13 +884,13 @@ static void window_editor_object_selection_invalidate(rct_window* w)
bool ridePage = (get_selected_object_type(w) == OBJECT_TYPE_RIDE);
w->widgets[WIDX_LIST].top = (ridePage ? 118 : 60);
w->widgets[WIDX_FILTER_STRING_BUTTON].right = w->widgets[WIDX_LIST].right - 77;
w->widgets[WIDX_FILTER_STRING_BUTTON].top = (ridePage ? 80 : 46);
w->widgets[WIDX_FILTER_STRING_BUTTON].bottom = (ridePage ? 91 : 57);
w->widgets[WIDX_FILTER_TEXT_BOX].right = w->widgets[WIDX_LIST].right - 77;
w->widgets[WIDX_FILTER_TEXT_BOX].top = (ridePage ? 79 : 45);
w->widgets[WIDX_FILTER_TEXT_BOX].bottom = (ridePage ? 92 : 58);
w->widgets[WIDX_FILTER_CLEAR_BUTTON].left = w->widgets[WIDX_LIST].right - 73;
w->widgets[WIDX_FILTER_CLEAR_BUTTON].right = w->widgets[WIDX_LIST].right;
w->widgets[WIDX_FILTER_CLEAR_BUTTON].top = (ridePage ? 80 : 46);
w->widgets[WIDX_FILTER_CLEAR_BUTTON].bottom = (ridePage ? 91 : 57);
w->widgets[WIDX_FILTER_CLEAR_BUTTON].top = (ridePage ? 79 : 45);
w->widgets[WIDX_FILTER_CLEAR_BUTTON].bottom = (ridePage ? 92 : 58);
if (ridePage)
{
@@ -919,7 +919,7 @@ static void window_editor_object_selection_invalidate(rct_window* w)
int32_t width_limit = (w->widgets[WIDX_LIST].right - w->widgets[WIDX_LIST].left - 15) / 2;
w->widgets[WIDX_LIST_SORT_TYPE].type = WWT_TABLE_HEADER;
w->widgets[WIDX_LIST_SORT_TYPE].top = w->widgets[WIDX_FILTER_STRING_BUTTON].bottom + 3;
w->widgets[WIDX_LIST_SORT_TYPE].top = w->widgets[WIDX_FILTER_TEXT_BOX].bottom + 3;
w->widgets[WIDX_LIST_SORT_TYPE].bottom = w->widgets[WIDX_LIST_SORT_TYPE].top + 13;
w->widgets[WIDX_LIST_SORT_TYPE].left = 4;
w->widgets[WIDX_LIST_SORT_TYPE].right = w->widgets[WIDX_LIST_SORT_TYPE].left + width_limit;
@@ -1083,7 +1083,7 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf
dpi, gCommonFormatArgs, screenPos + ScreenCoordsXY{ 0, 5 }, width, STR_WINDOW_COLOUR_2_STRINGID, COLOUR_BLACK);
}
auto screenPos = w->windowPos + ScreenCoordsXY{ w->width - 5, w->height - (12 * 4) };
auto screenPos = w->windowPos + ScreenCoordsXY{ w->width - 5, w->height - (LIST_ROW_HEIGHT * 4) };
// Draw ride type.
if (get_selected_object_type(w) == OBJECT_TYPE_RIDE)
@@ -1092,12 +1092,12 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf
gfx_draw_string_right(dpi, stringId, nullptr, COLOUR_WHITE, screenPos);
}
screenPos.y += 12;
screenPos.y += LIST_ROW_HEIGHT;
// Draw object source
stringId = object_manager_get_source_game_string(listItem->repositoryItem->GetFirstSourceGame());
gfx_draw_string_right(dpi, stringId, nullptr, COLOUR_WHITE, screenPos);
screenPos.y += 12;
screenPos.y += LIST_ROW_HEIGHT;
// Draw object dat name
const char* path = path_get_filename(listItem->repositoryItem->Path.c_str());
@@ -1125,7 +1125,7 @@ static void window_editor_object_selection_scrollpaint(rct_window* w, rct_drawpi
screenCoords.y = 0;
for (const auto& listItem : _listItems)
{
if (screenCoords.y + 12 >= dpi->y && screenCoords.y <= dpi->y + dpi->height)
if (screenCoords.y + SCROLLABLE_ROW_HEIGHT >= dpi->y && screenCoords.y <= dpi->y + dpi->height)
{
// Draw checkbox
if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER) && !(*listItem.flags & 0x20))
@@ -1135,7 +1135,8 @@ static void window_editor_object_selection_scrollpaint(rct_window* w, rct_drawpi
colour = COLOUR_BRIGHT_GREEN | COLOUR_FLAG_TRANSLUCENT;
if (listItem.entry == w->object_entry && !(*listItem.flags & OBJECT_SELECTION_FLAG_6))
{
gfx_filter_rect(dpi, 0, screenCoords.y, w->width, screenCoords.y + 11, PALETTE_DARKEN_1);
auto bottom = screenCoords.y + (SCROLLABLE_ROW_HEIGHT - 1);
gfx_filter_rect(dpi, 0, screenCoords.y, w->width, bottom, PALETTE_DARKEN_1);
colour = COLOUR_BRIGHT_GREEN;
}
@@ -1190,7 +1191,7 @@ static void window_editor_object_selection_scrollpaint(rct_window* w, rct_drawpi
}
gfx_draw_string_left_clipped(dpi, STR_STRING, &bufferWithColour, colour, screenCoords, width_limit);
}
screenCoords.y += 12;
screenCoords.y += SCROLLABLE_ROW_HEIGHT;
}
}
@@ -1239,7 +1240,7 @@ static void window_editor_object_selection_set_pressed_tab(rct_window* w)
*/
static int32_t get_object_from_object_selection(uint8_t object_type, int32_t y)
{
int32_t listItemIndex = y / 12;
int32_t listItemIndex = y / SCROLLABLE_ROW_HEIGHT;
if (listItemIndex < 0 || static_cast<size_t>(listItemIndex) >= _listItems.size())
return -1;
@@ -1319,7 +1320,7 @@ static void window_editor_object_selection_update(rct_window* w)
if (gCurrentTextBox.window.classification == w->classification && gCurrentTextBox.window.number == w->number)
{
window_update_textbox_caret();
widget_invalidate(w, WIDX_FILTER_STRING_BUTTON);
widget_invalidate(w, WIDX_FILTER_TEXT_BOX);
}
for (rct_widgetindex i = WIDX_FILTER_RIDE_TAB_TRANSPORT; i <= WIDX_FILTER_RIDE_TAB_STALL; i++)
@@ -1338,7 +1339,7 @@ static void window_editor_object_selection_update(rct_window* w)
static void window_editor_object_selection_textinput(rct_window* w, rct_widgetindex widgetIndex, char* text)
{
if (widgetIndex != WIDX_FILTER_STRING_BUTTON || text == nullptr)
if (widgetIndex != WIDX_FILTER_TEXT_BOX || text == nullptr)
return;
if (strcmp(_filter_string, text) == 0)