diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 78251ecddd..8a1efbae41 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -2354,9 +2354,7 @@ DropDownList GetRailTypeDropDownList(bool for_replacement, bool all_option) list.push_back(std::make_unique(rti->strings.replace_text, rt, !HasBit(avail_railtypes, rt))); } else { StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - auto iconitem = std::make_unique(rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt)); - iconitem->SetDimension(d); - list.push_back(std::move(iconitem)); + list.push_back(std::make_unique(d, rti->gui_sprites.build_x_rail, PAL_NONE, str, rt, !HasBit(avail_railtypes, rt))); } } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 7e7bd81b91..0878c5135e 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1828,9 +1828,7 @@ DropDownList GetRoadTypeDropDownList(RoadTramTypes rtts, bool for_replacement, b list.push_back(std::make_unique(rti->strings.replace_text, rt, !HasBit(avail_roadtypes, rt))); } else { StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - auto iconitem = std::make_unique(rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt)); - iconitem->SetDimension(d); - list.push_back(std::move(iconitem)); + list.push_back(std::make_unique(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); } } @@ -1869,9 +1867,7 @@ DropDownList GetScenRoadTypeDropDownList(RoadTramTypes rtts) SetDParam(0, rti->strings.menu_text); SetDParam(1, rti->max_speed / 2); StringID str = rti->max_speed > 0 ? STR_TOOLBAR_RAILTYPE_VELOCITY : STR_JUST_STRING; - auto item = std::make_unique(rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt)); - item->SetDimension(d); - list.push_back(std::move(item)); + list.push_back(std::make_unique(d, rti->gui_sprites.build_x_road, PAL_NONE, str, rt, !HasBit(avail_roadtypes, rt))); } if (list.empty()) { diff --git a/src/widgets/dropdown_type.h b/src/widgets/dropdown_type.h index 5f8de71ea0..6a60179aac 100644 --- a/src/widgets/dropdown_type.h +++ b/src/widgets/dropdown_type.h @@ -149,6 +149,12 @@ public: this->dbounds = this->dsprite; } + template + explicit DropDownIcon(const Dimension &dim, SpriteID sprite, PaletteID palette, Args&&... args) : TBase(std::forward(args)...), sprite(sprite), palette(palette), dbounds(dim) + { + this->dsprite = GetSpriteSize(this->sprite); + } + uint Height() const override { return std::max(this->dbounds.height, this->TBase::Height()); } uint Width() const override { return this->dbounds.width + WidgetDimensions::scaled.hsep_normal + this->TBase::Width(); } @@ -159,15 +165,6 @@ public: DrawSprite(this->sprite, this->palette, CenterBounds(ir.left, ir.right, this->dsprite.width), CenterBounds(r.top, r.bottom, this->dsprite.height)); this->TBase::Draw(full, r.Indent(this->dbounds.width + WidgetDimensions::scaled.hsep_normal, rtl), sel, bg_colour); } - - /** - * Override bounding box dimensions of sprite, to allow multiple options to have consistent spacing. - * @param dim New bounding box to assign. - */ - void SetDimension(const Dimension &dim) - { - this->dbounds = dim; - } }; /**