From 31eec7106b5353550cf3f4825a68d9e8724e2b1c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 21 Sep 2025 20:35:58 +0100 Subject: [PATCH] Codechange: Use Rect WithX/WithY in some places. --- src/build_vehicle_gui.cpp | 2 +- src/dropdown.cpp | 4 ++-- src/dropdown_common_type.h | 4 ++-- src/error_gui.cpp | 2 +- src/fios_gui.cpp | 4 ++-- src/misc_gui.cpp | 2 +- src/network/network_content_gui.cpp | 2 +- src/train_gui.cpp | 2 +- src/transparency_gui.cpp | 2 +- src/vehicle_gui.cpp | 6 +++--- src/widget.cpp | 26 ++++++++++++++------------ 11 files changed, 29 insertions(+), 27 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 0702fdeee5..f21a424f1e 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1030,7 +1030,7 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li if (has_variants) { Rect fr = tr.WithWidth(circle_width, rtl); - DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, textr.top, fr.right, textr.bottom}, SA_CENTER); + DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, fr.WithY(textr), SA_CENTER); } tr = tr.Indent(circle_width + WidgetDimensions::scaled.hsep_normal, rtl); diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 2b2570f3db..d3df9a731a 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -248,7 +248,7 @@ struct DropdownWindow : Window { if (y < item_height) { if (item->masked || !item->Selectable()) return false; result = item->result; - click_result = item->OnClick({r.left, 0, r.right, item_height - 1}, {_cursor.pos.x - this->left, y}); + click_result = item->OnClick(r.WithY(0, item_height - 1), {_cursor.pos.x - this->left, y}); return true; } @@ -274,7 +274,7 @@ struct DropdownWindow : Window { if (--pos >= 0) continue; if (y + item_height - 1 <= ir.bottom) { - Rect full{ir.left, y, ir.right, y + item_height - 1}; + Rect full = ir.WithY(y, y + item_height - 1); bool selected = (this->selected_result == item->result) && item->Selectable(); if (selected) GfxFillRect(full, PC_BLACK); diff --git a/src/dropdown_common_type.h b/src/dropdown_common_type.h index 80362f6712..e29aa16163 100644 --- a/src/dropdown_common_type.h +++ b/src/dropdown_common_type.h @@ -41,8 +41,8 @@ public: PixelColour c2 = GetColourGradient(bg_colour, SHADE_LIGHTEST); int mid = CentreBounds(full.top, full.bottom, 0); - GfxFillRect(full.left, mid - WidgetDimensions::scaled.bevel.bottom, full.right, mid - 1, c1); - GfxFillRect(full.left, mid, full.right, mid + WidgetDimensions::scaled.bevel.top - 1, c2); + GfxFillRect(full.WithY(mid - WidgetDimensions::scaled.bevel.bottom, mid - 1), c1); + GfxFillRect(full.WithY(mid, mid + WidgetDimensions::scaled.bevel.top - 1), c2); } }; diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 182ac7229f..ed5d0b2ab1 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -209,7 +209,7 @@ public: /* Note: NewGRF supplied error message often do not start with a colour code, so default to white. */ Rect top_section = r.WithHeight(this->height_summary + extra, false); Rect bottom_section = r.WithHeight(this->height_extra + extra, true); - Rect middle_section = { top_section.left, top_section.bottom, top_section.right, bottom_section.top }; + Rect middle_section = top_section.WithY(top_section.bottom, bottom_section.top); DrawStringMultiLineWithClipping(top_section, this->summary_msg.GetDecodedString(), TC_WHITE, SA_CENTER); DrawStringMultiLineWithClipping(middle_section, this->detailed_msg.GetDecodedString(), TC_WHITE, SA_CENTER); DrawStringMultiLineWithClipping(bottom_section, this->extra_msg.GetDecodedString(), TC_WHITE, SA_CENTER); diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index 10e05908eb..6c2dfb8b90 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -527,9 +527,9 @@ public: const FiosItem *item = *it; if (item == this->selected) { - GfxFillRect(br.left, tr.top, br.right, tr.bottom, PC_DARK_BLUE); + GfxFillRect(br.WithY(tr), PC_DARK_BLUE); } else if (item == this->highlighted) { - GfxFillRect(br.left, tr.top, br.right, tr.bottom, PC_VERY_DARK_BLUE); + GfxFillRect(br.WithY(tr), PC_VERY_DARK_BLUE); } DrawString(tr, item->title.GetDecodedString(), _fios_colours[item->type.detailed]); tr = tr.Translate(0, this->resize.step_height); diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 719f5a5dfa..55b2b8b867 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -833,7 +833,7 @@ Rect QueryString::GetBoundingRect(const Window *w, WidgetID wid, size_t from, si const auto p1 = GetCharPosInString(tb->GetText(), from, FS_NORMAL); const auto p2 = from != to ? GetCharPosInString(tb->GetText(), to, FS_NORMAL) : p1; - return { Clamp(r.left + p1.left, r.left, r.right), r.top, Clamp(r.left + p2.right, r.left, r.right), r.bottom }; + return r.WithX(Clamp(r.left + p1.left, r.left, r.right), Clamp(r.left + p2.right, r.left, r.right)); } /** diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 13600aedba..a184511f98 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -673,7 +673,7 @@ public: case ContentInfo::State::DoesNotExist: sprite = SPR_BLOT; pal = PALETTE_TO_RED; break; default: NOT_REACHED(); } - DrawSpriteIgnorePadding(sprite, pal, {checkbox.left, mr.top, checkbox.right, mr.bottom}, SA_CENTER); + DrawSpriteIgnorePadding(sprite, pal, checkbox.WithY(mr), SA_CENTER); StringID str = STR_CONTENT_TYPE_BASE_GRAPHICS + ci->type - CONTENT_TYPE_BASE_GRAPHICS; DrawString(type.left, type.right, mr.top + text_y_offset, str, TC_BLACK, SA_HOR_CENTER); diff --git a/src/train_gui.cpp b/src/train_gui.cpp index fc4262c89f..cfa018c0ec 100644 --- a/src/train_gui.cpp +++ b/src/train_gui.cpp @@ -401,7 +401,7 @@ void DrawTrainDetails(const Train *v, const Rect &r, int vscroll_pos, uint16_t v if (vscroll_pos <= 0 && vscroll_pos > -vscroll_cap) { int py = r.top - line_height * vscroll_pos + text_y_offset; if (i > 0 || separate_sprite_row) { - if (vscroll_pos != 0) GfxFillRect(r.left, py - WidgetDimensions::scaled.matrix.top - 1, r.right, py - WidgetDimensions::scaled.matrix.top, GetColourGradient(COLOUR_GREY, SHADE_LIGHT)); + if (vscroll_pos != 0) GfxFillRect(r.WithY(py - WidgetDimensions::scaled.matrix.top - 1, py - WidgetDimensions::scaled.matrix.top), GetColourGradient(COLOUR_GREY, SHADE_LIGHT)); } switch (det_tab) { case TDW_TAB_CARGO: diff --git a/src/transparency_gui.cpp b/src/transparency_gui.cpp index 0c768f59ff..8574075b1e 100644 --- a/src/transparency_gui.cpp +++ b/src/transparency_gui.cpp @@ -62,7 +62,7 @@ public: if (i == WID_TT_TEXT) continue; // Loading and cost/income text has no invisibility button. const Rect wr = this->GetWidget(i)->GetCurrentRect().Shrink(WidgetDimensions::scaled.fullbevel); - DrawFrameRect(wr.left, fr.top, wr.right, fr.bottom, COLOUR_PALE_GREEN, + DrawFrameRect(wr.WithY(fr), COLOUR_PALE_GREEN, HasBit(_invisibility_opt, i - WID_TT_BEGIN) ? FrameFlag::Lowered : FrameFlags{}); } break; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index fbd7a69b54..0ea6f71e44 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -1042,7 +1042,7 @@ struct RefitWindow : public Window { switch (widget) { case WID_VR_VEHICLE_PANEL_DISPLAY: { Vehicle *v = Vehicle::Get(this->window_number); - DrawVehicleImage(v, {this->sprite_left, r.top, this->sprite_right, r.bottom}, + DrawVehicleImage(v, r.WithX(this->sprite_left, this->sprite_right), VehicleID::Invalid(), EIT_IN_DETAILS, this->hscroll != nullptr ? this->hscroll->GetPosition() : 0); /* Highlight selected vehicles. */ @@ -1791,7 +1791,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int DrawSprite(SPR_WARNING_SIGN, PAL_NONE, vehicle_button_x, ir.top + GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + profit.height); } - DrawVehicleImage(v, {image_left, ir.top, image_right, ir.bottom}, selected_vehicle, EIT_IN_LIST, 0); + DrawVehicleImage(v, ir.WithX(image_left, image_right), selected_vehicle, EIT_IN_LIST, 0); if (_settings_client.gui.show_cargo_in_vehicle_lists) { /* Get the cargoes the vehicle can carry */ @@ -1843,7 +1843,7 @@ void BaseVehicleListWindow::DrawVehicleListItems(VehicleID selected_vehicle, int for (int i = 0; i < static_cast(vehgroup.NumVehicles()); ++i) { if (image_left + WidgetDimensions::scaled.hsep_wide * i >= image_right) break; // Break if there is no more space to draw any more vehicles anyway. - DrawVehicleImage(vehgroup.vehicles_begin[i], {image_left + WidgetDimensions::scaled.hsep_wide * i, ir.top, image_right, ir.bottom}, selected_vehicle, EIT_IN_LIST, 0); + DrawVehicleImage(vehgroup.vehicles_begin[i], ir.WithX(image_left + WidgetDimensions::scaled.hsep_wide * i, image_right), selected_vehicle, EIT_IN_LIST, 0); } if (show_orderlist) DrawSmallOrderList(vehgroup.vehicles_begin[0]->orders, olr.left, olr.right, ir.top + GetCharacterHeight(FS_SMALL), this->order_arrow_width); diff --git a/src/widget.cpp b/src/widget.cpp index 1248d0fb16..cf89f126d7 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -510,8 +510,9 @@ static inline void DrawVerticalScrollbar(const Rect &r, Colours colour, bool up_ PixelColour c2 = GetColourGradient(colour, SHADE_LIGHTEST); /* draw "shaded" background */ - GfxFillRect(r.left, r.top + height, r.right, r.bottom - height, c2); - GfxFillRect(r.left, r.top + height, r.right, r.bottom - height, c1, FILLRECT_CHECKER); + Rect bg = r.Shrink(0, height); + GfxFillRect(bg, c2); + GfxFillRect(bg, c1, FILLRECT_CHECKER); /* track positions. These fractions are based on original 1x dimensions, but scale better. */ int left = r.left + r.Width() * 3 / 11; /* left track is positioned 3/11ths from the left */ @@ -520,10 +521,10 @@ static inline void DrawVerticalScrollbar(const Rect &r, Colours colour, bool up_ const uint8_t br = WidgetDimensions::scaled.bevel.right; /* draw shaded lines */ - GfxFillRect(left - bl, r.top + height, left - 1, r.bottom - height, c1); - GfxFillRect(left, r.top + height, left + br - 1, r.bottom - height, c2); - GfxFillRect(right - bl, r.top + height, right - 1, r.bottom - height, c1); - GfxFillRect(right, r.top + height, right + br - 1, r.bottom - height, c2); + GfxFillRect(bg.WithX(left - bl, left - 1), c1); + GfxFillRect(bg.WithX(left, left + br - 1), c2); + GfxFillRect(bg.WithX(right - bl, right - 1), c1); + GfxFillRect(bg.WithX(right, right + br - 1), c2); auto [top, bottom] = HandleScrollbarHittest(scrollbar, r.top, r.bottom, false); DrawFrameRect(r.left, top, r.right, bottom, colour, bar_dragged ? FrameFlag::Lowered : FrameFlags{}); @@ -549,8 +550,9 @@ static inline void DrawHorizontalScrollbar(const Rect &r, Colours colour, bool l PixelColour c2 = GetColourGradient(colour, SHADE_LIGHTEST); /* draw "shaded" background */ - GfxFillRect(r.left + width, r.top, r.right - width, r.bottom, c2); - GfxFillRect(r.left + width, r.top, r.right - width, r.bottom, c1, FILLRECT_CHECKER); + Rect bg = r.Shrink(width, 0); + GfxFillRect(bg, c2); + GfxFillRect(bg, c1, FILLRECT_CHECKER); /* track positions. These fractions are based on original 1x dimensions, but scale better. */ int top = r.top + r.Height() * 3 / 11; /* top track is positioned 3/11ths from the top */ @@ -559,10 +561,10 @@ static inline void DrawHorizontalScrollbar(const Rect &r, Colours colour, bool l const uint8_t bb = WidgetDimensions::scaled.bevel.bottom; /* draw shaded lines */ - GfxFillRect(r.left + width, top - bt, r.right - width, top - 1, c1); - GfxFillRect(r.left + width, top, r.right - width, top + bb - 1, c2); - GfxFillRect(r.left + width, bottom - bt, r.right - width, bottom - 1, c1); - GfxFillRect(r.left + width, bottom, r.right - width, bottom + bb - 1, c2); + GfxFillRect(bg.WithY(top - bt, top - 1), c1); + GfxFillRect(bg.WithY(top, top + bb - 1), c2); + GfxFillRect(bg.WithY(bottom - bt, bottom - 1), c1); + GfxFillRect(bg.WithY(bottom, bottom + bb - 1), c2); /* draw actual scrollbar */ auto [left, right] = HandleScrollbarHittest(scrollbar, r.left, r.right, true);