diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index d06feee536..1fb661c446 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -1052,7 +1052,7 @@ static void input_widget_left(const ScreenCoordsXY& screenCoords, rct_window* w, default: if (widget_is_enabled(w, widgetIndex) && !widget_is_disabled(w, widgetIndex)) { - audio_play_sound(SoundId::Click1, 0, w->windowPos.x + ((widget->left + widget->right) / 2)); + audio_play_sound(SoundId::Click1, 0, w->windowPos.x + widget->midX()); // Set new cursor down widget gPressedWidget.window_classification = windowClass; @@ -1334,7 +1334,7 @@ void input_state_widget_pressed( break; { - int32_t mid_point_x = (widget->left + widget->right) / 2 + w->windowPos.x; + int32_t mid_point_x = widget->midX() + w->windowPos.x; audio_play_sound(SoundId::Click2, 0, mid_point_x); } if (cursor_w_class != w->classification || cursor_w_number != w->number || widgetIndex != cursor_widgetIndex) diff --git a/src/openrct2-ui/interface/Widget.cpp b/src/openrct2-ui/interface/Widget.cpp index b660ff3efe..87c863b9aa 100644 --- a/src/openrct2-ui/interface/Widget.cpp +++ b/src/openrct2-ui/interface/Widget.cpp @@ -345,13 +345,7 @@ static void widget_text_centred(rct_drawpixelinfo* dpi, rct_window* w, rct_widge int32_t r = w->windowPos.x + widget->right; if (widget->type == WWT_BUTTON || widget->type == WWT_TABLE_HEADER) - { - int32_t height = widget->height(); - if (height >= 10) - topLeft.y += std::max(widget->top, widget->top + (height / 2) - 5); - else - topLeft.y += widget->top - 1; - } + topLeft.y += widget->textTop(); else topLeft.y += widget->top; @@ -391,11 +385,7 @@ static void widget_text(rct_drawpixelinfo* dpi, rct_window* w, rct_widgetindex w if (widget->type == WWT_BUTTON || widget->type == WWT_DROPDOWN || widget->type == WWT_SPINNER || widget->type == WWT_TABLE_HEADER) { - int32_t height = widget->height(); - if (height >= 10) - t = w->windowPos.y + std::max(widget->top, widget->top + (height / 2) - 5); - else - t = w->windowPos.y + widget->top - 1; + t = w->windowPos.y + widget->textTop(); } else t = w->windowPos.y + widget->top; @@ -588,9 +578,7 @@ static void widget_closebox_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widg if (widget->text == STR_NONE) return; - topLeft = w->windowPos - + ScreenCoordsXY{ (widget->left + widget->right) / 2 - 1, - std::max(widget->top, (widget->top + widget->bottom) / 2 - 5) }; + topLeft = w->windowPos + ScreenCoordsXY{ widget->midX() - 1, std::max(widget->top, widget->midY() - 5) }; if (widget_is_disabled(w, widgetIndex)) colour |= COLOUR_FLAG_INSET; @@ -1058,11 +1046,7 @@ static void widget_text_box_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widg 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(widget->top, widget->top + (height / 2) - 5); - else - t = w->windowPos.y + widget->top - 1; + t = w->windowPos.y + widget->textTop(); if (!active || gTextInput == nullptr) { @@ -1081,7 +1065,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 + 1 }); + gfx_draw_string(dpi, wrapped_string, w->colours[1], { l + 2, t }); size_t string_length = get_string_size(wrapped_string) - 1; @@ -1103,6 +1087,7 @@ 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 + (height - 1), cur_x + width, t + (height - 1), colour + 5); + auto y = t + (widget->height() - 1); + gfx_fill_rect(dpi, cur_x, y, cur_x + width, y, colour + 5); } } diff --git a/src/openrct2-ui/windows/About.cpp b/src/openrct2-ui/windows/About.cpp index e45e538d3c..a16a7a2c0e 100644 --- a/src/openrct2-ui/windows/About.cpp +++ b/src/openrct2-ui/windows/About.cpp @@ -204,7 +204,7 @@ static void window_about_openrct2_common_paint(rct_window* w, rct_drawpixelinfo* const auto& aboutOpenRCT2 = w->widgets[WIDX_TAB_ABOUT_OPENRCT2]; const auto& aboutRCT2 = w->widgets[WIDX_TAB_ABOUT_RCT2]; - int32_t y = w->windowPos.y + ((aboutOpenRCT2.top + aboutOpenRCT2.bottom) / 2) - 3; + int32_t y = w->windowPos.y + aboutOpenRCT2.midY() - 3; ScreenCoordsXY aboutOpenRCT2Coords(w->windowPos.x + aboutOpenRCT2.left + 45, y); ScreenCoordsXY aboutRCT2Coords(w->windowPos.x + aboutRCT2.left + 45, y); diff --git a/src/openrct2-ui/windows/ClearScenery.cpp b/src/openrct2-ui/windows/ClearScenery.cpp index 7410a568e1..d30c9e13a1 100644 --- a/src/openrct2-ui/windows/ClearScenery.cpp +++ b/src/openrct2-ui/windows/ClearScenery.cpp @@ -238,12 +238,8 @@ static void window_clear_scenery_paint(rct_window* w, rct_drawpixelinfo* dpi) window_draw_widgets(w, dpi); // Draw number for tool sizes bigger than 7 - ScreenCoordsXY screenCoords = { - w->windowPos.x - + (window_clear_scenery_widgets[WIDX_PREVIEW].left + window_clear_scenery_widgets[WIDX_PREVIEW].right) / 2, - w->windowPos.y - + (window_clear_scenery_widgets[WIDX_PREVIEW].top + window_clear_scenery_widgets[WIDX_PREVIEW].bottom) / 2 - }; + ScreenCoordsXY screenCoords = { w->windowPos.x + window_clear_scenery_widgets[WIDX_PREVIEW].midX(), + w->windowPos.y + window_clear_scenery_widgets[WIDX_PREVIEW].midY() }; if (gLandToolSize > MAX_TOOL_SIZE_WITH_SPRITE) { gfx_draw_string_centred( @@ -253,9 +249,7 @@ static void window_clear_scenery_paint(rct_window* w, rct_drawpixelinfo* dpi) // Draw cost amount if (gClearSceneryCost != MONEY32_UNDEFINED && gClearSceneryCost != 0 && !(gParkFlags & PARK_FLAGS_NO_MONEY)) { - screenCoords.x = (window_clear_scenery_widgets[WIDX_PREVIEW].left + window_clear_scenery_widgets[WIDX_PREVIEW].right) - / 2 - + w->windowPos.x; + screenCoords.x = window_clear_scenery_widgets[WIDX_PREVIEW].midX() + w->windowPos.x; screenCoords.y = window_clear_scenery_widgets[WIDX_PREVIEW].bottom + w->windowPos.y + 5 + 27; gfx_draw_string_centred(dpi, STR_COST_AMOUNT, screenCoords, COLOUR_BLACK, &gClearSceneryCost); } diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 4c7773e192..fd984c26e1 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -605,7 +605,7 @@ static void window_editor_inventions_list_paint(rct_window* w, rct_drawpixelinfo } // Item name - screenPos = w->windowPos + ScreenCoordsXY{ ((widget->left + widget->right) / 2) + 1, widget->bottom + 3 }; + screenPos = w->windowPos + ScreenCoordsXY{ widget->midX() + 1, widget->bottom + 3 }; width = w->width - w->widgets[WIDX_RESEARCH_ORDER_SCROLL].right - 6; rct_string_id drawString = window_editor_inventions_list_prepare_name(researchItem, false); diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 289de1dfb9..294478e7d9 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -1058,7 +1058,7 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf // Draw name of object { - auto screenPos = w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2 + 1, widget->bottom + 3 }; + auto screenPos = w->windowPos + ScreenCoordsXY{ widget->midX() + 1, widget->bottom + 3 }; width = w->width - w->widgets[WIDX_LIST].right - 6; auto ft = Formatter::Common(); ft.Add(STR_STRING); diff --git a/src/openrct2-ui/windows/Footpath.cpp b/src/openrct2-ui/windows/Footpath.cpp index 5330d74ccf..92b0ef0545 100644 --- a/src/openrct2-ui/windows/Footpath.cpp +++ b/src/openrct2-ui/windows/Footpath.cpp @@ -620,23 +620,20 @@ static void window_footpath_paint(rct_window* w, rct_drawpixelinfo* dpi) // Draw construction image screenCoords = w->windowPos - + ScreenCoordsXY{ (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) - / 2, + + ScreenCoordsXY{ window_footpath_widgets[WIDX_CONSTRUCT].midX(), window_footpath_widgets[WIDX_CONSTRUCT].bottom - 60 }; gfx_draw_sprite(dpi, image, screenCoords, 0); // Draw build this... label screenCoords = w->windowPos - + ScreenCoordsXY{ (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) - / 2, + + ScreenCoordsXY{ window_footpath_widgets[WIDX_CONSTRUCT].midX(), window_footpath_widgets[WIDX_CONSTRUCT].bottom - 23 }; gfx_draw_string_centred(dpi, STR_BUILD_THIS, screenCoords, COLOUR_BLACK, nullptr); } // Draw cost screenCoords = w->windowPos - + ScreenCoordsXY{ (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2, - window_footpath_widgets[WIDX_CONSTRUCT].bottom - 12 }; + + ScreenCoordsXY{ window_footpath_widgets[WIDX_CONSTRUCT].midX(), window_footpath_widgets[WIDX_CONSTRUCT].bottom - 12 }; if (_window_footpath_cost != MONEY32_UNDEFINED) { if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index 1672b26ac3..e0a681119c 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -422,8 +422,8 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo* dpi, r if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { rct_widget widget = window_game_bottom_toolbar_widgets[WIDX_MONEY]; - auto screenCoords = ScreenCoordsXY{ w->windowPos.x + (widget.left + widget.right) / 2, - w->windowPos.y + (widget.top + widget.bottom) / 2 - (line_height == 10 ? 5 : 6) }; + auto screenCoords = ScreenCoordsXY{ w->windowPos.x + widget.midX(), + w->windowPos.y + widget.midY() - (line_height == 10 ? 5 : 6) }; auto ft = Formatter::Common(); ft.Add(gCash); @@ -450,8 +450,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo* dpi, r // Draw guests { rct_widget widget = window_game_bottom_toolbar_widgets[WIDX_GUESTS]; - auto screenCoords = ScreenCoordsXY{ w->windowPos.x + (widget.left + widget.right) / 2, - w->windowPos.y + (widget.top + widget.bottom) / 2 - 6 }; + auto screenCoords = ScreenCoordsXY{ w->windowPos.x + widget.midX(), w->windowPos.y + widget.midY() - 6 }; gfx_draw_string_centred( dpi, @@ -467,7 +466,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo* dpi, r { rct_widget widget = window_game_bottom_toolbar_widgets[WIDX_PARK_RATING]; int32_t x = w->windowPos.x + widget.left + 11; - int32_t y = w->windowPos.y + (widget.top + widget.bottom) / 2 - 5; + int32_t y = w->windowPos.y + widget.midY() - 5; window_game_bottom_toolbar_draw_park_rating(dpi, w, w->colours[3], x, y, std::max(10, ((gParkRating / 4) * 263) / 256)); } @@ -583,8 +582,7 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc // Text utf8* newsItemText = newsItem->Text; - auto screenCoords = w->windowPos - + ScreenCoordsXY{ (middleOutsetWidget->left + middleOutsetWidget->right) / 2, middleOutsetWidget->top + 11 }; + auto screenCoords = w->windowPos + ScreenCoordsXY{ middleOutsetWidget->midX(), middleOutsetWidget->top + 11 }; width = middleOutsetWidget->width() - 62; gfx_draw_string_centred_wrapped_partial( dpi, screenCoords.x, screenCoords.y, width, COLOUR_BRIGHT_GREEN, STR_BOTTOM_TOOLBAR_NEWS_TEXT, &newsItemText, @@ -688,8 +686,7 @@ static void window_game_bottom_toolbar_draw_middle_panel(rct_drawpixelinfo* dpi, uint32_t line_height = font_get_line_height(FONT_SPRITE_BASE_MEDIUM); ScreenCoordsXY middleWidgetCoords( - w->windowPos.x + (middleOutsetWidget->left + middleOutsetWidget->right) / 2, - w->windowPos.y + middleOutsetWidget->top + line_height + 1); + w->windowPos.x + middleOutsetWidget->midX(), w->windowPos.y + middleOutsetWidget->top + line_height + 1); int32_t width = middleOutsetWidget->width() - 62; // Check if there is a map tooltip to draw diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index ac8a87501c..0e3554cce9 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -1082,7 +1082,7 @@ void window_guest_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) auto ft = Formatter::Common(); peep->FormatActionTo(ft); rct_widget* widget = &w->widgets[WIDX_ACTION_LBL]; - auto screenPos = w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->top - 1 }; + auto screenPos = w->windowPos + ScreenCoordsXY{ widget->midX(), widget->top - 1 }; int32_t width = widget->width(); gfx_draw_string_centred_clipped(dpi, STR_BLACK_STRING, gCommonFormatArgs, COLOUR_BLACK, screenPos, width); diff --git a/src/openrct2-ui/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp index 60a58ce4d6..b40da1e82a 100644 --- a/src/openrct2-ui/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -686,8 +686,7 @@ static void window_guest_list_paint(rct_window* w, rct_drawpixelinfo* dpi) gfx_draw_sprite( dpi, i, w->windowPos - + ScreenCoordsXY{ (window_guest_list_widgets[WIDX_TAB_1].left + window_guest_list_widgets[WIDX_TAB_1].right) / 2, - window_guest_list_widgets[WIDX_TAB_1].bottom - 6 }, + + ScreenCoordsXY{ window_guest_list_widgets[WIDX_TAB_1].midX(), window_guest_list_widgets[WIDX_TAB_1].bottom - 6 }, 0); // Tab 2 image diff --git a/src/openrct2-ui/windows/InstallTrack.cpp b/src/openrct2-ui/windows/InstallTrack.cpp index 6f269b6f9c..1acca806f3 100644 --- a/src/openrct2-ui/windows/InstallTrack.cpp +++ b/src/openrct2-ui/windows/InstallTrack.cpp @@ -238,7 +238,7 @@ static void window_install_track_paint(rct_window* w, rct_drawpixelinfo* dpi) drawing_engine_invalidate_image(SPR_TEMP); gfx_draw_sprite(dpi, SPR_TEMP, screenPos, 0); - screenPos = w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->bottom - 12 }; + screenPos = w->windowPos + ScreenCoordsXY{ widget->midX(), widget->bottom - 12 }; // Warnings const TrackDesign* td6 = _trackDesign.get(); diff --git a/src/openrct2-ui/windows/Land.cpp b/src/openrct2-ui/windows/Land.cpp index 438e093516..961c864965 100644 --- a/src/openrct2-ui/windows/Land.cpp +++ b/src/openrct2-ui/windows/Land.cpp @@ -349,8 +349,7 @@ static void window_land_paint(rct_window* w, rct_drawpixelinfo* dpi) // Draw number for tool sizes bigger than 7 if (gLandToolSize > MAX_TOOL_SIZE_WITH_SPRITE) { - screenCoords = { w->windowPos.x + (previewWidget->left + previewWidget->right) / 2, - w->windowPos.y + (previewWidget->top + previewWidget->bottom) / 2 }; + screenCoords = { w->windowPos.x + previewWidget->midX(), w->windowPos.y + previewWidget->midY() }; gfx_draw_string_centred( dpi, STR_LAND_TOOL_SIZE_VALUE, screenCoords - ScreenCoordsXY{ 0, 2 }, COLOUR_BLACK, &gLandToolSize); } @@ -363,8 +362,7 @@ static void window_land_paint(rct_window* w, rct_drawpixelinfo* dpi) widget_draw(dpi, w, WIDX_INCREMENT); } - screenCoords = { w->windowPos.x + (previewWidget->left + previewWidget->right) / 2, - w->windowPos.y + previewWidget->bottom + 5 }; + screenCoords = { w->windowPos.x + previewWidget->midX(), w->windowPos.y + previewWidget->bottom + 5 }; if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { diff --git a/src/openrct2-ui/windows/LandRights.cpp b/src/openrct2-ui/windows/LandRights.cpp index 33962dcbae..9236d4fd9a 100644 --- a/src/openrct2-ui/windows/LandRights.cpp +++ b/src/openrct2-ui/windows/LandRights.cpp @@ -271,10 +271,8 @@ static void window_land_rights_invalidate(rct_window* w) static void window_land_rights_paint(rct_window* w, rct_drawpixelinfo* dpi) { - auto screenCoords = ScreenCoordsXY{ - w->windowPos.x + (window_land_rights_widgets[WIDX_PREVIEW].left + window_land_rights_widgets[WIDX_PREVIEW].right) / 2, - w->windowPos.y + (window_land_rights_widgets[WIDX_PREVIEW].top + window_land_rights_widgets[WIDX_PREVIEW].bottom) / 2 - }; + auto screenCoords = ScreenCoordsXY{ w->windowPos.x + window_land_rights_widgets[WIDX_PREVIEW].midX(), + w->windowPos.y + window_land_rights_widgets[WIDX_PREVIEW].midY() }; window_draw_widgets(w, dpi); // Draw number for tool sizes bigger than 7 @@ -287,8 +285,7 @@ static void window_land_rights_paint(rct_window* w, rct_drawpixelinfo* dpi) // Draw cost amount if (_landRightsCost != MONEY32_UNDEFINED && _landRightsCost != 0 && !(gParkFlags & PARK_FLAGS_NO_MONEY)) { - screenCoords = { (window_land_rights_widgets[WIDX_PREVIEW].left + window_land_rights_widgets[WIDX_PREVIEW].right) / 2 - + w->windowPos.x, + screenCoords = { window_land_rights_widgets[WIDX_PREVIEW].midX() + w->windowPos.x, window_land_rights_widgets[WIDX_PREVIEW].bottom + w->windowPos.y + 32 }; gfx_draw_string_centred(dpi, STR_COST_AMOUNT, screenCoords, COLOUR_BLACK, &_landRightsCost); } diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index f778ef8042..f21c679182 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -815,8 +815,7 @@ static void window_map_paint(rct_window* w, rct_drawpixelinfo* dpi) window_map_draw_tab_images(w, dpi); auto screenCoords = w->windowPos - + ScreenCoordsXY{ (window_map_widgets[WIDX_LAND_TOOL].left + window_map_widgets[WIDX_LAND_TOOL].right) / 2, - (window_map_widgets[WIDX_LAND_TOOL].top + window_map_widgets[WIDX_LAND_TOOL].bottom) / 2 }; + + ScreenCoordsXY{ window_map_widgets[WIDX_LAND_TOOL].midX(), window_map_widgets[WIDX_LAND_TOOL].midY() }; // Draw land tool size if (widget_is_active_tool(w, WIDX_SET_LAND_RIGHTS) && _landRightsToolSize > MAX_TOOL_SIZE_WITH_SPRITE) diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index 305d9c7da1..2982fe60a6 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -915,8 +915,8 @@ static void window_multiplayer_groups_paint(rct_window* w, rct_drawpixelinfo* dp auto ft = Formatter::Common(); ft.Add(buffer); gfx_draw_string_centred_clipped( - dpi, STR_STRING, gCommonFormatArgs, COLOUR_BLACK, - w->windowPos + ScreenCoordsXY{ (widget->left + widget->right - 11) / 2, widget->top }, widget->width() - 8); + dpi, STR_STRING, gCommonFormatArgs, COLOUR_BLACK, w->windowPos + ScreenCoordsXY{ widget->midX() - 5, widget->top }, + widget->width() - 8); } auto screenPos = w->windowPos @@ -942,8 +942,8 @@ static void window_multiplayer_groups_paint(rct_window* w, rct_drawpixelinfo* dp auto ft = Formatter::Common(); ft.Add(buffer); gfx_draw_string_centred_clipped( - dpi, STR_STRING, gCommonFormatArgs, COLOUR_BLACK, - w->windowPos + ScreenCoordsXY{ (widget->left + widget->right - 11) / 2, widget->top }, widget->width() - 8); + dpi, STR_STRING, gCommonFormatArgs, COLOUR_BLACK, w->windowPos + ScreenCoordsXY{ widget->midX() - 5, widget->top }, + widget->width() - 8); } } diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index 70323e6f65..3c9753cbd9 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -876,7 +876,7 @@ static void window_park_entrance_paint(rct_window* w, rct_drawpixelinfo* dpi) labelWidget = &window_park_entrance_widgets[WIDX_STATUS]; gfx_draw_string_centred_clipped( dpi, STR_BLACK_STRING, gCommonFormatArgs, COLOUR_BLACK, - w->windowPos + ScreenCoordsXY{ (labelWidget->left + labelWidget->right) / 2, labelWidget->top }, labelWidget->width()); + w->windowPos + ScreenCoordsXY{ labelWidget->midX(), labelWidget->top }, labelWidget->width()); } /** @@ -1861,10 +1861,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) sprite_idx |= 0xA9E00000; gfx_draw_sprite( - dpi, sprite_idx, - w->windowPos - + ScreenCoordsXY{ (w->widgets[WIDX_TAB_3].left + w->widgets[WIDX_TAB_3].right) / 2, - w->widgets[WIDX_TAB_3].bottom - 9 }, + dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].midX(), w->widgets[WIDX_TAB_3].bottom - 9 }, 0); } diff --git a/src/openrct2-ui/windows/Player.cpp b/src/openrct2-ui/windows/Player.cpp index a57e4fb390..2aab493857 100644 --- a/src/openrct2-ui/windows/Player.cpp +++ b/src/openrct2-ui/windows/Player.cpp @@ -378,8 +378,8 @@ void window_player_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) ft.Add(buffer); gfx_draw_string_centred_clipped( - dpi, STR_STRING, gCommonFormatArgs, COLOUR_BLACK, - w->windowPos + ScreenCoordsXY{ (widget->left + widget->right - 11) / 2, widget->top }, widget->width() - 8); + dpi, STR_STRING, gCommonFormatArgs, COLOUR_BLACK, w->windowPos + ScreenCoordsXY{ widget->midX() - 5, widget->top }, + widget->width() - 8); } // Draw ping diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 9656a474cd..4fa37045f4 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -1391,8 +1391,7 @@ static void window_ride_draw_tab_customer(rct_drawpixelinfo* dpi, rct_window* w) spriteIndex += 1; spriteIndex |= 0xA9E00000; - gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->bottom - 6 }, 0); + gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->midX(), widget->bottom - 6 }, 0); } } diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 2a7b28461d..77f774679c 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2341,7 +2341,7 @@ static void window_ride_construction_paint(rct_window* w, rct_drawpixelinfo* dpi } // Draw cost - screenCoords = { w->windowPos.x + (widget->left + widget->right) / 2, w->windowPos.y + widget->bottom - 23 }; + screenCoords = { w->windowPos.x + widget->midX(), w->windowPos.y + widget->bottom - 23 }; if (_rideConstructionState != RIDE_CONSTRUCTION_STATE_PLACE) gfx_draw_string_centred(dpi, STR_BUILD_THIS, screenCoords, COLOUR_BLACK, w); diff --git a/src/openrct2-ui/windows/SceneryScatter.cpp b/src/openrct2-ui/windows/SceneryScatter.cpp index 48d3ac9042..6b67230719 100644 --- a/src/openrct2-ui/windows/SceneryScatter.cpp +++ b/src/openrct2-ui/windows/SceneryScatter.cpp @@ -236,8 +236,7 @@ static void window_scenery_scatter_paint(rct_window* w, rct_drawpixelinfo* dpi) if (gWindowSceneryScatterSize > MAX_TOOL_SIZE_WITH_SPRITE) { auto preview = window_scenery_scatter_widgets[WIDX_PREVIEW]; - auto screenCoords = ScreenCoordsXY{ w->windowPos.x + (preview.left + preview.right) / 2, - w->windowPos.y + (preview.top + preview.bottom) / 2 }; + auto screenCoords = ScreenCoordsXY{ w->windowPos.x + preview.midX(), w->windowPos.y + preview.midY() }; gfx_draw_string_centred( dpi, STR_LAND_TOOL_SIZE_VALUE, screenCoords - ScreenCoordsXY{ 0, 2 }, COLOUR_BLACK, &gWindowSceneryScatterSize); } diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index 5fccbfa054..fc7cc0bbfd 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -952,7 +952,7 @@ void window_staff_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) auto ft = Formatter::Common(); peep->FormatActionTo(ft); rct_widget* widget = &w->widgets[WIDX_BTM_LABEL]; - auto screenPos = w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, widget->top }; + auto screenPos = w->windowPos + ScreenCoordsXY{ widget->midX(), widget->top }; int32_t width = widget->width(); gfx_draw_string_centred_clipped(dpi, STR_BLACK_STRING, gCommonFormatArgs, COLOUR_BLACK, screenPos, width); } diff --git a/src/openrct2-ui/windows/TitleScenarioSelect.cpp b/src/openrct2-ui/windows/TitleScenarioSelect.cpp index 508110c979..dafd24e841 100644 --- a/src/openrct2-ui/windows/TitleScenarioSelect.cpp +++ b/src/openrct2-ui/windows/TitleScenarioSelect.cpp @@ -461,8 +461,7 @@ static void window_scenarioselect_paint(rct_window* w, rct_drawpixelinfo* dpi) ft.Add(ScenarioCategoryStringIds[i]); } - ScreenCoordsXY stringCoords( - (widget->left + widget->right) / 2 + w->windowPos.x, (widget->top + widget->bottom) / 2 + w->windowPos.y - 3); + ScreenCoordsXY stringCoords(widget->midX() + w->windowPos.x, widget->midY() + w->windowPos.y - 3); gfx_draw_string_centred_wrapped(dpi, gCommonFormatArgs, stringCoords, 87, format, COLOUR_AQUAMARINE); } diff --git a/src/openrct2-ui/windows/TrackList.cpp b/src/openrct2-ui/windows/TrackList.cpp index 060fe9e26d..c68c391998 100644 --- a/src/openrct2-ui/windows/TrackList.cpp +++ b/src/openrct2-ui/windows/TrackList.cpp @@ -540,7 +540,7 @@ static void window_track_list_paint(rct_window* w, rct_drawpixelinfo* dpi) } auto trackPreview = screenPos; - screenPos = w->windowPos + ScreenCoordsXY{ (widget->left + widget->right) / 2, (widget->top + widget->bottom) / 2 }; + screenPos = w->windowPos + ScreenCoordsXY{ widget->midX(), widget->midY() }; rct_g1_element g1temp = {}; g1temp.offset = _trackDesignPreviewPixels.data() + (_currentTrackPieceDirection * TRACK_PREVIEW_IMAGE_SIZE); diff --git a/src/openrct2-ui/windows/Water.cpp b/src/openrct2-ui/windows/Water.cpp index dca68a393c..a048efbb9a 100644 --- a/src/openrct2-ui/windows/Water.cpp +++ b/src/openrct2-ui/windows/Water.cpp @@ -211,10 +211,8 @@ static void window_water_invalidate(rct_window* w) */ static void window_water_paint(rct_window* w, rct_drawpixelinfo* dpi) { - auto screenCoords = ScreenCoordsXY{ - w->windowPos.x + (window_water_widgets[WIDX_PREVIEW].left + window_water_widgets[WIDX_PREVIEW].right) / 2, - w->windowPos.y + (window_water_widgets[WIDX_PREVIEW].top + window_water_widgets[WIDX_PREVIEW].bottom) / 2 - }; + auto screenCoords = ScreenCoordsXY{ w->windowPos.x + window_water_widgets[WIDX_PREVIEW].midX(), + w->windowPos.y + window_water_widgets[WIDX_PREVIEW].midY() }; window_draw_widgets(w, dpi); // Draw number for tool sizes bigger than 7 @@ -227,8 +225,7 @@ static void window_water_paint(rct_window* w, rct_drawpixelinfo* dpi) if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { // Draw raise cost amount - screenCoords = { (window_water_widgets[WIDX_PREVIEW].left + window_water_widgets[WIDX_PREVIEW].right) / 2 - + w->windowPos.x, + screenCoords = { window_water_widgets[WIDX_PREVIEW].midX() + w->windowPos.x, window_water_widgets[WIDX_PREVIEW].bottom + w->windowPos.y + 5 }; if (gWaterToolRaiseCost != MONEY32_UNDEFINED && gWaterToolRaiseCost != 0) gfx_draw_string_centred(dpi, STR_RAISE_COST_AMOUNT, screenCoords, COLOUR_BLACK, &gWaterToolRaiseCost); diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index d3a98d9ca8..91559d93d5 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -108,6 +108,24 @@ struct rct_widget { return bottom - top; } + + int16_t midX() const + { + return (left + right) / 2; + } + + int16_t midY() const + { + return (top + bottom) / 2; + } + + int16_t textTop() const + { + if (height() >= 10) + return std::max(top, top + (height() / 2) - 5); + else + return top - 1; + } }; /**