From 06b78a729994cd5dd8aef093378be975798fd266 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 11 Apr 2023 18:45:42 +0100 Subject: [PATCH] Fix: Don't double-pad existing size when adding widget padding. UpdateWidgetSize's size parameter already includes padding. --- src/genworld_gui.cpp | 39 +++++++++++++++++++++------------------ src/object_gui.cpp | 3 +-- src/vehicle_gui.cpp | 8 +++++--- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 6bb11658b7..a9dbb63b4c 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -591,62 +591,63 @@ struct GenerateLandscapeWindow : public Window { void UpdateWidgetSize(int widget, Dimension *size, const Dimension &padding, Dimension *fill, Dimension *resize) override { + Dimension d{0, (uint)FONT_HEIGHT_NORMAL}; const StringID *strs = nullptr; switch (widget) { case WID_GL_HEIGHTMAP_HEIGHT_TEXT: SetDParam(0, MAX_TILE_HEIGHT); - *size = GetStringBoundingBox(STR_JUST_INT); + d = GetStringBoundingBox(STR_JUST_INT); break; case WID_GL_START_DATE_TEXT: SetDParam(0, ConvertYMDToDate(MAX_YEAR, 0, 1)); - *size = maxdim(*size, GetStringBoundingBox(STR_BLACK_DATE_LONG)); + d = GetStringBoundingBox(STR_BLACK_DATE_LONG); break; case WID_GL_MAPSIZE_X_PULLDOWN: case WID_GL_MAPSIZE_Y_PULLDOWN: SetDParamMaxValue(0, MAX_MAP_SIZE); - *size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT)); + d = GetStringBoundingBox(STR_JUST_INT); break; case WID_GL_SNOW_COVERAGE_TEXT: SetDParamMaxValue(0, MAX_TILE_HEIGHT); - *size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_SNOW_COVERAGE_TEXT)); + d = GetStringBoundingBox(STR_MAPGEN_SNOW_COVERAGE_TEXT); break; case WID_GL_DESERT_COVERAGE_TEXT: SetDParamMaxValue(0, MAX_TILE_HEIGHT); - *size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_DESERT_COVERAGE_TEXT)); + d = GetStringBoundingBox(STR_MAPGEN_DESERT_COVERAGE_TEXT); break; case WID_GL_HEIGHTMAP_SIZE_TEXT: SetDParam(0, this->x); SetDParam(1, this->y); - *size = maxdim(*size, GetStringBoundingBox(STR_MAPGEN_HEIGHTMAP_SIZE)); + d = GetStringBoundingBox(STR_MAPGEN_HEIGHTMAP_SIZE); break; case WID_GL_TOWN_PULLDOWN: strs = _num_towns; SetDParamMaxValue(0, CUSTOM_TOWN_MAX_NUMBER); - *size = maxdim(*size, GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER)); + d = GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER); break; case WID_GL_INDUSTRY_PULLDOWN: strs = _num_inds; SetDParamMaxValue(0, IndustryPool::MAX_SIZE); - *size = maxdim(*size, GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER)); + d = GetStringBoundingBox(STR_NUM_CUSTOM_NUMBER); break; case WID_GL_TERRAIN_PULLDOWN: strs = _elevations; SetDParamMaxValue(0, MAX_MAP_HEIGHT_LIMIT); - *size = maxdim(*size, GetStringBoundingBox(STR_TERRAIN_TYPE_CUSTOM_VALUE)); + d = GetStringBoundingBox(STR_TERRAIN_TYPE_CUSTOM_VALUE); break; case WID_GL_WATER_PULLDOWN: strs = _sea_lakes; SetDParamMaxValue(0, CUSTOM_SEA_LEVEL_MAX_PERCENTAGE); - *size = maxdim(*size, GetStringBoundingBox(STR_SEA_LEVEL_CUSTOM_PERCENTAGE)); + d = GetStringBoundingBox(STR_SEA_LEVEL_CUSTOM_PERCENTAGE); break; case WID_GL_RIVER_PULLDOWN: strs = _rivers; break; @@ -654,14 +655,14 @@ struct GenerateLandscapeWindow : public Window { case WID_GL_VARIETY_PULLDOWN: strs = _variety; break; case WID_GL_HEIGHTMAP_ROTATION_PULLDOWN: strs = _rotation; break; case WID_GL_BORDERS_RANDOM: - *size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOMIZE), GetStringBoundingBox(STR_MAPGEN_BORDER_MANUAL)); + d = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOMIZE), GetStringBoundingBox(STR_MAPGEN_BORDER_MANUAL)); break; case WID_GL_WATER_NE: case WID_GL_WATER_NW: case WID_GL_WATER_SE: case WID_GL_WATER_SW: - *size = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOM), maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_WATER), GetStringBoundingBox(STR_MAPGEN_BORDER_FREEFORM))); + d = maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_RANDOM), maxdim(GetStringBoundingBox(STR_MAPGEN_BORDER_WATER), GetStringBoundingBox(STR_MAPGEN_BORDER_FREEFORM))); break; case WID_GL_HEIGHTMAP_NAME_TEXT: @@ -673,11 +674,12 @@ struct GenerateLandscapeWindow : public Window { } if (strs != nullptr) { while (*strs != INVALID_STRING_ID) { - *size = maxdim(*size, GetStringBoundingBox(*strs++)); + d = maxdim(d, GetStringBoundingBox(*strs++)); } } - size->width += padding.width; - size->height = std::max(size->height, (uint)(FONT_HEIGHT_NORMAL + padding.height)); + d.width += padding.width; + d.height += padding.height; + *size = maxdim(*size, d); } void OnClick(Point pt, int widget, int click_count) override @@ -1158,9 +1160,10 @@ struct CreateScenarioWindow : public Window default: return; } - *size = maxdim(*size, GetStringBoundingBox(str)); - size->width += padding.width; - size->height += padding.height; + Dimension d = GetStringBoundingBox(str); + d.width += padding.width; + d.height += padding.height; + *size = maxdim(*size, d); } void OnClick(Point pt, int widget, int click_count) override diff --git a/src/object_gui.cpp b/src/object_gui.cpp index ea80d72d8a..db4f14f144 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -242,9 +242,8 @@ public: for (auto object_class_id : this->object_classes) { ObjectClass *objclass = ObjectClass::Get(object_class_id); if (objclass->GetUISpecCount() == 0) continue; - size->width = std::max(size->width, GetStringBoundingBox(objclass->name).width); + size->width = std::max(size->width, GetStringBoundingBox(objclass->name).width + padding.width); } - size->width += padding.width; this->line_height = FONT_HEIGHT_NORMAL + padding.height; resize->height = this->line_height; size->height = 5 * this->line_height; diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 21cdc20359..5b2195f2c6 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2413,12 +2413,14 @@ struct VehicleDetailsWindow : Window { break; case WID_VD_SERVICE_INTERVAL_DROPDOWN: { + Dimension d{0, 0}; StringID *strs = _service_interval_dropdown; while (*strs != INVALID_STRING_ID) { - *size = maxdim(*size, GetStringBoundingBox(*strs++)); + d = maxdim(d, GetStringBoundingBox(*strs++)); } - size->width += padding.width; - size->height = FONT_HEIGHT_NORMAL + padding.height; + d.width += padding.width; + d.height += padding.height; + *size = maxdim(*size, d); break; }