From 1f1378c129207fe1086e8668c958b18322a3f5d1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 17 Oct 2022 19:25:33 +0100 Subject: [PATCH] Change: Align picker previews to button centre. --- src/dock_gui.cpp | 34 ++++++++++++++++++++++------------ src/rail_gui.cpp | 45 +++++++++++++++++++++++++++++++-------------- src/road_gui.cpp | 29 +++++++++++++++++++++++------ 3 files changed, 76 insertions(+), 32 deletions(-) diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index 87a49969ba..b0fc7f54ff 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -531,25 +531,35 @@ public: switch (widget) { case WID_BDD_X: case WID_BDD_Y: - size->width = ScaleGUITrad(96) + 2; - size->height = ScaleGUITrad(64) + 2; + size->width = ScaleGUITrad(96) + WD_BEVEL_LEFT + WD_BEVEL_RIGHT; + size->height = ScaleGUITrad(64) + WD_BEVEL_TOP + WD_BEVEL_BOTTOM; break; } } - void OnPaint() override + void DrawWidget(const Rect &r, int widget) const override { - this->DrawWidgets(); + DrawPixelInfo tmp_dpi; - int x1 = ScaleGUITrad(63) + 1; - int x2 = ScaleGUITrad(31) + 1; - int y1 = ScaleGUITrad(17) + 1; - int y2 = ScaleGUITrad(33) + 1; + switch (widget) { + case WID_BDD_X: + case WID_BDD_Y: { + Axis axis = widget == WID_BDD_X ? AXIS_X : AXIS_Y; - DrawShipDepotSprite(this->GetWidget(WID_BDD_X)->pos_x + x1, this->GetWidget(WID_BDD_X)->pos_y + y1, AXIS_X, DEPOT_PART_NORTH); - DrawShipDepotSprite(this->GetWidget(WID_BDD_X)->pos_x + x2, this->GetWidget(WID_BDD_X)->pos_y + y2, AXIS_X, DEPOT_PART_SOUTH); - DrawShipDepotSprite(this->GetWidget(WID_BDD_Y)->pos_x + x2, this->GetWidget(WID_BDD_Y)->pos_y + y1, AXIS_Y, DEPOT_PART_NORTH); - DrawShipDepotSprite(this->GetWidget(WID_BDD_Y)->pos_x + x1, this->GetWidget(WID_BDD_Y)->pos_y + y2, AXIS_Y, DEPOT_PART_SOUTH); + if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + DrawPixelInfo *old_dpi = _cur_dpi; + _cur_dpi = &tmp_dpi; + int x = (r.Width() - ScaleGUITrad(96)) / 2; + int y = (r.Height() - ScaleGUITrad(64)) / 2; + int x1 = ScaleGUITrad(63); + int x2 = ScaleGUITrad(31); + DrawShipDepotSprite(x + (axis == AXIS_X ? x1 : x2), y + ScaleGUITrad(17), axis, DEPOT_PART_NORTH); + DrawShipDepotSprite(x + (axis == AXIS_X ? x2 : x1), y + ScaleGUITrad(33), axis, DEPOT_PART_SOUTH); + _cur_dpi = old_dpi; + } + break; + } + } } void OnClick(Point pt, int widget, int click_count) override diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index b0003c29a2..a41366fb09 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1232,8 +1232,8 @@ public: case WID_BRAS_PLATFORM_DIR_X: case WID_BRAS_PLATFORM_DIR_Y: case WID_BRAS_IMAGE: - size->width = ScaleGUITrad(64) + 2; - size->height = ScaleGUITrad(58) + 2; + size->width = ScaleGUITrad(64) + WD_BEVEL_LEFT + WD_BEVEL_RIGHT; + size->height = ScaleGUITrad(58) + WD_BEVEL_TOP + WD_BEVEL_BOTTOM; break; case WID_BRAS_COVERAGE_TEXTS: @@ -1257,8 +1257,8 @@ public: if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; - int x = ScaleGUITrad(31) + 1; - int y = r.bottom - r.top - ScaleGUITrad(31); + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(58)) / 2 - ScaleGUITrad(31); if (!DrawStationTile(x, y, _cur_railtype, AXIS_X, _railstation.station_class, _railstation.station_type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2); } @@ -1271,8 +1271,8 @@ public: if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; - int x = ScaleGUITrad(31) + 1; - int y = r.bottom - r.top - ScaleGUITrad(31); + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(58)) / 2 - ScaleGUITrad(31); if (!DrawStationTile(x, y, _cur_railtype, AXIS_Y, _railstation.station_class, _railstation.station_type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 3); } @@ -1308,8 +1308,8 @@ public: if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { DrawPixelInfo *old_dpi = _cur_dpi; _cur_dpi = &tmp_dpi; - int x = ScaleGUITrad(31) + 1; - int y = r.bottom - r.top - ScaleGUITrad(31); + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(58)) / 2 - ScaleGUITrad(31); if (!DrawStationTile(x, y, _cur_railtype, _railstation.orientation, _railstation.station_class, type)) { StationPickerDrawSprite(x, y, STATION_RAIL, _cur_railtype, INVALID_ROADTYPE, 2 + _railstation.orientation); } @@ -1929,15 +1929,23 @@ struct BuildRailDepotWindow : public PickerWindowBase { { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; - size->width = ScaleGUITrad(64) + 2; - size->height = ScaleGUITrad(48) + 2; + size->width = ScaleGUITrad(64) + WD_BEVEL_LEFT + WD_BEVEL_RIGHT; + size->height = ScaleGUITrad(48) + WD_BEVEL_TOP + WD_BEVEL_BOTTOM; } void DrawWidget(const Rect &r, int widget) const override { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; - DrawTrainDepotSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), widget - WID_BRAD_DEPOT_NE + DIAGDIR_NE, _cur_railtype); + DrawPixelInfo tmp_dpi; + if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + DrawPixelInfo *old_dpi = _cur_dpi; + _cur_dpi = &tmp_dpi; + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(48)) / 2 - ScaleGUITrad(31); + DrawTrainDepotSprite(x, y, widget - WID_BRAD_DEPOT_NE + DIAGDIR_NE, _cur_railtype); + _cur_dpi = old_dpi; + } } void OnClick(Point pt, int widget, int click_count) override @@ -2028,8 +2036,8 @@ struct BuildRailWaypointWindow : PickerWindowBase { break; case WID_BRW_WAYPOINT: - size->width = ScaleGUITrad(64) + 2; - size->height = ScaleGUITrad(58) + 2; + size->width = ScaleGUITrad(64) + WD_BEVEL_LEFT + WD_BEVEL_RIGHT; + size->height = ScaleGUITrad(58) + WD_BEVEL_TOP + WD_BEVEL_BOTTOM; break; } } @@ -2040,7 +2048,16 @@ struct BuildRailWaypointWindow : PickerWindowBase { case WID_BRW_WAYPOINT: { byte type = GB(widget, 16, 16); const StationSpec *statspec = StationClass::Get(STAT_CLASS_WAYP)->GetSpec(type); - DrawWaypointSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), type, _cur_railtype); + + DrawPixelInfo tmp_dpi; + if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + DrawPixelInfo *old_dpi = _cur_dpi; + _cur_dpi = &tmp_dpi; + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(58)) / 2 - ScaleGUITrad(31); + DrawWaypointSprite(x, y, type, _cur_railtype); + _cur_dpi = old_dpi; + } if (!IsStationAvailable(statspec)) { GfxFillRect(r.Shrink(WD_BEVEL_LEFT, WD_BEVEL_TOP, WD_BEVEL_RIGHT, WD_BEVEL_BOTTOM), PC_BLACK, FILLRECT_CHECKER); diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 86af0fb8c6..8fdb4dd592 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -974,15 +974,23 @@ struct BuildRoadDepotWindow : public PickerWindowBase { { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; - size->width = ScaleGUITrad(64) + 2; - size->height = ScaleGUITrad(48) + 2; + size->width = ScaleGUITrad(64) + WD_BEVEL_LEFT + WD_BEVEL_RIGHT; + size->height = ScaleGUITrad(48) + WD_BEVEL_TOP + WD_BEVEL_BOTTOM; } void DrawWidget(const Rect &r, int widget) const override { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; - DrawRoadDepotSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), (DiagDirection)(widget - WID_BROD_DEPOT_NE + DIAGDIR_NE), _cur_roadtype); + DrawPixelInfo tmp_dpi; + if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + DrawPixelInfo *old_dpi = _cur_dpi; + _cur_dpi = &tmp_dpi; + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(48)) / 2 - ScaleGUITrad(31); + DrawRoadDepotSprite(x, y, (DiagDirection)(widget - WID_BROD_DEPOT_NE + DIAGDIR_NE), _cur_roadtype); + _cur_dpi = old_dpi; + } } void OnClick(Point pt, int widget, int click_count) override @@ -1099,8 +1107,8 @@ struct BuildRoadStationWindow : public PickerWindowBase { { if (!IsInsideMM(widget, WID_BROS_STATION_NE, WID_BROS_STATION_Y + 1)) return; - size->width = ScaleGUITrad(64) + 2; - size->height = ScaleGUITrad(48) + 2; + size->width = ScaleGUITrad(64) + WD_BEVEL_LEFT + WD_BEVEL_RIGHT; + size->height = ScaleGUITrad(48) + WD_BEVEL_TOP + WD_BEVEL_BOTTOM; } void DrawWidget(const Rect &r, int widget) const override @@ -1108,7 +1116,16 @@ struct BuildRoadStationWindow : public PickerWindowBase { if (!IsInsideMM(widget, WID_BROS_STATION_NE, WID_BROS_STATION_Y + 1)) return; StationType st = (this->window_class == WC_BUS_STATION) ? STATION_BUS : STATION_TRUCK; - StationPickerDrawSprite(r.left + 1 + ScaleGUITrad(31), r.bottom - ScaleGUITrad(31), st, INVALID_RAILTYPE, _cur_roadtype, widget - WID_BROS_STATION_NE); + + DrawPixelInfo tmp_dpi; + if (FillDrawPixelInfo(&tmp_dpi, r.left, r.top, r.Width(), r.Height())) { + DrawPixelInfo *old_dpi = _cur_dpi; + _cur_dpi = &tmp_dpi; + int x = (r.Width() - ScaleGUITrad(64)) / 2 + ScaleGUITrad(31); + int y = (r.Height() + ScaleGUITrad(48)) / 2 - ScaleGUITrad(31); + StationPickerDrawSprite(x, y, st, INVALID_RAILTYPE, _cur_roadtype, widget - WID_BROS_STATION_NE); + _cur_dpi = old_dpi; + } } void OnClick(Point pt, int widget, int click_count) override