From 830c9e2de84ee6edfa5cacbd8ef8777de1156ed8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 5 Apr 2024 19:31:08 +0100 Subject: [PATCH 01/26] Codechange: Simplify iteration of framerate performance elements. --- src/framerate_gui.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index 7e32bd611b..dc5698791d 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -817,8 +817,8 @@ struct FrametimeGraphWindow : Window { { TIMESTAMP_PRECISION * 3, 4 }, { TIMESTAMP_PRECISION * 1, 2 }, }; - for (const ScaleDef *sc = hscales; sc < hscales + lengthof(hscales); sc++) { - if (range < sc->range) this->horizontal_scale = sc->scale; + for (const auto &sc : hscales) { + if (range < sc.range) this->horizontal_scale = sc.scale; } } @@ -836,8 +836,8 @@ struct FrametimeGraphWindow : Window { TIMESTAMP_PRECISION / 50, TIMESTAMP_PRECISION / 200, }; - for (const TimingMeasurement *sc = vscales; sc < vscales + lengthof(vscales); sc++) { - if (range < *sc) this->vertical_scale = (int)*sc; + for (const auto &sc : vscales) { + if (range < sc) this->vertical_scale = (int)sc; } } @@ -1070,11 +1070,11 @@ void ConPrintFramerate() bool printed_anything = false; - for (const PerformanceElement *e = rate_elements; e < rate_elements + lengthof(rate_elements); e++) { - auto &pf = _pf_data[*e]; + for (const auto &e : rate_elements) { + auto &pf = _pf_data[e]; if (pf.num_valid == 0) continue; IConsolePrint(TC_GREEN, "{} rate: {:.2f}fps (expected: {:.2f}fps)", - MEASUREMENT_NAMES[*e], + MEASUREMENT_NAMES[e], pf.GetRate(), pf.expected_rate); printed_anything = true; From b90520942106346c9b53ad88304c68e8dacbc303 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 19:29:41 +0100 Subject: [PATCH 02/26] Fix: Viewport signs assume small font is smaller than normal font. (#12422) If the small font is set to a larger size than the normal font for some reason, viewport signs would be drawn incorrect as the area marked dirty only considered the normal size font. --- src/viewport.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 9c91b28833..98f40b2a42 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1314,7 +1314,7 @@ void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const Vie int right = left + dpi->width; int bottom = top + dpi->height; - int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, dpi->zoom); + int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, dpi->zoom); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, dpi->zoom); if (bottom < sign->top || @@ -1338,8 +1338,7 @@ void ViewportAddString(const DrawPixelInfo *dpi, ZoomLevel small_from, const Vie static Rect ExpandRectWithViewportSignMargins(Rect r, ZoomLevel zoom) { - /* Pessimistically always use normal font, but also assume small font is never larger in either dimension */ - const int fh = GetCharacterHeight(FS_NORMAL); + const int fh = std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL)); const int max_tw = _viewport_sign_maxwidth / 2 + 1; const int expand_y = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + fh + WidgetDimensions::scaled.fullbevel.bottom, zoom); const int expand_x = ScaleByZoom(WidgetDimensions::scaled.fullbevel.left + max_tw + WidgetDimensions::scaled.fullbevel.right, zoom); @@ -1490,12 +1489,16 @@ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const { Rect zoomlevels[ZOOM_LVL_END]; + /* We don't know which size will be drawn, so mark the largest area dirty. */ + const uint half_width = std::max(this->width_normal, this->width_small) / 2 + 1; + const uint height = WidgetDimensions::scaled.fullbevel.top + std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL)) + WidgetDimensions::scaled.fullbevel.bottom + 1; + for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { /* FIXME: This doesn't switch to width_small when appropriate. */ - zoomlevels[zoom].left = this->center - ScaleByZoom(this->width_normal / 2 + 1, zoom); + zoomlevels[zoom].left = this->center - ScaleByZoom(half_width, zoom); zoomlevels[zoom].top = this->top - ScaleByZoom(1, zoom); - zoomlevels[zoom].right = this->center + ScaleByZoom(this->width_normal / 2 + 1, zoom); - zoomlevels[zoom].bottom = this->top + ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom + 1, zoom); + zoomlevels[zoom].right = this->center + ScaleByZoom(half_width, zoom); + zoomlevels[zoom].bottom = this->top + ScaleByZoom(height, zoom); } for (const Window *w : Window::Iterate()) { @@ -1709,7 +1712,7 @@ static void ViewportDrawStrings(ZoomLevel zoom, const StringSpriteToDrawVector * int w = GB(ss.width, 0, 15); int x = UnScaleByZoom(ss.x, zoom); int y = UnScaleByZoom(ss.y, zoom); - int h = WidgetDimensions::scaled.fullbevel.top + (small ? GetCharacterHeight(FS_SMALL) : GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.fullbevel.bottom; + int h = WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom; if (ss.colour != INVALID_COLOUR) { if (IsTransparencySet(TO_SIGNS) && ss.string_id != STR_WHITE_SIGN) { @@ -2194,7 +2197,7 @@ static bool CheckClickOnViewportSign(const Viewport *vp, int x, int y, const Vie { bool small = (vp->zoom >= ZOOM_LVL_OUT_4X); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp->zoom); - int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + (small ? GetCharacterHeight(FS_SMALL) : GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.fullbevel.bottom, vp->zoom); + int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, vp->zoom); return y >= sign->top && y < sign->top + sign_height && x >= sign->center - sign_half_width && x < sign->center + sign_half_width; @@ -2296,7 +2299,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeStation(StationID id) item.top = st->sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, st->sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, st->sign.width_normal, st->sign.width_small}); return item; } @@ -2313,7 +2316,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeWaypoint(StationID id) item.top = st->sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, st->sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, st->sign.width_normal, st->sign.width_small}); return item; } @@ -2330,7 +2333,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeTown(TownID id) item.top = town->cache.sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, town->cache.sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, town->cache.sign.width_normal, town->cache.sign.width_small}); return item; } @@ -2347,7 +2350,7 @@ ViewportSignKdtreeItem ViewportSignKdtreeItem::MakeSign(SignID id) item.top = sign->sign.top; /* Assume the sign can be a candidate for drawing, so measure its width */ - _viewport_sign_maxwidth = std::max(_viewport_sign_maxwidth, sign->sign.width_normal); + _viewport_sign_maxwidth = std::max({_viewport_sign_maxwidth, sign->sign.width_normal, sign->sign.width_small}); return item; } From a4c2f0778a2d1bc34b123ca0c292b30b3317a3a1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 19:30:01 +0100 Subject: [PATCH 03/26] Codechange: Use range-for to iterate keycode-to-name lookups. (#12429) Replaces C-style looping. --- src/hotkeys.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp index 2260e456ea..50c25579da 100644 --- a/src/hotkeys.cpp +++ b/src/hotkeys.cpp @@ -26,12 +26,12 @@ static std::vector *_hotkey_lists = nullptr; /** String representation of a keycode */ struct KeycodeNames { - const char *name; ///< Name of the keycode + const std::string_view name; ///< Name of the keycode WindowKeyCodes keycode; ///< The keycode }; /** Array of non-standard keycodes that can be used in the hotkeys config file. */ -static const KeycodeNames _keycode_to_name[] = { +static const std::initializer_list _keycode_to_name = { {"SHIFT", WKC_SHIFT}, {"CTRL", WKC_CTRL}, {"ALT", WKC_ALT}, @@ -100,9 +100,9 @@ static uint16_t ParseCode(const char *start, const char *end) while (start < end && *start == ' ') start++; while (end > start && *end == ' ') end--; std::string_view str{start, (size_t)(end - start)}; - for (uint i = 0; i < lengthof(_keycode_to_name); i++) { - if (StrEqualsIgnoreCase(str, _keycode_to_name[i].name)) { - return _keycode_to_name[i].keycode; + for (const auto &kn : _keycode_to_name) { + if (StrEqualsIgnoreCase(str, kn.name)) { + return kn.keycode; } } if (end - start == 1) { @@ -193,9 +193,9 @@ static std::string KeycodeToString(uint16_t keycode) if (!str.empty()) str += "+"; keycode = keycode & ~WKC_SPECIAL_KEYS; - for (uint i = 0; i < lengthof(_keycode_to_name); i++) { - if (_keycode_to_name[i].keycode == keycode) { - str += _keycode_to_name[i].name; + for (const auto &kn : _keycode_to_name) { + if (kn.keycode == keycode) { + str += kn.name; return str; } } From fbdf26800b1efc63849d435d6b0498db1085420c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 19:30:23 +0100 Subject: [PATCH 04/26] Codechange: Use std::initializer_list and range-for for credits window. (#12431) Replaces C-style array, indexed looping, and char * strings. --- src/misc_gui.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 27a16d4452..182693b1a0 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -404,7 +404,7 @@ static WindowDesc _about_desc( std::begin(_nested_about_widgets), std::end(_nested_about_widgets) ); -static const char * const _credits[] = { +static const std::initializer_list _credits = { "Original design by Chris Sawyer", "Original graphics by Simon Foster", "", @@ -499,8 +499,8 @@ struct AboutWindow : public Window { d.height = this->line_height * num_visible_lines; d.width = 0; - for (uint i = 0; i < lengthof(_credits); i++) { - d.width = std::max(d.width, GetStringBoundingBox(_credits[i]).width); + for (const auto &str : _credits) { + d.width = std::max(d.width, GetStringBoundingBox(str).width); } *size = maxdim(*size, d); } @@ -512,9 +512,9 @@ struct AboutWindow : public Window { int y = this->text_position; /* Show all scrolling _credits */ - for (uint i = 0; i < lengthof(_credits); i++) { + for (const auto &str : _credits) { if (y >= r.top + 7 && y < r.bottom - this->line_height) { - DrawString(r.left, r.right, y, _credits[i], TC_BLACK, SA_LEFT | SA_FORCE); + DrawString(r.left, r.right, y, str, TC_BLACK, SA_LEFT | SA_FORCE); } y += this->line_height; } @@ -528,7 +528,7 @@ struct AboutWindow : public Window { IntervalTimer scroll_interval = {std::chrono::milliseconds(2100) / GetCharacterHeight(FS_NORMAL), [this](uint count) { this->text_position -= count; /* If the last text has scrolled start a new from the start */ - if (this->text_position < (int)(this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y - lengthof(_credits) * this->line_height)) { + if (this->text_position < (int)(this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y - std::size(_credits) * this->line_height)) { this->text_position = this->GetWidget(WID_A_SCROLLING_TEXT)->pos_y + this->GetWidget(WID_A_SCROLLING_TEXT)->current_y; } this->SetWidgetDirty(WID_A_SCROLLING_TEXT); From 34ba969c74458c18030ce1ac158821dd58a8242c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 21:16:02 +0100 Subject: [PATCH 05/26] Change: Display more useful information in sprite aligner than sprite ID. (#12439) Sprite IDs are not useful information given they change don't refer to anything outside the loaded game. Instead, include the filename and nfo line at minimum, and include action A or action 5 sprite replacement information if applicable. --- src/CMakeLists.txt | 1 + src/lang/english.txt | 6 +++- src/newgrf.cpp | 33 ++++++++---------- src/newgrf_act5.h | 31 +++++++++++++++++ src/newgrf_debug_gui.cpp | 75 +++++++++++++++++++++++++++++++++------- src/spritecache.cpp | 9 +++++ src/spritecache.h | 1 + 7 files changed, 123 insertions(+), 33 deletions(-) create mode 100644 src/newgrf_act5.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 597c4331f5..56cb816248 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -254,6 +254,7 @@ add_files( music_gui.cpp newgrf.cpp newgrf.h + newgrf_act5.h newgrf_airport.cpp newgrf_airport.h newgrf_airporttiles.cpp diff --git a/src/lang/english.txt b/src/lang/english.txt index 0142ed31d4..860915ac3c 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3488,7 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({RAW_STRING}) +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Aligning sprite: ({RAW_STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Aligning sprite: Action 0xA, {COMMA} ({RAW_STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Aligning sprite: Action 0x5, type {HEX}, {COMMA} ({RAW_STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the last sprite to the first STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite @@ -3497,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Previous STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceed to the previous normal sprite, skipping any pseudo/recolour/font sprites and wrapping around from the first sprite to the last STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representation of the currently selected sprite. The alignment is ignored when drawing this sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Move the sprite around, changing the X and Y offsets. Ctrl+Click to move the sprite eight units at a time +STR_SPRITE_ALIGNER_SPRITE :{RAW_STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Offset centred @@ -5833,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING1} STR_JUST_STRING2 :{STRING2} +STR_JUST_STRING4 :{STRING4} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{RAW_STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{RAW_STRING} diff --git a/src/newgrf.cpp b/src/newgrf.cpp index f3ba26801d..1203a19ef9 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -27,6 +27,7 @@ #include "newgrf_station.h" #include "industrytype.h" #include "industry_map.h" +#include "newgrf_act5.h" #include "newgrf_canal.h" #include "newgrf_townname.h" #include "newgrf_industries.h" @@ -6369,7 +6370,7 @@ static void FeatureNewName(ByteReader *buf) * @param name Used for error warnings. * @return The number of sprites that is going to be skipped. */ -static uint16_t SanitizeSpriteOffset(uint16_t &num, uint16_t offset, int max_sprites, const char *name) +static uint16_t SanitizeSpriteOffset(uint16_t &num, uint16_t offset, int max_sprites, const std::string_view name) { if (offset >= max_sprites) { @@ -6390,23 +6391,8 @@ static uint16_t SanitizeSpriteOffset(uint16_t &num, uint16_t offset, int max_spr } -/** The type of action 5 type. */ -enum Action5BlockType { - A5BLOCK_FIXED, ///< Only allow replacing a whole block of sprites. (TTDP compatible) - A5BLOCK_ALLOW_OFFSET, ///< Allow replacing any subset by specifiing an offset. - A5BLOCK_INVALID, ///< unknown/not-implemented type -}; -/** Information about a single action 5 type. */ -struct Action5Type { - Action5BlockType block_type; ///< How is this Action5 type processed? - SpriteID sprite_base; ///< Load the sprites starting from this sprite. - uint16_t min_sprites; ///< If the Action5 contains less sprites, the whole block will be ignored. - uint16_t max_sprites; ///< If the Action5 contains more sprites, only the first max_sprites sprites will be used. - const char *name; ///< Name for error messages. -}; - /** The information about action 5 types. */ -static const Action5Type _action5_types[] = { +static constexpr auto _action5_types = std::to_array({ /* Note: min_sprites should not be changed. Therefore these constants are directly here and not in sprites.h */ /* 0x00 */ { A5BLOCK_INVALID, 0, 0, 0, "Type 0x00" }, /* 0x01 */ { A5BLOCK_INVALID, 0, 0, 0, "Type 0x01" }, @@ -6433,7 +6419,16 @@ static const Action5Type _action5_types[] = { /* 0x16 */ { A5BLOCK_ALLOW_OFFSET, SPR_AIRPORT_PREVIEW_BASE, 1, SPR_AIRPORT_PREVIEW_COUNT, "Airport preview graphics" }, /* 0x17 */ { A5BLOCK_ALLOW_OFFSET, SPR_RAILTYPE_TUNNEL_BASE, 1, RAILTYPE_TUNNEL_BASE_COUNT, "Railtype tunnel base" }, /* 0x18 */ { A5BLOCK_ALLOW_OFFSET, SPR_PALETTE_BASE, 1, PALETTE_SPRITE_COUNT, "Palette" }, -}; +}); + +/** + * Get list of all action 5 types + * @return Read-only span of action 5 type information. + */ +std::span GetAction5Types() +{ + return _action5_types; +} /* Action 0x05 */ static void GraphicsNew(ByteReader *buf) @@ -6468,7 +6463,7 @@ static void GraphicsNew(ByteReader *buf) } /* Supported type? */ - if ((type >= lengthof(_action5_types)) || (_action5_types[type].block_type == A5BLOCK_INVALID)) { + if ((type >= std::size(_action5_types)) || (_action5_types[type].block_type == A5BLOCK_INVALID)) { GrfMsg(2, "GraphicsNew: Custom graphics (type 0x{:02X}) sprite block of length {} (unimplemented, ignoring)", type, num); _cur.skip_sprites = num; return; diff --git a/src/newgrf_act5.h b/src/newgrf_act5.h new file mode 100644 index 0000000000..f16872424f --- /dev/null +++ b/src/newgrf_act5.h @@ -0,0 +1,31 @@ +/* + * This file is part of OpenTTD. + * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2. + * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see . + */ + +/** @file newgrf_act5.h Information about NewGRF Action 5. */ + +#ifndef NEWGRF_ACT5_H +#define NEWGRF_ACT5_H + +/** The type of action 5 type. */ +enum Action5BlockType { + A5BLOCK_FIXED, ///< Only allow replacing a whole block of sprites. (TTDP compatible) + A5BLOCK_ALLOW_OFFSET, ///< Allow replacing any subset by specifiing an offset. + A5BLOCK_INVALID, ///< unknown/not-implemented type +}; + +/** Information about a single action 5 type. */ +struct Action5Type { + Action5BlockType block_type; ///< How is this Action5 type processed? + SpriteID sprite_base; ///< Load the sprites starting from this sprite. + uint16_t min_sprites; ///< If the Action5 contains less sprites, the whole block will be ignored. + uint16_t max_sprites; ///< If the Action5 contains more sprites, only the first max_sprites sprites will be used. + const std::string_view name; ///< Name for error messages. +}; + +std::span GetAction5Types(); + +#endif /* NEWGRF_ACT5_H */ diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index fe9447edc1..c1ed16261d 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "core/backup_type.hpp" +#include "core/geometry_func.hpp" #include "window_gui.h" #include "window_func.h" #include "random_access_file_type.h" @@ -28,6 +29,7 @@ #include "train.h" #include "roadveh.h" +#include "newgrf_act5.h" #include "newgrf_airport.h" #include "newgrf_airporttiles.h" #include "newgrf_debug.h" @@ -808,7 +810,6 @@ GrfSpecFeature GetGrfSpecFeature(VehicleType type) } - /**** Sprite Aligner ****/ /** Window used for aligning sprites. */ @@ -822,6 +823,7 @@ struct SpriteAlignerWindow : Window { static inline ZoomLevel zoom = ZOOM_LVL_END; static bool centre; static bool crosshair; + const Action5Type *act5_type = nullptr; ///< Sprite Area of current selected sprite. SpriteAlignerWindow(WindowDesc *desc, WindowNumber wno) : Window(desc) { @@ -829,6 +831,10 @@ struct SpriteAlignerWindow : Window { if (SpriteAlignerWindow::zoom == ZOOM_LVL_END) SpriteAlignerWindow::zoom = _gui_zoom; SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); + /* Oh yes, we assume there is at least one normal sprite! */ + while (GetSpriteType(this->current_sprite) != SpriteType::Normal) this->current_sprite++; + this->SelectAction5Type(); + this->CreateNestedTree(); this->vscroll = this->GetScrollbar(WID_SA_SCROLLBAR); this->vscroll->SetCount(_newgrf_debug_sprite_picker.sprites.size()); @@ -837,9 +843,6 @@ struct SpriteAlignerWindow : Window { this->SetWidgetLoweredState(WID_SA_CENTRE, SpriteAlignerWindow::centre); this->SetWidgetLoweredState(WID_SA_CROSSHAIR, SpriteAlignerWindow::crosshair); - /* Oh yes, we assume there is at least one normal sprite! */ - while (GetSpriteType(this->current_sprite) != SpriteType::Normal) this->current_sprite++; - this->InvalidateData(0, true); } @@ -848,8 +851,22 @@ struct SpriteAlignerWindow : Window { const Sprite *spr = GetSprite(this->current_sprite, SpriteType::Normal); switch (widget) { case WID_SA_CAPTION: - SetDParam(0, this->current_sprite); - SetDParamStr(1, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + if (this->act5_type != nullptr) { + SetDParam(0, STR_SPRITE_ALIGNER_CAPTION_ACTION5); + SetDParam(1, this->act5_type - GetAction5Types().data()); + SetDParam(2, this->current_sprite - this->act5_type->sprite_base); + SetDParamStr(3, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + SetDParam(4, GetSpriteLocalID(this->current_sprite)); + } else if (this->current_sprite < SPR_OPENTTD_BASE) { + SetDParam(0, STR_SPRITE_ALIGNER_CAPTION_ACTIONA); + SetDParam(1, this->current_sprite); + SetDParamStr(2, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + SetDParam(3, GetSpriteLocalID(this->current_sprite)); + } else { + SetDParam(0, STR_SPRITE_ALIGNER_CAPTION_NO_ACTION); + SetDParamStr(1, GetOriginFile(this->current_sprite)->GetSimplifiedFilename()); + SetDParam(2, GetSpriteLocalID(this->current_sprite)); + } break; case WID_SA_OFFSETS_ABS: @@ -883,13 +900,21 @@ struct SpriteAlignerWindow : Window { case WID_SA_SPRITE: size->height = ScaleGUITrad(200); break; - case WID_SA_LIST: - SetDParamMaxDigits(0, 6); - size->width = GetStringBoundingBox(STR_JUST_COMMA).width + padding.width; + + case WID_SA_LIST: { + Dimension d = {}; + for (const auto &spritefile : GetCachedSpriteFiles()) { + SetDParamStr(0, spritefile->GetSimplifiedFilename()); + SetDParamMaxDigits(1, 6); + d = maxdim(d, GetStringBoundingBox(STR_SPRITE_ALIGNER_SPRITE)); + } + size->width = d.width + padding.width; resize->height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->width = 1; + resize->width = 1; fill->height = resize->height; break; + } + default: break; } @@ -941,8 +966,15 @@ struct SpriteAlignerWindow : Window { Rect ir = r.Shrink(WidgetDimensions::scaled.matrix); auto [first, last] = this->vscroll->GetVisibleRangeIterators(list); for (auto it = first; it != last; ++it) { - SetDParam(0, *it); - DrawString(ir, STR_JUST_COMMA, *it == this->current_sprite ? TC_WHITE : TC_BLACK, SA_RIGHT | SA_FORCE); + const SpriteFile *file = GetOriginFile(*it); + if (file == nullptr) { + SetDParam(0, *it); + DrawString(ir, STR_JUST_COMMA, *it == this->current_sprite ? TC_WHITE : (TC_GREY | TC_NO_SHADE), SA_RIGHT | SA_FORCE); + } else { + SetDParamStr(0, file->GetSimplifiedFilename()); + SetDParam(1, GetSpriteLocalID(*it)); + DrawString(ir, STR_SPRITE_ALIGNER_SPRITE, *it == this->current_sprite ? TC_WHITE : TC_BLACK); + } ir.top += step_size; } break; @@ -957,6 +989,7 @@ struct SpriteAlignerWindow : Window { do { this->current_sprite = (this->current_sprite == 0 ? GetMaxSpriteID() : this->current_sprite) - 1; } while (GetSpriteType(this->current_sprite) != SpriteType::Normal); + this->SelectAction5Type(); this->SetDirty(); break; @@ -968,6 +1001,7 @@ struct SpriteAlignerWindow : Window { do { this->current_sprite = (this->current_sprite + 1) % GetMaxSpriteID(); } while (GetSpriteType(this->current_sprite) != SpriteType::Normal); + this->SelectAction5Type(); this->SetDirty(); break; @@ -983,6 +1017,7 @@ struct SpriteAlignerWindow : Window { SpriteID spr = *it; if (GetSpriteType(spr) == SpriteType::Normal) this->current_sprite = spr; } + this->SelectAction5Type(); this->SetDirty(); break; } @@ -1060,6 +1095,7 @@ struct SpriteAlignerWindow : Window { while (GetSpriteType(this->current_sprite) != SpriteType::Normal) { this->current_sprite = (this->current_sprite + 1) % GetMaxSpriteID(); } + this->SelectAction5Type(); this->SetDirty(); } @@ -1088,6 +1124,19 @@ struct SpriteAlignerWindow : Window { { this->vscroll->SetCapacityFromWidget(this, WID_SA_LIST); } + +private: + void SelectAction5Type() + { + const auto act5types = GetAction5Types(); + for (auto it = std::begin(act5types); it != std::end(act5types); ++it) { + if (it->sprite_base <= this->current_sprite && this->current_sprite < it->sprite_base + it->max_sprites) { + this->act5_type = &*it; + return; + } + } + this->act5_type = nullptr; + } }; bool SpriteAlignerWindow::centre = true; @@ -1096,7 +1145,7 @@ bool SpriteAlignerWindow::crosshair = true; static constexpr NWidgetPart _nested_sprite_aligner_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_CLOSEBOX, COLOUR_GREY), - NWidget(WWT_CAPTION, COLOUR_GREY, WID_SA_CAPTION), SetDataTip(STR_SPRITE_ALIGNER_CAPTION, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), + NWidget(WWT_CAPTION, COLOUR_GREY, WID_SA_CAPTION), SetDataTip(STR_JUST_STRING4, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), NWidget(WWT_SHADEBOX, COLOUR_GREY), NWidget(WWT_STICKYBOX, COLOUR_GREY), EndContainer(), diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 28cd97bac8..ca7fbba6c9 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -74,6 +74,15 @@ static SpriteFile *GetCachedSpriteFileByName(const std::string &filename) return nullptr; } +/** + * Get the list of cached SpriteFiles. + * @return Read-only list of cache SpriteFiles. + */ +std::span> GetCachedSpriteFiles() +{ + return _sprite_files; +} + /** * Open/get the SpriteFile that is cached for use in the sprite cache. * @param filename Name of the file at the disk. diff --git a/src/spritecache.h b/src/spritecache.h index 48af9a54e4..78447d700d 100644 --- a/src/spritecache.h +++ b/src/spritecache.h @@ -62,6 +62,7 @@ void GfxClearFontSpriteCache(); void IncreaseSpriteLRU(); SpriteFile &OpenCachedSpriteFile(const std::string &filename, Subdirectory subdir, bool palette_remap); +std::span> GetCachedSpriteFiles(); void ReadGRFSpriteOffsets(SpriteFile &file); size_t GetGRFSpriteOffset(uint32_t id); From eb094a953c2593a9e8cf01173eebc901fdebdb05 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 6 Apr 2024 23:32:26 +0100 Subject: [PATCH 06/26] Codefix: Social Plugins widget parts were not constexpr. (#12443) Widget lists were made constexpr except these. --- src/settings_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 6304b7771e..dbcd63755e 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -187,7 +187,7 @@ static const std::map _volume_labels = { { 127, STR_GAME_OPTIONS_VOLUME_100 }, }; -static const NWidgetPart _nested_social_plugins_widgets[] = { +static constexpr NWidgetPart _nested_social_plugins_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_FRAME, COLOUR_GREY, WID_GO_SOCIAL_PLUGIN_TITLE), SetDataTip(STR_JUST_STRING2, STR_NULL), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), @@ -202,7 +202,7 @@ static const NWidgetPart _nested_social_plugins_widgets[] = { EndContainer(), }; -static const NWidgetPart _nested_social_plugins_none_widgets[] = { +static constexpr NWidgetPart _nested_social_plugins_none_widgets[] = { NWidget(NWID_HORIZONTAL), NWidget(WWT_TEXT, COLOUR_GREY), SetMinimalSize(0, 12), SetFill(1, 0), SetDataTip(STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE, STR_NULL), EndContainer(), From 0f6bf90731049777f5da67ffb4a639ef4d4c8156 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 7 Apr 2024 04:41:19 +0000 Subject: [PATCH 07/26] Update: Translations from eints --- src/lang/afrikaans.txt | 1 - src/lang/arabic_egypt.txt | 1 - src/lang/basque.txt | 1 - src/lang/belarusian.txt | 1 - src/lang/brazilian_portuguese.txt | 1 - src/lang/bulgarian.txt | 1 - src/lang/catalan.txt | 1 - src/lang/croatian.txt | 1 - src/lang/czech.txt | 1 - src/lang/danish.txt | 1 - src/lang/dutch.txt | 1 - src/lang/english_AU.txt | 1 - src/lang/english_US.txt | 1 - src/lang/estonian.txt | 1 - src/lang/faroese.txt | 1 - src/lang/finnish.txt | 1 - src/lang/french.txt | 1 - src/lang/frisian.txt | 1 - src/lang/gaelic.txt | 1 - src/lang/galician.txt | 1 - src/lang/german.txt | 1 - src/lang/greek.txt | 1 - src/lang/hebrew.txt | 1 - src/lang/hungarian.txt | 1 - src/lang/icelandic.txt | 1 - src/lang/indonesian.txt | 1 - src/lang/irish.txt | 1 - src/lang/italian.txt | 1 - src/lang/japanese.txt | 1 - src/lang/korean.txt | 1 - src/lang/latin.txt | 1 - src/lang/latvian.txt | 1 - src/lang/lithuanian.txt | 1 - src/lang/luxembourgish.txt | 1 - src/lang/malay.txt | 1 - src/lang/norwegian_bokmal.txt | 1 - src/lang/norwegian_nynorsk.txt | 1 - src/lang/persian.txt | 1 - src/lang/polish.txt | 1 - src/lang/portuguese.txt | 1 - src/lang/romanian.txt | 1 - src/lang/russian.txt | 1 - src/lang/serbian.txt | 1 - src/lang/simplified_chinese.txt | 1 - src/lang/slovak.txt | 1 - src/lang/slovenian.txt | 1 - src/lang/spanish.txt | 1 - src/lang/spanish_MX.txt | 1 - src/lang/swedish.txt | 1 - src/lang/tamil.txt | 1 - src/lang/thai.txt | 1 - src/lang/traditional_chinese.txt | 1 - src/lang/turkish.txt | 1 - src/lang/ukrainian.txt | 1 - src/lang/urdu.txt | 1 - src/lang/vietnamese.txt | 1 - src/lang/welsh.txt | 1 - 57 files changed, 57 deletions(-) diff --git a/src/lang/afrikaans.txt b/src/lang/afrikaans.txt index 39c3d41dfa..ce69bbe327 100644 --- a/src/lang/afrikaans.txt +++ b/src/lang/afrikaans.txt @@ -3002,7 +3002,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Spoor tipe STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF veranderlike 60+x parameter (heksadesimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Belyn sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gaan na die volgende "sprite", Ignoreer enige pseudo/her-kleur/font "sprites" en spring terug na die begin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gaan na sprite diff --git a/src/lang/arabic_egypt.txt b/src/lang/arabic_egypt.txt index 9a0bbec625..184010a6a3 100644 --- a/src/lang/arabic_egypt.txt +++ b/src/lang/arabic_egypt.txt @@ -2859,7 +2859,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :نوع سكة STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}متغير الاضافات الجديدة +60 * نمط (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}موائمة صورة العفريتة {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}العفريتة التالية STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}نابع للعفريتة الطبيعية التالية، تجاوز اي عفريتة موقوفة/ مصبوغة/مخطوطة و انهي المتاعة في النهاية. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}اذهب الى العفريتة diff --git a/src/lang/basque.txt b/src/lang/basque.txt index bfbd18e830..7580ed6e94 100644 --- a/src/lang/basque.txt +++ b/src/lang/basque.txt @@ -2830,7 +2830,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Trenbide mota STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF aldagaia 60+x parametroetan (hexadecimala) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}"Sprit"-a lerrokatu {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Urrengo "sprit"-a STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Hurrengo grafiko arrunta erabili, pseudo/birkoloretu/grafiko tipoak desgaituz STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Joan "sprit"-era diff --git a/src/lang/belarusian.txt b/src/lang/belarusian.txt index 7f2ed1e1b9..3a1de5eaf2 100644 --- a/src/lang/belarusian.txt +++ b/src/lang/belarusian.txt @@ -3817,7 +3817,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тып даро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Парамэтр зьменнай NewGRF 60+x (шаснаццаткавы) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выраўноўваньне спрайта {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступны спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перайсьці да наступнага звычайнага спрайта, прапускаючы змяняючыя колер, шрыфтавыя, псэўдаспрайты. Пераход з канца сьпісу да першага спрайта. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Перайсьці да спрайта diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index e2a8bfcdd7..467621c974 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinhando sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Próximo sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do último sprite para o primeiro STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o sprite diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index a4d9052309..0d9efe83bd 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -3053,7 +3053,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Вид желе STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметър на променливата 60+x на NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следващ sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Продължи към следващия нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Иди на sprite diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 519ab8d79d..8935e7d6bb 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipus de carret STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paràmetre NewGRF variable 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alineant sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite següent STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Procedeix cap al següent sprite normal, saltant qualsevol sprite pseudo/recolor/font i passant de l'últim sprite al primer STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Vés a l'sprite diff --git a/src/lang/croatian.txt b/src/lang/croatian.txt index 1b4c9abb6f..00c09c6dc6 100644 --- a/src/lang/croatian.txt +++ b/src/lang/croatian.txt @@ -3172,7 +3172,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Vrsta željezni STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF varijabla 60+x parametar (heksadecimalni) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Poravnanje sprite-a {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sljedeći sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Otiđi na sljedeći normalni sprite, preskačući svaki pseudo/prebojani/font sprite i nakon dolaska na zadnjeg prebaci na prvi STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Otiđi na sprite diff --git a/src/lang/czech.txt b/src/lang/czech.txt index bab4f69f32..7b83851a3c 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -3574,7 +3574,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Typ silnice STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Hodnota NewGRF proměnné 60+x (šestnáctkově) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Zarovávání spritu {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Další sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Jít na další normální sprite (s grafikou), přičemž se přeskakují pseudo-/barvící/znakové sprity a při dosažení konce se jde zase na začátek STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Jít na sprite diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 1e81cb03c9..5856ec9c12 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vej type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Justerer sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsæt til næste normale sprite, spring pseudo/omfarvning/font-sprites over og med omløb fra enden til starten STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 3c24b2d5d0..2ef0e067ea 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Wegtype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parameter 60+x voor NewGRF-variabele (hexadecimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Sprite uitlijnen {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Volgende sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Doorgaan met volgende normale sprite, alle pseudo-/herkleur-/lettertype-sprites overslaan; bij het einde terug naar het begin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ga naar sprite diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 03b42319c3..2a2f655ef6 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolour/font sprites and wrapping around at the end STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index c2d29d3cd4..9c28e0f7b0 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Road type STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceed to the next normal sprite, skipping any pseudo/recolor/font sprites and wrapping around from the last sprite to the first STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Go to sprite diff --git a/src/lang/estonian.txt b/src/lang/estonian.txt index da14456b8d..efcdc634d5 100644 --- a/src/lang/estonian.txt +++ b/src/lang/estonian.txt @@ -3541,7 +3541,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tee tüüp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muutuf 60+x parameeter (kuueteistkümnendsüsteemis) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Järgmine sprait STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Jätka järgmise normaalse spraidini, Jättes vahele iga pseudo/taasvärvitud/fondi spraidid ja pakkides lõpu ümber STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mine spraidini diff --git a/src/lang/faroese.txt b/src/lang/faroese.txt index de440942b3..5de884b32e 100644 --- a/src/lang/faroese.txt +++ b/src/lang/faroese.txt @@ -2659,7 +2659,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Breyta slag STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Next sprite ###length 2 diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 962a27f6e6..419ea35ac1 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tien tyyppi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muuttujan 60+x parametri (heksadesimaali) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Kohdistetaan spriteä {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seuraava sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Siirry seuraavaan tavalliseen spriteen; mahdolliset pseudo-, uudelleenväritys- ja fonttispritet ohitetaan; viimeisen spriten jälkeen siirrytään ensimmäiseen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mene spriteen diff --git a/src/lang/french.txt b/src/lang/french.txt index bf07d3f45a..adf9f97a72 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Type de route STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramètre de variable NewGRF 60+x (héxadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alignement du sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite suivant STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Se rendre au prochain sprite normal, en ignorant les pseudo-sprites et les sprites de recoloration et de police, et en bouclant du dernier vers le premier STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Aller au sprite diff --git a/src/lang/frisian.txt b/src/lang/frisian.txt index b0c7608282..71055270df 100644 --- a/src/lang/frisian.txt +++ b/src/lang/frisian.txt @@ -2806,7 +2806,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :spoar soart STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF fariabele 60+x parameter (heksadesimaal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Rjochted ôfbylding {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Folgend flak STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gean fierder nei de folgjende ôfbylding, sla pseudo/werkleure/lettertype ôfbyldings oer en begjin wer oernei at it ein berikke is STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gean nei ôfbylding diff --git a/src/lang/gaelic.txt b/src/lang/gaelic.txt index 59b87fb62d..11805cc18f 100644 --- a/src/lang/gaelic.txt +++ b/src/lang/gaelic.txt @@ -3188,7 +3188,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Seòrsa an rèi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramadair 60+x (sia-dheicheach) caochladair NewGRF # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}A' co-thaobhachadh sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}An t-ath sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Lean air adhart dhan ath sprite àbhaisteach, a' gearradh leum thairis air sprites mas fhìor/ath-dhathaidh/crutha-chlò is a' pasgadh aig an deireadh gun chiad sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Rach dhan sprite diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 86dd8f30c6..15754aa2b0 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3487,7 +3487,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aliñar sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seguinte sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir ao sprite seguinte, ignorando pseudosprites, sprites recoloreados e sprites de fonte, e volvendo a empezar ao chegar á fin STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite diff --git a/src/lang/german.txt b/src/lang/german.txt index 73a9b4d2b0..9b3bcd883e 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Straßentyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-Variable 60+x Parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Ausrichtung von Sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nächstes Sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Gehe zum nächsten normalen Sprite und überspringe alle Pseudo-, Recolour- und Schriftsprites (springt ggf. vom ersten bis zum letzten Sprite) STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gehe zu Sprite diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 556f5ee773..1d148d3428 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3580,7 +3580,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Τύπος δρ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Μεταβλητή NewGRF 60+x παράμετρος (δεκαεξαδικό) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Ευθυγράμμιση sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Επόμενο στοιχείο STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Συνέχισε στο επόμενο κανονικό sprite, προσπερνώντας οποιοδήποτε ψευδό/επαναναχρωματιζόμενο/γραμματοσειράς sprite και κάνε τις τελικές διαδικασίες στο τέλος STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Μετακίνηση στο στοιχείο diff --git a/src/lang/hebrew.txt b/src/lang/hebrew.txt index f0e4e8e050..bc66be2033 100644 --- a/src/lang/hebrew.txt +++ b/src/lang/hebrew.txt @@ -3069,7 +3069,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :סוג מסיל STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}משתנה NewGRF פרמטר 60+x (הקסה-דצימלי) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}מיישר ספרייט {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}הספרייט הבא STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}עבור לספרייט הבא, כאשר נדלג על כל הספרייטים המיוחדים ולבסוף נחזור לתחילת הרשימה STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}דלג לספרייט diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 6a5c4626bc..59203dde4b 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -3549,7 +3549,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Út típus STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF változó 60+x paraméter (hexadecimális) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Elhelyezési sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Következő sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Továbbhaladás a következő normál spritera, kihagyva bármilyen ál/átszínező/betű spriteokat, a végén folytatva az elsővel STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ugrás a spritehoz diff --git a/src/lang/icelandic.txt b/src/lang/icelandic.txt index efaa345255..5ba52905e3 100644 --- a/src/lang/icelandic.txt +++ b/src/lang/icelandic.txt @@ -2768,7 +2768,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tegund spora STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF breyta 60+x stilling (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Samræmi hreyfimynd{COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Næsta hreyfimynd STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Halda áfram á næstu venjulegu hreyfimynd, sleppir gervi/endurlitun/letur hreyfimyndum og fer aftur á byrjun í lokin. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Velja hreyfimynd diff --git a/src/lang/indonesian.txt b/src/lang/indonesian.txt index fc35a85f1e..177b0d2eeb 100644 --- a/src/lang/indonesian.txt +++ b/src/lang/indonesian.txt @@ -3424,7 +3424,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipe jalan STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Variabel NewGRF harus 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Menjajarkan sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite berikutnya STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Pergi ke sprite normal berikutnya, lewati sprite bayangan/warna ulang/huruf dan pembungkus saat mulai STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Pergi ke sprite diff --git a/src/lang/irish.txt b/src/lang/irish.txt index 80d9f5a895..90825adf64 100644 --- a/src/lang/irish.txt +++ b/src/lang/irish.txt @@ -3208,7 +3208,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Cineál iarnró STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Athróg NewGRF paraiméadar 60+x (heicsidheachúil) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Ag ailíniú sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}An chéad sprite eile STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Téigh chuig an chéad gnáth-sprite eile, ag scipeáil thar aon bhréag-sprite nó sprite athdhathaithe/clófhoirne agus ag timfhilleadh ag an deireadh STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Téigh chuig sprite diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 150c81a623..436d86cdb8 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -3527,7 +3527,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo di strada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametro variabile NewGRF 60+x (esadecimale) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Allineamento sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Successivo STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Procede al successivo sprite normale, saltanto qualsiasi sprite speciale, di ricoloramento o carattere e tornando al primo se viene raggiunto l'ultimo della lista STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Vai a diff --git a/src/lang/japanese.txt b/src/lang/japanese.txt index 84b2a8ae91..115fced9f5 100644 --- a/src/lang/japanese.txt +++ b/src/lang/japanese.txt @@ -3295,7 +3295,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :線路の種類 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRFの可変60+xパラメーター (16進) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}スプライト{COMMA} 配列 ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}次のスプライト STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}次のノーマルスプライトに進みます。始端と終端は連続しているものとみなし、疑似/リカラー/フォントスプライトはスキップします STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}スプライトへ飛ぶ diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 7a072c7db2..60ef5f39ab 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :도로 종류 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF 변수 60+x 매개 변수 (16진법) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}스프라이트 정렬 {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}다음 스프라이트 STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}(유사/재색상/글씨 스프라이트를 제외한) 다음 보통 스프라이트로 이동하고, 마지막 스프라이트에 다다르면 다시 처음으로 돌아갑니다. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}스프라이트 번호 입력 diff --git a/src/lang/latin.txt b/src/lang/latin.txt index 0aa15daf06..25bc4e2b3a 100644 --- a/src/lang/latin.txt +++ b/src/lang/latin.txt @@ -3157,7 +3157,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Typus ferriviae STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF var 60+x parametrum (sedecimale) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Dirigens spiritum {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Spiritum secundum STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Procedere ad spiritum naturalem secundum et, termino contacto, ad primum revertere STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ire ad spiritum diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 16c5ab140e..df84824d63 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -3491,7 +3491,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Ceļa tips STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF mainīgā 60+x parametrs (heksadecimāls) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Gariņa līdzināšana {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nākamais gariņš STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Pāriet uz nākamo parasto gariņu, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Iet pie gariņa diff --git a/src/lang/lithuanian.txt b/src/lang/lithuanian.txt index 5f5198f4c5..1ef30e27f1 100644 --- a/src/lang/lithuanian.txt +++ b/src/lang/lithuanian.txt @@ -3460,7 +3460,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Bėgio tipas STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Plėtinio kintamojo 60+x parametras (šešioliktainėje sistemoje) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Lygiuojamas spruklys {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Tolesnis spruklys STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Įkelti tolesnį spruklį STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nurodyti spruklį diff --git a/src/lang/luxembourgish.txt b/src/lang/luxembourgish.txt index 3a15cff1eb..ef41844276 100644 --- a/src/lang/luxembourgish.txt +++ b/src/lang/luxembourgish.txt @@ -3485,7 +3485,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Stroossentyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF Variabel 60+x Parameter (hexadezimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alignéiren d'Sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nächst Sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Géi weider op déi nächst normal Sprite, iwwersprang all pseudo/recolour/font Sprite an sprang un den Ufank no der leschter. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Géi op Sprite diff --git a/src/lang/malay.txt b/src/lang/malay.txt index 4e8d12693c..51a7aee810 100644 --- a/src/lang/malay.txt +++ b/src/lang/malay.txt @@ -2669,7 +2669,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jenis landasan STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Pemboleh ubah NewGRF, parameter 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Megalih peperi {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Peperi seterusnya STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Teruskan ke peperi seterusan yang biasa, melangkau sebarang peperi pseudo/warna kembali/fon dan memusing balik semula STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Pergi ke peperi diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 3eaf13fca4..189de7b286 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3490,7 +3490,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Veitype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-variabel 60+x parameter (heksadesimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Forskyver sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Neste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsett til neste normale sprite og hopp over enhver pseudo-/omfargings-/skrifttype- sprite, samt start om ved begynnelsen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite diff --git a/src/lang/norwegian_nynorsk.txt b/src/lang/norwegian_nynorsk.txt index e0adda199c..ed09582836 100644 --- a/src/lang/norwegian_nynorsk.txt +++ b/src/lang/norwegian_nynorsk.txt @@ -2844,7 +2844,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Jernbanetype STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF-variabel 60+x parameter (heksadesimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Forskyver sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Neste sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsett til neste normale sprite og hopp over einhver pseudo-/omfargings-/skrifttype- sprite, samt start om ved byrjinga STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå til sprite diff --git a/src/lang/persian.txt b/src/lang/persian.txt index f184fdb6d8..f08def6a82 100644 --- a/src/lang/persian.txt +++ b/src/lang/persian.txt @@ -2675,7 +2675,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :نوع ریل STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}متغیر NewGRF 60 + پارامتر (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}جابجا کردن تصویر گرافیک {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}تصویر بعدی STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}نمایش تصویر بعدی، بدون انجام دادن هر گونه تغییرات در آخر STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}رفتن به تصویر diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 8ac204df73..a43e7ed443 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3868,7 +3868,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Rodzaj drogi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGFR zmienna 60+parametr x (heksadecymalnie) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Wyrównywanie sprite'a {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Następny sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Idź do następnego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po ostatnim przejdź do pierwszego STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idź do sprite'a diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 8fe6e61310..c230cac715 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}A alinhar gráfico {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Gráfico seguinte STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceder ao gráfico normal seguinte, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no fim STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o gráfico diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 0d7686fa32..ea9177a1dc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -3481,7 +3481,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tip de drum STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parametru variabilă 60+x NewGRF (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aliniere imagine {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Imaginea următoare STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mergi la următoarea imagine normală, sărind peste pseudo-imagini, recolorări sau fonturi și repornește când s-a ajuns la sfârșit STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mergi la imagine diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 1ced93984e..1bd5fab913 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -3663,7 +3663,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип доро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр переменной NewGRF 60+x (шестнадцатеричный) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Выравнивание спрайта {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следующий спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Перейти к следующему нормальному спрайту, пропуская изменяющие цвет, шрифтовые, псевдоспрайты. Переход из конца списка к первому спрайту. STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Перейти к спрайту diff --git a/src/lang/serbian.txt b/src/lang/serbian.txt index 0eb1a5fe9c..83b03e555c 100644 --- a/src/lang/serbian.txt +++ b/src/lang/serbian.txt @@ -3613,7 +3613,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vrsta puta STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF promenljiva 60+x parametar (heksadecimalno) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Poravnjavanje sprajta {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sledeći sprajt STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Prelazi na sledeći normalan sprajt, preskačući sve pseudo/prebojavajuće/font sprajtove i vraća se na početak posle zadnjeg STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idi na sprajt diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 9b454332df..026b47f506 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路类型 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 参数 (十六进制) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}定位 sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}下一个 sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}继续处理下个正常的图形元素,略过任何虚位/重新着色/文字字型相关的图形元素;并且在处理到最后的图形元素后,返回第一个图形元素继续处理。 STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}前往 sprite diff --git a/src/lang/slovak.txt b/src/lang/slovak.txt index 4366fb9c1c..058d87d45a 100644 --- a/src/lang/slovak.txt +++ b/src/lang/slovak.txt @@ -3556,7 +3556,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Typ cesty STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabilný 60+x parameter (hexadecimálne) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Zarovnanie sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Ďalší sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Prejsť na najbližší normálny sprite, vynechajúc akékoľvek falošné/prefarbené sprites a sprites fontu použité na konci STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Prejsť na sprite diff --git a/src/lang/slovenian.txt b/src/lang/slovenian.txt index 2a88be52f2..b8fa8435c9 100644 --- a/src/lang/slovenian.txt +++ b/src/lang/slovenian.txt @@ -3082,7 +3082,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tip železnice STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF spremenljivka 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Uravnavam sličico {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Naslednja sličica STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Nadaljuj k naslednji navadni sličici, zanemari vse navidezne/pobarvane/besedilne sličice in okvir na koncu STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Pojdi na sličico diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 76df3cab47..9f7dcd3a99 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -3489,7 +3489,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de carrete STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinear sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Siguiente sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Va al siguiente sprite (ignorando pseudosprites, sprites recoloreados y sprites de fuente) y pasa del último al primer sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index eec6d84e01..8b734a5842 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -3419,7 +3419,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Tipo de ferroca STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parámetro de variable NewGRF 60+x (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinear sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Siguiente sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir al siguiente sprite (ignorando pseudosprites, sprites coloreados y sprites de fuente) y pasar del último al primer sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir a sprite diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index c86a05f7e3..df9d53384f 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Vägtyp STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variabel 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Justera spriteobjekt {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nästa spriteobjekt STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Fortsätt till nästa nomala spriteobjekt, ignorera eventuella pseudo/recolour/font spriteobjekt och börja om efter sista spriteobjektet STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Gå till spriteobjekt diff --git a/src/lang/tamil.txt b/src/lang/tamil.txt index 2193062821..0556acd908 100644 --- a/src/lang/tamil.txt +++ b/src/lang/tamil.txt @@ -3192,7 +3192,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :இரயில # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}ஸ்பிரிட் ஒழுங்காக்கப்படுகிறது {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}அடுத்த ஸ்பிரைட்டு STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}ஸ்பிரைட்டுயிற்கு செல்லவும் STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}முந்தைய ஸ்பிரைட்டு diff --git a/src/lang/thai.txt b/src/lang/thai.txt index e943336d16..421e65bb87 100644 --- a/src/lang/thai.txt +++ b/src/lang/thai.txt @@ -3014,7 +3014,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :ประเภ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF ตัวแปร 60+x parameter (hexadecimal) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Aligning sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}sprite ถัดไป STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}เคลื่อนไปยัง sprite ปกติอันถัดไป โดยข้าม pseudo/recolour/font และวกกลับเมื่อถึงจุดสิ้นสุด STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}ไปยัง sprite diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 53866eae5f..d0ee79f49f 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3373,7 +3373,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :道路類型 STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF variable 60+x 參數(16 進位) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}定位 Sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}下一個子畫面 STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}繼續處理下個正常的子畫面,略過任何虛位/重新著色/文字字型相關的子畫面,並在到達最後的子畫面後,返回第一個子畫面繼續進行處理。 STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}前往子畫面 diff --git a/src/lang/turkish.txt b/src/lang/turkish.txt index 2d5b6fa1a9..d4a3f1ce92 100644 --- a/src/lang/turkish.txt +++ b/src/lang/turkish.txt @@ -3487,7 +3487,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Yol türü: STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF değişkeni 60+x parametresi (onaltılı) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Nesne hizalanıyor {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sonraki nesne STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Tüm sahte/yeniden renklendirme/yazı tipi nesnelerini ve sondaki nesneden atlayarak bir sonraki normal nesneye geç STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Nesneye git diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 76bc68375b..65fb473350 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -3628,7 +3628,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип доро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр змінної NewGRF 60+x (шістнадцятковий) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Вирівнювання спрайту {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступний спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Йти до наступного нормального спрайту, пропускаючи будь-які псевдо/перемальовані/шрифтові спрайти і загортаючи навколо (wrap) починаючи з останнього спрайту закінчуючи першим STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Йти до спрайту diff --git a/src/lang/urdu.txt b/src/lang/urdu.txt index 3f097904a3..06c6d24238 100644 --- a/src/lang/urdu.txt +++ b/src/lang/urdu.txt @@ -2264,7 +2264,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :طرزِ ریل # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE} صف بندھی کے sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK} اگلی sprite STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK} جایئے sprite تک STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK} جایئے sprite کی طرف۔ اگر sprite اصلی نھیں تو اگلی sprite کی طرف جائیے diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index e92e3b05f7..62dd744acd 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Loại đườn STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Biến số NewGRF là 60+x (dạng hexa) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Điều chỉnh sprite {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Sprite tiếp STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Chuyển tới sprite bình thường kế tiếp, bỏ qua các loại sprite và căn theo điểm kết thúc STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Đi tới sprite diff --git a/src/lang/welsh.txt b/src/lang/welsh.txt index c92814a9d1..87979e7e4e 100644 --- a/src/lang/welsh.txt +++ b/src/lang/welsh.txt @@ -3488,7 +3488,6 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Math ffordd STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Paramedr newidyn NewGRF 60+x (hecsaddigidol) # Sprite aligner window -STR_SPRITE_ALIGNER_CAPTION :{WHITE}Alinio corlun {COMMA} ({STRING}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Corlun nesaf STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Mynd i'r corlun cyffredin nesaf, gan hepgor unrhyw gorluniau ailliwio/ffont/llidgorluniau, ac amlapio o'r corlun olaf i'r gyntaf STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mynd i gorlun From 1fcf1a136d7d0444226a9d7f8855ebaf0eb7343c Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 15:30:00 +0200 Subject: [PATCH 08/26] Codechange: use single function returning std::span over two functions that return size and begin --- src/newgrf_debug_gui.cpp | 30 +++++++++--------------------- src/table/newgrf_debug_data.h | 23 +++++++++-------------- 2 files changed, 18 insertions(+), 35 deletions(-) diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index c1ed16261d..95695ab294 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -181,25 +181,14 @@ public: } /** - * Allows to know the size of the persistent storage. + * Gets the span containing the persistent storage. * @param index Index of the item. * @param grfid Parameter for the PSA. Only required for items with parameters. - * @return Size of the persistent storage in indices. + * @return Span of the storage array or an empty span when not present. */ - virtual uint GetPSASize([[maybe_unused]] uint index, [[maybe_unused]] uint32_t grfid) const + virtual const std::span GetPSA([[maybe_unused]] uint index, [[maybe_unused]] uint32_t grfid) const { - return 0; - } - - /** - * Gets the first position of the array containing the persistent storage. - * @param index Index of the item. - * @param grfid Parameter for the PSA. Only required for items with parameters. - * @return Pointer to the first position of the storage array or nullptr if not present. - */ - virtual const int32_t *GetPSAFirstPosition([[maybe_unused]] uint index, [[maybe_unused]] uint32_t grfid) const - { - return nullptr; + return {}; } protected: @@ -472,17 +461,16 @@ struct NewGRFInspectWindow : Window { } } - uint psa_size = nih->GetPSASize(index, this->caller_grfid); - const int32_t *psa = nih->GetPSAFirstPosition(index, this->caller_grfid); - if (psa_size != 0 && psa != nullptr) { + auto psa = nih->GetPSA(index, this->caller_grfid); + if (!psa.empty()) { if (nih->PSAWithParameter()) { this->DrawString(r, i++, fmt::format("Persistent storage [{:08X}]:", BSWAP32(this->caller_grfid))); } else { this->DrawString(r, i++, "Persistent storage:"); } - assert(psa_size % 4 == 0); - for (uint j = 0; j < psa_size; j += 4, psa += 4) { - this->DrawString(r, i++, fmt::format(" {}: {} {} {} {}", j, psa[0], psa[1], psa[2], psa[3])); + assert(psa.size() % 4 == 0); + for (size_t j = 0; j < psa.size(); j += 4) { + this->DrawString(r, i++, fmt::format(" {}: {} {} {} {}", j, psa[j], psa[j + 1], psa[j + 2], psa[j + 3])); } } diff --git a/src/table/newgrf_debug_data.h b/src/table/newgrf_debug_data.h index 127a948635..836cec3445 100644 --- a/src/table/newgrf_debug_data.h +++ b/src/table/newgrf_debug_data.h @@ -378,13 +378,11 @@ class NIHIndustry : public NIHelper { return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - uint GetPSASize(uint, uint32_t) const override { return cpp_lengthof(PersistentStorage, storage); } - - const int32_t *GetPSAFirstPosition(uint index, uint32_t) const override + const std::span GetPSA(uint index, uint32_t) const override { const Industry *i = (const Industry *)this->GetInstance(index); - if (i->psa == nullptr) return nullptr; - return (int32_t *)(&i->psa->storage); + if (i->psa == nullptr) return {}; + return i->psa->storage; } }; @@ -554,13 +552,11 @@ class NIHAirport : public NIHelper { return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - uint GetPSASize(uint, uint32_t) const override { return cpp_lengthof(PersistentStorage, storage); } - - const int32_t *GetPSAFirstPosition(uint index, uint32_t) const override + const std::span GetPSA(uint index, uint32_t) const override { const Station *st = (const Station *)this->GetInstance(index); - if (st->airport.psa == nullptr) return nullptr; - return (int32_t *)(&st->airport.psa->storage); + if (st->airport.psa == nullptr) return {}; + return st->airport.psa->storage; } }; @@ -595,7 +591,6 @@ class NIHTown : public NIHelper { void SetStringParameters(uint index) const override { this->SetSimpleStringParameters(STR_TOWN_NAME, index); } uint32_t GetGRFID(uint) const override { return 0; } bool PSAWithParameter() const override { return true; } - uint GetPSASize(uint, uint32_t) const override { return cpp_lengthof(PersistentStorage, storage); } uint Resolve(uint index, uint var, uint param, bool *avail) const override { @@ -603,15 +598,15 @@ class NIHTown : public NIHelper { return ro.GetScope(VSG_SCOPE_SELF)->GetVariable(var, param, avail); } - const int32_t *GetPSAFirstPosition(uint index, uint32_t grfid) const override + const std::span GetPSA(uint index, uint32_t grfid) const override { Town *t = Town::Get(index); for (const auto &it : t->psa_list) { - if (it->grfid == grfid) return &it->storage[0]; + if (it->grfid == grfid) return it->storage; } - return nullptr; + return {}; } }; From d7fa614a9da834e45ea8e486244ea3e1a1c420b7 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 21:37:49 +0200 Subject: [PATCH 09/26] Codechange: use range-based for loop for debug levels and fix global variable naming --- src/debug.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 7cc28e4280..02150379f7 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -60,7 +60,7 @@ struct DebugLevel { }; #define DEBUG_LEVEL(x) { #x, &_debug_##x##_level } - static const DebugLevel debug_level[] = { +static const DebugLevel _debug_levels[] = { DEBUG_LEVEL(driver), DEBUG_LEVEL(grf), DEBUG_LEVEL(map), @@ -79,7 +79,7 @@ struct DebugLevel { #ifdef RANDOM_DEBUG DEBUG_LEVEL(random), #endif - }; +}; #undef DEBUG_LEVEL /** @@ -89,13 +89,13 @@ struct DebugLevel { void DumpDebugFacilityNames(std::back_insert_iterator &output_iterator) { bool written = false; - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { + for (const auto &debug_level : _debug_levels) { if (!written) { fmt::format_to(output_iterator, "List of debug facility names:\n"); } else { fmt::format_to(output_iterator, ", "); } - fmt::format_to(output_iterator, "{}", i->name); + fmt::format_to(output_iterator, "{}", debug_level.name); written = true; } if (written) { @@ -153,13 +153,11 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) /* Global debugging level? */ if (*s >= '0' && *s <= '9') { - const DebugLevel *i; - v = std::strtoul(s, &end, 0); s = end; - for (i = debug_level; i != endof(debug_level); ++i) { - new_levels[i->name] = v; + for (const auto &debug_level : _debug_levels) { + new_levels[debug_level.name] = v; } } @@ -174,9 +172,9 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) /* check debugging levels */ const DebugLevel *found = nullptr; - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { - if (s == t + strlen(i->name) && strncmp(t, i->name, s - t) == 0) { - found = i; + for (const auto &debug_level : _debug_levels) { + if (s == t + strlen(debug_level.name) && strncmp(t, debug_level.name, s - t) == 0) { + found = &debug_level; break; } } @@ -194,10 +192,10 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) } /* Apply the changes after parse is successful */ - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { - const auto &nl = new_levels.find(i->name); + for (const auto &debug_level : _debug_levels) { + const auto &nl = new_levels.find(debug_level.name); if (nl != new_levels.end()) { - *i->level = nl->second; + *debug_level.level = nl->second; } } } @@ -210,9 +208,9 @@ void SetDebugString(const char *s, void (*error_func)(const std::string &)) std::string GetDebugString() { std::string result; - for (const DebugLevel *i = debug_level; i != endof(debug_level); ++i) { + for (const auto &debug_level : _debug_levels) { if (!result.empty()) result += ", "; - fmt::format_to(std::back_inserter(result), "{}={}", i->name, *i->level); + fmt::format_to(std::back_inserter(result), "{}={}", debug_level.name, *debug_level.level); } return result; } From 995fca58a2ece0b0e82919292f3cc259f7548499 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 7 Apr 2024 22:01:46 +0100 Subject: [PATCH 10/26] Codechange: Use begin/end instead of endof for some industry arrays. (#12447) --- src/industry_cmd.cpp | 4 ++-- src/industry_gui.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 816e36a5e5..fbb056c162 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1895,7 +1895,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, continue; } /* Verify valid cargo */ - if (std::find(indspec->accepts_cargo, endof(indspec->accepts_cargo), cargo) == endof(indspec->accepts_cargo)) { + if (std::find(std::begin(indspec->accepts_cargo), std::end(indspec->accepts_cargo), cargo) == std::end(indspec->accepts_cargo)) { /* Cargo not in spec, error in NewGRF */ ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_INPUT_CARGO_TYPES, res); break; @@ -1931,7 +1931,7 @@ static void DoCreateNewIndustry(Industry *i, TileIndex tile, IndustryType type, continue; } /* Verify valid cargo */ - if (std::find(indspec->produced_cargo, endof(indspec->produced_cargo), cargo) == endof(indspec->produced_cargo)) { + if (std::find(std::begin(indspec->produced_cargo), std::end(indspec->produced_cargo), cargo) == std::end(indspec->produced_cargo)) { /* Cargo not in spec, error in NewGRF */ ErrorUnknownCallbackResult(indspec->grf_prop.grffile->grfid, CBID_INDUSTRY_OUTPUT_CARGO_TYPES, res); break; diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 7bd64396cf..711ee598f9 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -2597,8 +2597,8 @@ struct IndustryCargoesWindow : public Window { const IndustrySpec *indsp = GetIndustrySpec(it); if (!indsp->enabled) continue; this->ind_textsize = maxdim(this->ind_textsize, GetStringBoundingBox(indsp->name)); - CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(indsp->accepts_cargo, endof(indsp->accepts_cargo), IsValidCargoID)); - CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(indsp->produced_cargo, endof(indsp->produced_cargo), IsValidCargoID)); + CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(std::begin(indsp->accepts_cargo), std::end(indsp->accepts_cargo), IsValidCargoID)); + CargoesField::max_cargoes = std::max(CargoesField::max_cargoes, std::count_if(std::begin(indsp->produced_cargo), std::end(indsp->produced_cargo), IsValidCargoID)); } d.width = std::max(d.width, this->ind_textsize.width); d.height = this->ind_textsize.height; From 4718971ccc17ad079d86279cd3f22698437dcfbb Mon Sep 17 00:00:00 2001 From: rubidium42 Date: Sun, 7 Apr 2024 13:50:14 +0200 Subject: [PATCH 11/26] Codechange: use std::size instead of lengthof for town names --- src/townname.cpp | 256 +++++++++++++++++++++++------------------------ 1 file changed, 128 insertions(+), 128 deletions(-) diff --git a/src/townname.cpp b/src/townname.cpp index 74a2ef3ffe..1a1e16b4c0 100644 --- a/src/townname.cpp +++ b/src/townname.cpp @@ -166,9 +166,9 @@ bool GenerateTownName(Randomizer &randomizer, uint32_t *townnameparts, TownNames * @param seed seed * @return seed transformed to a number from given range */ -static inline uint32_t SeedChance(uint8_t shift_by, int max, uint32_t seed) +static inline uint32_t SeedChance(uint8_t shift_by, size_t max, uint32_t seed) { - return (GB(seed, shift_by, 16) * max) >> 16; + return (GB(seed, shift_by, 16) * ClampTo(max)) >> 16; } @@ -179,7 +179,7 @@ static inline uint32_t SeedChance(uint8_t shift_by, int max, uint32_t seed) * @param seed seed * @return seed transformed to a number from given range */ -static inline uint32_t SeedModChance(uint8_t shift_by, int max, uint32_t seed) +static inline uint32_t SeedModChance(uint8_t shift_by, size_t max, uint32_t seed) { /* This actually gives *MUCH* more even distribution of the values * than SeedChance(), which is absolutely horrible in that. If @@ -202,7 +202,7 @@ static inline uint32_t SeedModChance(uint8_t shift_by, int max, uint32_t seed) * @param bias minimum value that can be returned * @return seed transformed to a number from given range */ -static inline int32_t SeedChanceBias(uint8_t shift_by, int max, uint32_t seed, int bias) +static inline int32_t SeedChanceBias(uint8_t shift_by, size_t max, uint32_t seed, int bias) { return SeedChance(shift_by, max + bias, seed) - bias; } @@ -252,17 +252,17 @@ static void MakeEnglishOriginalTownName(StringBuilder &builder, uint32_t seed) size_t start = builder.CurrentIndex(); /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_original_english_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_original_english_1), seed, 50); if (i >= 0) builder += _name_original_english_1[i]; /* mandatory middle segments */ - builder += _name_original_english_2[SeedChance(4, lengthof(_name_original_english_2), seed)]; - builder += _name_original_english_3[SeedChance(7, lengthof(_name_original_english_3), seed)]; - builder += _name_original_english_4[SeedChance(10, lengthof(_name_original_english_4), seed)]; - builder += _name_original_english_5[SeedChance(13, lengthof(_name_original_english_5), seed)]; + builder += _name_original_english_2[SeedChance(4, std::size(_name_original_english_2), seed)]; + builder += _name_original_english_3[SeedChance(7, std::size(_name_original_english_3), seed)]; + builder += _name_original_english_4[SeedChance(10, std::size(_name_original_english_4), seed)]; + builder += _name_original_english_5[SeedChance(13, std::size(_name_original_english_5), seed)]; /* optional last segment */ - i = SeedChanceBias(15, lengthof(_name_original_english_6), seed, 60); + i = SeedChanceBias(15, std::size(_name_original_english_6), seed, 60); if (i >= 0) builder += _name_original_english_6[i]; /* Ce, Ci => Ke, Ki */ @@ -285,25 +285,25 @@ static void MakeEnglishAdditionalTownName(StringBuilder &builder, uint32_t seed) size_t start = builder.CurrentIndex(); /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_additional_english_prefix), seed, 50); + int i = SeedChanceBias(0, std::size(_name_additional_english_prefix), seed, 50); if (i >= 0) builder += _name_additional_english_prefix[i]; if (SeedChance(3, 20, seed) >= 14) { - builder += _name_additional_english_1a[SeedChance(6, lengthof(_name_additional_english_1a), seed)]; + builder += _name_additional_english_1a[SeedChance(6, std::size(_name_additional_english_1a), seed)]; } else { - builder += _name_additional_english_1b1[SeedChance(6, lengthof(_name_additional_english_1b1), seed)]; - builder += _name_additional_english_1b2[SeedChance(9, lengthof(_name_additional_english_1b2), seed)]; + builder += _name_additional_english_1b1[SeedChance(6, std::size(_name_additional_english_1b1), seed)]; + builder += _name_additional_english_1b2[SeedChance(9, std::size(_name_additional_english_1b2), seed)]; if (SeedChance(11, 20, seed) >= 4) { - builder += _name_additional_english_1b3a[SeedChance(12, lengthof(_name_additional_english_1b3a), seed)]; + builder += _name_additional_english_1b3a[SeedChance(12, std::size(_name_additional_english_1b3a), seed)]; } else { - builder += _name_additional_english_1b3b[SeedChance(12, lengthof(_name_additional_english_1b3b), seed)]; + builder += _name_additional_english_1b3b[SeedChance(12, std::size(_name_additional_english_1b3b), seed)]; } } - builder += _name_additional_english_2[SeedChance(14, lengthof(_name_additional_english_2), seed)]; + builder += _name_additional_english_2[SeedChance(14, std::size(_name_additional_english_2), seed)]; /* optional last segment */ - i = SeedChanceBias(15, lengthof(_name_additional_english_3), seed, 60); + i = SeedChanceBias(15, std::size(_name_additional_english_3), seed, 60); if (i >= 0) builder += _name_additional_english_3[i]; assert(builder.CurrentIndex() - start >= 4); @@ -319,7 +319,7 @@ static void MakeEnglishAdditionalTownName(StringBuilder &builder, uint32_t seed) static void MakeAustrianTownName(StringBuilder &builder, uint32_t seed) { /* Bad, Maria, Gross, ... */ - int i = SeedChanceBias(0, lengthof(_name_austrian_a1), seed, 15); + int i = SeedChanceBias(0, std::size(_name_austrian_a1), seed, 15); if (i >= 0) builder += _name_austrian_a1[i]; int j = 0; @@ -327,27 +327,27 @@ static void MakeAustrianTownName(StringBuilder &builder, uint32_t seed) i = SeedChance(4, 6, seed); if (i >= 4) { /* Kaisers-kirchen */ - builder += _name_austrian_a2[SeedChance( 7, lengthof(_name_austrian_a2), seed)]; - builder += _name_austrian_a3[SeedChance(13, lengthof(_name_austrian_a3), seed)]; + builder += _name_austrian_a2[SeedChance( 7, std::size(_name_austrian_a2), seed)]; + builder += _name_austrian_a3[SeedChance(13, std::size(_name_austrian_a3), seed)]; } else if (i >= 2) { /* St. Johann */ - builder += _name_austrian_a5[SeedChance( 7, lengthof(_name_austrian_a5), seed)]; - builder += _name_austrian_a6[SeedChance( 9, lengthof(_name_austrian_a6), seed)]; + builder += _name_austrian_a5[SeedChance( 7, std::size(_name_austrian_a5), seed)]; + builder += _name_austrian_a6[SeedChance( 9, std::size(_name_austrian_a6), seed)]; j = 1; // More likely to have a " an der " or " am " } else { /* Zell */ - builder += _name_austrian_a4[SeedChance( 7, lengthof(_name_austrian_a4), seed)]; + builder += _name_austrian_a4[SeedChance( 7, std::size(_name_austrian_a4), seed)]; } i = SeedChance(1, 6, seed); if (i >= 4 - j) { /* an der Donau (rivers) */ - builder += _name_austrian_f1[SeedChance(4, lengthof(_name_austrian_f1), seed)]; - builder += _name_austrian_f2[SeedChance(5, lengthof(_name_austrian_f2), seed)]; + builder += _name_austrian_f1[SeedChance(4, std::size(_name_austrian_f1), seed)]; + builder += _name_austrian_f2[SeedChance(5, std::size(_name_austrian_f2), seed)]; } else if (i >= 2 - j) { /* am Dachstein (mountains) */ - builder += _name_austrian_b1[SeedChance(4, lengthof(_name_austrian_b1), seed)]; - builder += _name_austrian_b2[SeedChance(5, lengthof(_name_austrian_b2), seed)]; + builder += _name_austrian_b1[SeedChance(4, std::size(_name_austrian_b1), seed)]; + builder += _name_austrian_b2[SeedChance(5, std::size(_name_austrian_b2), seed)]; } } @@ -363,30 +363,30 @@ static void MakeGermanTownName(StringBuilder &builder, uint32_t seed) /* optional prefix */ if (seed_derivative == 12 || seed_derivative == 19) { - uint i = SeedChance(2, lengthof(_name_german_pre), seed); + uint i = SeedChance(2, std::size(_name_german_pre), seed); builder += _name_german_pre[i]; } /* mandatory middle segments including option of hardcoded name */ - uint i = SeedChance(3, lengthof(_name_german_real) + lengthof(_name_german_1), seed); - if (i < lengthof(_name_german_real)) { + uint i = SeedChance(3, std::size(_name_german_real) + std::size(_name_german_1), seed); + if (i < std::size(_name_german_real)) { builder += _name_german_real[i]; } else { - builder += _name_german_1[i - lengthof(_name_german_real)]; + builder += _name_german_1[i - std::size(_name_german_real)]; - i = SeedChance(5, lengthof(_name_german_2), seed); + i = SeedChance(5, std::size(_name_german_2), seed); builder += _name_german_2[i]; } /* optional suffix */ if (seed_derivative == 24) { - i = SeedChance(9, lengthof(_name_german_4_an_der) + lengthof(_name_german_4_am), seed); - if (i < lengthof(_name_german_4_an_der)) { + i = SeedChance(9, std::size(_name_german_4_an_der) + std::size(_name_german_4_am), seed); + if (i < std::size(_name_german_4_an_der)) { builder += _name_german_3_an_der[0]; builder += _name_german_4_an_der[i]; } else { builder += _name_german_3_am[0]; - builder += _name_german_4_am[i - lengthof(_name_german_4_an_der)]; + builder += _name_german_4_am[i - std::size(_name_german_4_an_der)]; } } } @@ -399,7 +399,7 @@ static void MakeGermanTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSpanishTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_spanish_real[SeedChance(0, lengthof(_name_spanish_real), seed)]; + builder += _name_spanish_real[SeedChance(0, std::size(_name_spanish_real), seed)]; } @@ -410,7 +410,7 @@ static void MakeSpanishTownName(StringBuilder &builder, uint32_t seed) */ static void MakeFrenchTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_french_real[SeedChance(0, lengthof(_name_french_real), seed)]; + builder += _name_french_real[SeedChance(0, std::size(_name_french_real), seed)]; } @@ -421,8 +421,8 @@ static void MakeFrenchTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSillyTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_silly_1[SeedChance( 0, lengthof(_name_silly_1), seed)]; - builder += _name_silly_2[SeedChance(16, lengthof(_name_silly_2), seed)]; + builder += _name_silly_1[SeedChance( 0, std::size(_name_silly_1), seed)]; + builder += _name_silly_2[SeedChance(16, std::size(_name_silly_2), seed)]; } @@ -434,19 +434,19 @@ static void MakeSillyTownName(StringBuilder &builder, uint32_t seed) static void MakeSwedishTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_swedish_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_swedish_1), seed, 50); if (i >= 0) builder += _name_swedish_1[i]; /* mandatory middle segments including option of hardcoded name */ if (SeedChance(4, 5, seed) >= 3) { - builder += _name_swedish_2[SeedChance( 7, lengthof(_name_swedish_2), seed)]; + builder += _name_swedish_2[SeedChance( 7, std::size(_name_swedish_2), seed)]; } else { - builder += _name_swedish_2a[SeedChance( 7, lengthof(_name_swedish_2a), seed)]; - builder += _name_swedish_2b[SeedChance(10, lengthof(_name_swedish_2b), seed)]; - builder += _name_swedish_2c[SeedChance(13, lengthof(_name_swedish_2c), seed)]; + builder += _name_swedish_2a[SeedChance( 7, std::size(_name_swedish_2a), seed)]; + builder += _name_swedish_2b[SeedChance(10, std::size(_name_swedish_2b), seed)]; + builder += _name_swedish_2c[SeedChance(13, std::size(_name_swedish_2c), seed)]; } - builder += _name_swedish_3[SeedChance(16, lengthof(_name_swedish_3), seed)]; + builder += _name_swedish_3[SeedChance(16, std::size(_name_swedish_3), seed)]; } @@ -458,18 +458,18 @@ static void MakeSwedishTownName(StringBuilder &builder, uint32_t seed) static void MakeDutchTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_dutch_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_dutch_1), seed, 50); if (i >= 0) builder += _name_dutch_1[i]; /* mandatory middle segments including option of hardcoded name */ if (SeedChance(6, 9, seed) > 4) { - builder += _name_dutch_2[SeedChance( 9, lengthof(_name_dutch_2), seed)]; + builder += _name_dutch_2[SeedChance( 9, std::size(_name_dutch_2), seed)]; } else { - builder += _name_dutch_3[SeedChance( 9, lengthof(_name_dutch_3), seed)]; - builder += _name_dutch_4[SeedChance(12, lengthof(_name_dutch_4), seed)]; + builder += _name_dutch_3[SeedChance( 9, std::size(_name_dutch_3), seed)]; + builder += _name_dutch_4[SeedChance(12, std::size(_name_dutch_4), seed)]; } - builder += _name_dutch_5[SeedChance(15, lengthof(_name_dutch_5), seed)]; + builder += _name_dutch_5[SeedChance(15, std::size(_name_dutch_5), seed)]; } @@ -484,7 +484,7 @@ static void MakeFinnishTownName(StringBuilder &builder, uint32_t seed) /* Select randomly if town name should consists of one or two parts. */ if (SeedChance(0, 15, seed) >= 10) { - builder += _name_finnish_real[SeedChance(2, lengthof(_name_finnish_real), seed)]; + builder += _name_finnish_real[SeedChance(2, std::size(_name_finnish_real), seed)]; return; } @@ -492,7 +492,7 @@ static void MakeFinnishTownName(StringBuilder &builder, uint32_t seed) /* A two-part name by combining one of _name_finnish_1 + "la"/"lä" * The reason for not having the contents of _name_finnish_{1,2} in the same table is * that the ones in _name_finnish_2 are not good for this purpose. */ - uint sel = SeedChance( 0, lengthof(_name_finnish_1), seed); + uint sel = SeedChance( 0, std::size(_name_finnish_1), seed); builder += _name_finnish_1[sel]; size_t last = builder.CurrentIndex() - 1; if (builder[last] == 'i') builder[last] = 'e'; @@ -508,14 +508,14 @@ static void MakeFinnishTownName(StringBuilder &builder, uint32_t seed) /* A two-part name by combining one of _name_finnish_{1,2} + _name_finnish_3. * Why aren't _name_finnish_{1,2} just one table? See above. */ - uint sel = SeedChance(2, lengthof(_name_finnish_1) + lengthof(_name_finnish_2), seed); - if (sel >= lengthof(_name_finnish_1)) { - builder += _name_finnish_2[sel - lengthof(_name_finnish_1)]; + uint sel = SeedChance(2, std::size(_name_finnish_1) + std::size(_name_finnish_2), seed); + if (sel >= std::size(_name_finnish_1)) { + builder += _name_finnish_2[sel - std::size(_name_finnish_1)]; } else { builder += _name_finnish_1[sel]; } - builder += _name_finnish_3[SeedChance(10, lengthof(_name_finnish_3), seed)]; + builder += _name_finnish_3[SeedChance(10, std::size(_name_finnish_3), seed)]; } @@ -528,53 +528,53 @@ static void MakePolishTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ uint i = SeedChance(0, - lengthof(_name_polish_2_o) + lengthof(_name_polish_2_m) + - lengthof(_name_polish_2_f) + lengthof(_name_polish_2_n), + std::size(_name_polish_2_o) + std::size(_name_polish_2_m) + + std::size(_name_polish_2_f) + std::size(_name_polish_2_n), seed); uint j = SeedChance(2, 20, seed); - if (i < lengthof(_name_polish_2_o)) { - builder += _name_polish_2_o[SeedChance(3, lengthof(_name_polish_2_o), seed)]; + if (i < std::size(_name_polish_2_o)) { + builder += _name_polish_2_o[SeedChance(3, std::size(_name_polish_2_o), seed)]; return; } - if (i < lengthof(_name_polish_2_m) + lengthof(_name_polish_2_o)) { + if (i < std::size(_name_polish_2_m) + std::size(_name_polish_2_o)) { if (j < 4) { - builder += _name_polish_1_m[SeedChance(5, lengthof(_name_polish_1_m), seed)]; + builder += _name_polish_1_m[SeedChance(5, std::size(_name_polish_1_m), seed)]; } - builder += _name_polish_2_m[SeedChance(7, lengthof(_name_polish_2_m), seed)]; + builder += _name_polish_2_m[SeedChance(7, std::size(_name_polish_2_m), seed)]; if (j >= 4 && j < 16) { - builder += _name_polish_3_m[SeedChance(10, lengthof(_name_polish_3_m), seed)]; + builder += _name_polish_3_m[SeedChance(10, std::size(_name_polish_3_m), seed)]; } return; } - if (i < lengthof(_name_polish_2_f) + lengthof(_name_polish_2_m) + lengthof(_name_polish_2_o)) { + if (i < std::size(_name_polish_2_f) + std::size(_name_polish_2_m) + std::size(_name_polish_2_o)) { if (j < 4) { - builder += _name_polish_1_f[SeedChance(5, lengthof(_name_polish_1_f), seed)]; + builder += _name_polish_1_f[SeedChance(5, std::size(_name_polish_1_f), seed)]; } - builder += _name_polish_2_f[SeedChance(7, lengthof(_name_polish_2_f), seed)]; + builder += _name_polish_2_f[SeedChance(7, std::size(_name_polish_2_f), seed)]; if (j >= 4 && j < 16) { - builder += _name_polish_3_f[SeedChance(10, lengthof(_name_polish_3_f), seed)]; + builder += _name_polish_3_f[SeedChance(10, std::size(_name_polish_3_f), seed)]; } return; } if (j < 4) { - builder += _name_polish_1_n[SeedChance(5, lengthof(_name_polish_1_n), seed)]; + builder += _name_polish_1_n[SeedChance(5, std::size(_name_polish_1_n), seed)]; } - builder += _name_polish_2_n[SeedChance(7, lengthof(_name_polish_2_n), seed)]; + builder += _name_polish_2_n[SeedChance(7, std::size(_name_polish_2_n), seed)]; if (j >= 4 && j < 16) { - builder += _name_polish_3_n[SeedChance(10, lengthof(_name_polish_3_n), seed)]; + builder += _name_polish_3_n[SeedChance(10, std::size(_name_polish_3_n), seed)]; } return; @@ -590,7 +590,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) { /* 1:3 chance to use a real name. */ if (SeedModChance(0, 4, seed) == 0) { - builder += _name_czech_real[SeedModChance(4, lengthof(_name_czech_real), seed)]; + builder += _name_czech_real[SeedModChance(4, std::size(_name_czech_real), seed)]; return; } @@ -603,57 +603,57 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) /* IDs of the respective parts */ int prefix = 0, ending = 0, suffix = 0; - uint postfix = 0; - uint stem; + size_t postfix = 0; + size_t stem; /* The select criteria. */ CzechGender gender; CzechChoose choose; CzechAllow allow; - if (do_prefix) prefix = SeedModChance(5, lengthof(_name_czech_adj) * 12, seed) / 12; - if (do_suffix) suffix = SeedModChance(7, lengthof(_name_czech_suffix), seed); + if (do_prefix) prefix = SeedModChance(5, std::size(_name_czech_adj) * 12, seed) / 12; + if (do_suffix) suffix = SeedModChance(7, std::size(_name_czech_suffix), seed); /* 3:1 chance 3:1 to use dynamic substantive */ stem = SeedModChance(9, - lengthof(_name_czech_subst_full) + 3 * lengthof(_name_czech_subst_stem), + std::size(_name_czech_subst_full) + 3 * std::size(_name_czech_subst_stem), seed); - if (stem < lengthof(_name_czech_subst_full)) { + if (stem < std::size(_name_czech_subst_full)) { /* That was easy! */ dynamic_subst = false; gender = _name_czech_subst_full[stem].gender; choose = _name_czech_subst_full[stem].choose; allow = _name_czech_subst_full[stem].allow; } else { - uint map[lengthof(_name_czech_subst_ending)]; + uint map[std::size(_name_czech_subst_ending)]; int ending_start = -1, ending_stop = -1; /* Load the substantive */ dynamic_subst = true; - stem -= lengthof(_name_czech_subst_full); - stem %= lengthof(_name_czech_subst_stem); + stem -= std::size(_name_czech_subst_full); + stem %= std::size(_name_czech_subst_stem); gender = _name_czech_subst_stem[stem].gender; choose = _name_czech_subst_stem[stem].choose; allow = _name_czech_subst_stem[stem].allow; /* Load the postfix (1:1 chance that a postfix will be inserted) */ - postfix = SeedModChance(14, lengthof(_name_czech_subst_postfix) * 2, seed); + postfix = SeedModChance(14, std::size(_name_czech_subst_postfix) * 2, seed); if (choose & CZC_POSTFIX) { /* Always get a real postfix. */ - postfix %= lengthof(_name_czech_subst_postfix); + postfix %= std::size(_name_czech_subst_postfix); } if (choose & CZC_NOPOSTFIX) { /* Always drop a postfix. */ - postfix += lengthof(_name_czech_subst_postfix); + postfix += std::size(_name_czech_subst_postfix); } - if (postfix < lengthof(_name_czech_subst_postfix)) { + if (postfix < std::size(_name_czech_subst_postfix)) { choose |= CZC_POSTFIX; } else { choose |= CZC_NOPOSTFIX; } /* Localize the array segment containing a good gender */ - for (ending = 0; ending < (int)lengthof(_name_czech_subst_ending); ending++) { + for (ending = 0; ending < (int)std::size(_name_czech_subst_ending); ending++) { const CzechNameSubst *e = &_name_czech_subst_ending[ending]; if (gender == CZG_FREE || @@ -719,7 +719,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) if (dynamic_subst) { builder += _name_czech_subst_stem[stem].name; - if (postfix < lengthof(_name_czech_subst_postfix)) { + if (postfix < std::size(_name_czech_subst_postfix)) { const char *poststr = _name_czech_subst_postfix[postfix]; const char *endstr = _name_czech_subst_ending[ending].name; @@ -763,7 +763,7 @@ static void MakeCzechTownName(StringBuilder &builder, uint32_t seed) */ static void MakeRomanianTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_romanian_real[SeedChance(0, lengthof(_name_romanian_real), seed)]; + builder += _name_romanian_real[SeedChance(0, std::size(_name_romanian_real), seed)]; } @@ -774,7 +774,7 @@ static void MakeRomanianTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSlovakTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_slovak_real[SeedChance(0, lengthof(_name_slovak_real), seed)]; + builder += _name_slovak_real[SeedChance(0, std::size(_name_slovak_real), seed)]; } @@ -789,14 +789,14 @@ static void MakeNorwegianTownName(StringBuilder &builder, uint32_t seed) * have a real name 3/16 chance. Bit 0-3 */ if (SeedChance(0, 15, seed) < 3) { /* Use 7bit for the realname table index. Bit 4-10 */ - builder += _name_norwegian_real[SeedChance(4, lengthof(_name_norwegian_real), seed)]; + builder += _name_norwegian_real[SeedChance(4, std::size(_name_norwegian_real), seed)]; return; } /* Use 7bit for the first fake part. Bit 4-10 */ - builder += _name_norwegian_1[SeedChance(4, lengthof(_name_norwegian_1), seed)]; + builder += _name_norwegian_1[SeedChance(4, std::size(_name_norwegian_1), seed)]; /* Use 7bit for the last fake part. Bit 11-17 */ - builder += _name_norwegian_2[SeedChance(11, lengthof(_name_norwegian_2), seed)]; + builder += _name_norwegian_2[SeedChance(11, std::size(_name_norwegian_2), seed)]; } @@ -808,21 +808,21 @@ static void MakeNorwegianTownName(StringBuilder &builder, uint32_t seed) static void MakeHungarianTownName(StringBuilder &builder, uint32_t seed) { if (SeedChance(12, 15, seed) < 3) { - builder += _name_hungarian_real[SeedChance(0, lengthof(_name_hungarian_real), seed)]; + builder += _name_hungarian_real[SeedChance(0, std::size(_name_hungarian_real), seed)]; return; } /* optional first segment */ - uint i = SeedChance(3, lengthof(_name_hungarian_1) * 3, seed); - if (i < lengthof(_name_hungarian_1)) builder += _name_hungarian_1[i]; + uint i = SeedChance(3, std::size(_name_hungarian_1) * 3, seed); + if (i < std::size(_name_hungarian_1)) builder += _name_hungarian_1[i]; /* mandatory middle segments */ - builder += _name_hungarian_2[SeedChance(3, lengthof(_name_hungarian_2), seed)]; - builder += _name_hungarian_3[SeedChance(6, lengthof(_name_hungarian_3), seed)]; + builder += _name_hungarian_2[SeedChance(3, std::size(_name_hungarian_2), seed)]; + builder += _name_hungarian_3[SeedChance(6, std::size(_name_hungarian_3), seed)]; /* optional last segment */ - i = SeedChance(10, lengthof(_name_hungarian_4) * 3, seed); - if (i < lengthof(_name_hungarian_4)) { + i = SeedChance(10, std::size(_name_hungarian_4) * 3, seed); + if (i < std::size(_name_hungarian_4)) { builder += _name_hungarian_4[i]; } } @@ -835,7 +835,7 @@ static void MakeHungarianTownName(StringBuilder &builder, uint32_t seed) */ static void MakeSwissTownName(StringBuilder &builder, uint32_t seed) { - builder += _name_swiss_real[SeedChance(0, lengthof(_name_swiss_real), seed)]; + builder += _name_swiss_real[SeedChance(0, std::size(_name_swiss_real), seed)]; } @@ -847,12 +847,12 @@ static void MakeSwissTownName(StringBuilder &builder, uint32_t seed) static void MakeDanishTownName(StringBuilder &builder, uint32_t seed) { /* optional first segment */ - int i = SeedChanceBias(0, lengthof(_name_danish_1), seed, 50); + int i = SeedChanceBias(0, std::size(_name_danish_1), seed, 50); if (i >= 0) builder += _name_danish_1[i]; /* middle segments removed as this algorithm seems to create much more realistic names */ - builder += _name_danish_2[SeedChance( 7, lengthof(_name_danish_2), seed)]; - builder += _name_danish_3[SeedChance(16, lengthof(_name_danish_3), seed)]; + builder += _name_danish_2[SeedChance( 7, std::size(_name_danish_2), seed)]; + builder += _name_danish_3[SeedChance(16, std::size(_name_danish_3), seed)]; } @@ -867,24 +867,24 @@ static void MakeTurkishTownName(StringBuilder &builder, uint32_t seed) switch (i) { case 0: - builder += _name_turkish_prefix[SeedModChance( 2, lengthof(_name_turkish_prefix), seed)]; + builder += _name_turkish_prefix[SeedModChance( 2, std::size(_name_turkish_prefix), seed)]; /* middle segment */ - builder += _name_turkish_middle[SeedModChance( 4, lengthof(_name_turkish_middle), seed)]; + builder += _name_turkish_middle[SeedModChance( 4, std::size(_name_turkish_middle), seed)]; /* optional suffix */ if (SeedModChance(0, 7, seed) == 0) { - builder += _name_turkish_suffix[SeedModChance( 10, lengthof(_name_turkish_suffix), seed)]; + builder += _name_turkish_suffix[SeedModChance( 10, std::size(_name_turkish_suffix), seed)]; } break; case 1: case 2: - builder += _name_turkish_prefix[SeedModChance( 2, lengthof(_name_turkish_prefix), seed)]; - builder += _name_turkish_suffix[SeedModChance( 4, lengthof(_name_turkish_suffix), seed)]; + builder += _name_turkish_prefix[SeedModChance( 2, std::size(_name_turkish_prefix), seed)]; + builder += _name_turkish_suffix[SeedModChance( 4, std::size(_name_turkish_suffix), seed)]; break; default: - builder += _name_turkish_real[SeedModChance( 4, lengthof(_name_turkish_real), seed)]; + builder += _name_turkish_real[SeedModChance( 4, std::size(_name_turkish_real), seed)]; break; } } @@ -898,7 +898,7 @@ static void MakeTurkishTownName(StringBuilder &builder, uint32_t seed) static void MakeItalianTownName(StringBuilder &builder, uint32_t seed) { if (SeedModChance(0, 6, seed) == 0) { // real city names - builder += _name_italian_real[SeedModChance(4, lengthof(_name_italian_real), seed)]; + builder += _name_italian_real[SeedModChance(4, std::size(_name_italian_real), seed)]; return; } @@ -908,29 +908,29 @@ static void MakeItalianTownName(StringBuilder &builder, uint32_t seed) }; if (SeedModChance(0, 8, seed) == 0) { // prefix - builder += _name_italian_pref[SeedModChance(11, lengthof(_name_italian_pref), seed)]; + builder += _name_italian_pref[SeedModChance(11, std::size(_name_italian_pref), seed)]; } uint i = SeedChance(0, 2, seed); if (i == 0) { // masculine form - builder += _name_italian_1m[SeedModChance(4, lengthof(_name_italian_1m), seed)]; + builder += _name_italian_1m[SeedModChance(4, std::size(_name_italian_1m), seed)]; } else { // feminine form - builder += _name_italian_1f[SeedModChance(4, lengthof(_name_italian_1f), seed)]; + builder += _name_italian_1f[SeedModChance(4, std::size(_name_italian_1f), seed)]; } if (SeedModChance(3, 3, seed) == 0) { - builder += _name_italian_2[SeedModChance(11, lengthof(_name_italian_2), seed)]; + builder += _name_italian_2[SeedModChance(11, std::size(_name_italian_2), seed)]; builder += mascul_femin_italian[i]; } else { - builder += _name_italian_2i[SeedModChance(16, lengthof(_name_italian_2i), seed)]; + builder += _name_italian_2i[SeedModChance(16, std::size(_name_italian_2i), seed)]; } if (SeedModChance(15, 4, seed) == 0) { if (SeedModChance(5, 2, seed) == 0) { // generic suffix - builder += _name_italian_3[SeedModChance(4, lengthof(_name_italian_3), seed)]; + builder += _name_italian_3[SeedModChance(4, std::size(_name_italian_3), seed)]; } else { // river name suffix - builder += _name_italian_river1[SeedModChance(4, lengthof(_name_italian_river1), seed)]; - builder += _name_italian_river2[SeedModChance(16, lengthof(_name_italian_river2), seed)]; + builder += _name_italian_river1[SeedModChance(4, std::size(_name_italian_river1), seed)]; + builder += _name_italian_river2[SeedModChance(16, std::size(_name_italian_river2), seed)]; } } } @@ -944,28 +944,28 @@ static void MakeItalianTownName(StringBuilder &builder, uint32_t seed) static void MakeCatalanTownName(StringBuilder &builder, uint32_t seed) { if (SeedModChance(0, 3, seed) == 0) { // real city names - builder += _name_catalan_real[SeedModChance(4, lengthof(_name_catalan_real), seed)]; + builder += _name_catalan_real[SeedModChance(4, std::size(_name_catalan_real), seed)]; return; } if (SeedModChance(0, 2, seed) == 0) { // prefix - builder += _name_catalan_pref[SeedModChance(11, lengthof(_name_catalan_pref), seed)]; + builder += _name_catalan_pref[SeedModChance(11, std::size(_name_catalan_pref), seed)]; } uint i = SeedChance(0, 2, seed); if (i == 0) { // masculine form - builder += _name_catalan_1m[SeedModChance(4, lengthof(_name_catalan_1m), seed)]; - builder += _name_catalan_2m[SeedModChance(11, lengthof(_name_catalan_2m), seed)]; + builder += _name_catalan_1m[SeedModChance(4, std::size(_name_catalan_1m), seed)]; + builder += _name_catalan_2m[SeedModChance(11, std::size(_name_catalan_2m), seed)]; } else { // feminine form - builder += _name_catalan_1f[SeedModChance(4, lengthof(_name_catalan_1f), seed)]; - builder += _name_catalan_2f[SeedModChance(11, lengthof(_name_catalan_2f), seed)]; + builder += _name_catalan_1f[SeedModChance(4, std::size(_name_catalan_1f), seed)]; + builder += _name_catalan_2f[SeedModChance(11, std::size(_name_catalan_2f), seed)]; } if (SeedModChance(15, 5, seed) == 0) { if (SeedModChance(5, 2, seed) == 0) { // generic suffix - builder += _name_catalan_3[SeedModChance(4, lengthof(_name_catalan_3), seed)]; + builder += _name_catalan_3[SeedModChance(4, std::size(_name_catalan_3), seed)]; } else { // river name suffix - builder += _name_catalan_river1[SeedModChance(4, lengthof(_name_catalan_river1), seed)]; + builder += _name_catalan_river1[SeedModChance(4, std::size(_name_catalan_river1), seed)]; } } } @@ -1012,6 +1012,6 @@ static TownNameGenerator *_town_name_generators[] = { */ void GenerateTownNameString(StringBuilder &builder, size_t lang, uint32_t seed) { - assert(lang < lengthof(_town_name_generators)); + assert(lang < std::size(_town_name_generators)); return _town_name_generators[lang](builder, seed); } From 62f5c595f379880fd0ebb866622a9f8d5ec9db0d Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 21:55:40 +0200 Subject: [PATCH 12/26] Codechange: use range-based for loops and let count be correct count --- src/video/allegro_v.cpp | 11 +++++------ src/video/sdl2_v.cpp | 24 +++++++++++------------- src/video/sdl_v.cpp | 11 +++++------ src/video/win32_v.cpp | 11 +++++------ 4 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 716c46b773..77c90e1536 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -251,8 +251,8 @@ struct AllegroVkMapping { uint8_t map_to; }; -#define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, y - x, z} +#define AS(x, z) {x, 1, z} +#define AM(x, y, z, w) {x, y - x + 1, z} static const AllegroVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -312,12 +312,11 @@ static uint32_t ConvertAllegroKeyIntoMy(char32_t *character) int scancode; int unicode = ureadkey(&scancode); - const AllegroVkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(scancode - map->vk_from) <= map->vk_count) { - key = scancode - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(scancode, map.vk_from, map.vk_count)) { + key = scancode - map.vk_from + map.map_to; break; } } diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index 585571385d..d79016f6da 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -246,10 +246,10 @@ struct SDLVkMapping { bool unprintable; }; -#define AS(x, z) {x, 0, z, false} -#define AM(x, y, z, w) {x, (uint8_t)(y - x), z, false} -#define AS_UP(x, z) {x, 0, z, true} -#define AM_UP(x, y, z, w) {x, (uint8_t)(y - x), z, true} +#define AS(x, z) {x, 1, z, false} +#define AM(x, y, z, w) {x, (uint8_t)(y - x + 1), z, false} +#define AS_UP(x, z) {x, 1, z, true} +#define AM_UP(x, y, z, w) {x, (uint8_t)(y - x + 1), z, true} static const SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -306,14 +306,13 @@ static const SDLVkMapping _vk_mapping[] = { static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, char32_t *character) { - const SDLVkMapping *map; uint key = 0; bool unprintable = false; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(sym->sym - map->vk_from) <= map->vk_count) { - key = sym->sym - map->vk_from + map->map_to; - unprintable = map->unprintable; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + key = sym->sym - map.vk_from + map.map_to; + unprintable = map.unprintable; break; } } @@ -346,12 +345,11 @@ static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, char32_t *character) */ static uint ConvertSdlKeycodeIntoMy(SDL_Keycode kc) { - const SDLVkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(kc - map->vk_from) <= map->vk_count) { - key = kc - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(kc, map.vk_from, map.vk_count)) { + key = kc - map.vk_from + map.map_to; break; } } diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index a950d4d65d..f68168b036 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -378,8 +378,8 @@ struct SDLVkMapping { uint8_t map_to; }; -#define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, (uint8_t)(y - x), z} +#define AS(x, z) {x, 1, z} +#define AM(x, y, z, w) {x, (uint8_t)(y - x + 1), z} static const SDLVkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -435,12 +435,11 @@ static const SDLVkMapping _vk_mapping[] = { static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, char32_t *character) { - const SDLVkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(sym->sym - map->vk_from) <= map->vk_count) { - key = sym->sym - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + key = sym->sym - map.vk_from + map.map_to; break; } } diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index b820842966..7c055d253a 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -61,8 +61,8 @@ struct Win32VkMapping { uint8_t map_to; }; -#define AS(x, z) {x, 0, z} -#define AM(x, y, z, w) {x, y - x, z} +#define AS(x, z) {x, 1, z} +#define AM(x, y, z, w) {x, y - x + 1, z} static const Win32VkMapping _vk_mapping[] = { /* Pageup stuff + up/down */ @@ -107,12 +107,11 @@ static const Win32VkMapping _vk_mapping[] = { static uint MapWindowsKey(uint sym) { - const Win32VkMapping *map; uint key = 0; - for (map = _vk_mapping; map != endof(_vk_mapping); ++map) { - if ((uint)(sym - map->vk_from) <= map->vk_count) { - key = sym - map->vk_from + map->map_to; + for (const auto &map : _vk_mapping) { + if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + key = sym - map.vk_from + map.map_to; break; } } From 095bdf32fed5c23a1c44785fd40d8bb0610ca617 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 8 Apr 2024 04:41:24 +0000 Subject: [PATCH 13/26] Update: Translations from eints greek: 5 changes by gh658804 finnish: 7 changes by hpiirai ukrainian: 56 changes by Quantom2, 14 changes by imlystyi latvian: 14 changes by lexuslatvia portuguese: 14 changes by azulcosta portuguese (brazilian): 10 changes by pasantoro polish: 5 changes by pAter-exe --- src/lang/brazilian_portuguese.txt | 15 ++-- src/lang/finnish.txt | 9 +- src/lang/greek.txt | 5 ++ src/lang/latvian.txt | 21 +++-- src/lang/polish.txt | 5 ++ src/lang/portuguese.txt | 23 +++-- src/lang/ukrainian.txt | 140 +++++++++++++++--------------- 7 files changed, 125 insertions(+), 93 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 467621c974..d026c10fcb 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -836,11 +836,11 @@ STR_NEWS_FIRST_CARGO_TRAM_ARRIVAL :{BIG_FONT}{BLAC STR_NEWS_FIRST_SHIP_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira embarcação chega em {STATION}! STR_NEWS_FIRST_AIRCRAFT_ARRIVAL :{BIG_FONT}{BLACK}Cidadãos celebram . . .{}Primeira aeronave chega em {STATION}! -STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morrem na explosão após a colisão +STR_NEWS_TRAIN_CRASH :{BIG_FONT}{BLACK}Acidente de Trem!{}{COMMA} morre{P "" m} na explosão após a colisão STR_NEWS_ROAD_VEHICLE_CRASH_DRIVER :{BIG_FONT}{BLACK}Acidente Rodoviário!{}Condutor morre na explosão após a colisão com um trem -STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Acidente Rodoviário!{}{COMMA} morrem na explosão após a colisão com um trem -STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morrem na explosão em {STATION} -STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morrem na explosão +STR_NEWS_ROAD_VEHICLE_CRASH :{BIG_FONT}{BLACK}Acidente Rodoviário!{}{COMMA} morre{P "" m} na explosão após a colisão com um trem +STR_NEWS_AIRCRAFT_CRASH :{BIG_FONT}{BLACK}Acidente Aéreo!{}{COMMA} morre{P "" m} na explosão em {STATION} +STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLACK}Acidente Aéreo!{}Aeronave ficou sem combustível, {COMMA} morre{P "" m} na explosão STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Desastre de Zepelim em {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}Veículo rodoviário destruído em colisão com OVNI! @@ -3088,7 +3088,7 @@ STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Constru STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Classe da estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tipo de estação: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Classe do aeroporto: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Nome do aeroporto: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Tipo de aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Nome do quadrado do aeroporto: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Carga aceita: {LTBLUE} @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alinhando sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alinhando sprite: Ação 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alinhando sprite: Ação 0x5, tipe {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Próximo sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Ir para o próximo sprite normal, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do último sprite para o primeiro STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o sprite @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Sprite a STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Ir para o sprite normal anterior, pulando quaisquer sprites falsos/recoloridos/tipo de letra, retornando do primeiro sprite para o último STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do sprite atualmente selecionado. O alinhamento é ignorado ao desenhar este sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Mover o sprite, alterando os deslocamentos X e Y. Ctrl+Clique para mover o sprite 8 unidades por vez +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centralizado @@ -5833,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 419ea35ac1..9e618188f2 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3488,6 +3488,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tien tyyppi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF muuttujan 60+x parametri (heksadesimaali) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Kohdistettava sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Kohdistettava sprite: Toimenpide 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Kohdistettava sprite: Toimenpide 0x5, tyyppi {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Seuraava sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Siirry seuraavaan tavalliseen spriteen; mahdolliset pseudo-, uudelleenväritys- ja fonttispritet ohitetaan; viimeisen spriten jälkeen siirrytään ensimmäiseen STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Mene spriteen @@ -3496,6 +3499,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Edelline STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Jatka edelliseen tavalliseen spriteen ja hyppää yli kaikki pseudo-/uudelleenväritetyt/fontti- spritet ja mene loppuun kun päästään ensimmäiseen STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Valitun spriten esitys. Siirrosta ei huomioida tätä spriteä piirrettäessä STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Liikuta spriteä ympäriinsä, muuttaen X- ja Y-sijainteja. Ctrl+napsautus siirtää spriteä kahdeksan yksikköä kerralla. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Siirros keskitetty @@ -3530,10 +3534,10 @@ STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF-tiedosto, j STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Liian monta NewGRF:ää on ladattu STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Lisäosan {1:STRING} lataaminen staattisena NewGRF:nä lisäosan {2:STRING} kanssa voi johtaa tahdistusvirheisiin STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Odottamaton sprite (sprite {3:NUM}) -STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Tuntematon Action 0-ominaisuus {4:HEX} (sprite {3:NUM}) +STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Tuntematon toimenpiteen 0 ominaisuus {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Yritys käyttää virheellistä ID:tä (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} sisältää korruptoituneen spriten. Kaikki korruptoituneet spritet näkyvät punaisina kysymysmerkkeinä (?) -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Sisältää useita Action 8-merkintöjä (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Toimenpide 8 esiintyy moneen kertaan (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Luku pseudo-spriten ohi (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Pyydetyt GRF-resurssit eivät ole saatavilla (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{2:STRING} poisti käytöstä NewGRF:n {1:STRING} @@ -5832,6 +5836,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 1d148d3428..dbd625b480 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3580,6 +3580,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Τύπος δρ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Μεταβλητή NewGRF 60+x παράμετρος (δεκαεξαδικό) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Στοίχηση sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Στοίχηση sprite: Ενέργεια 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Στοίχηση sprite: Ενέργεια 0x5, τύπος {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Επόμενο στοιχείο STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Συνέχισε στο επόμενο κανονικό sprite, προσπερνώντας οποιοδήποτε ψευδό/επαναναχρωματιζόμενο/γραμματοσειράς sprite και κάνε τις τελικές διαδικασίες στο τέλος STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Μετακίνηση στο στοιχείο @@ -3588,6 +3591,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Προη STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Προχώρησε στο προηγούμενο κανονικό sprite, προσπερνώντας οποιαδήποτε ψευδό/επαναχρωματιζόμενα/γραμματοσειράς sprites και ξαναεκτέλεσε τη διαδικασία από το πρώτο sprite ως το τελεταίο STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Επανεμφάνιση του επιλεγμένου sprite. Η ευθυγράμμιση αγνοείται όταν γίνεται η σχεδίαση του sprite STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Μετακίνηση του sprite τριγύρω, αλλάζοντας τα στίγματα Χ και Υ. Ctrl+Κλικ για να μετακινήσετε το sprite μονάδες τη φορά. +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Μετατόπιση κέντρου @@ -5936,6 +5940,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index df84824d63..9fb76b9052 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -1497,7 +1497,7 @@ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Transportlīdze STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Kad ieslēgts, visi transportlīdzekļu modeļi pēc to ieviešanas vienmēr ir pieejami STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Laika uzskaite: {STRING} -STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Izvēlieties spēles laika mērīšanas vienības. Vēlāk to nevar mainīt.{}{}Kalendāra pamatā ir klasiskā OpenTTD pieredze, kurā gads sastāv no 12 mēnešiem un katru mēnesi ir 28–31 diena.{}{}{}Uz sienas pulksteni balstītā laikā, kravu ražošanā un finansēs tā vietā tiek balstītas uz vienas minūtes soli, kas ir aptuveni tikpat ilgs, cik 30 dienu mēnesis aizņem kalendāra režīmā. Tie ir sagrupēti 12 minūšu periodos, kas ir līdzvērtīgi gadam kalendāra režīmā.{}{}{}Abos režīmos vienmēr ir klasisks kalendārs, kas tiek izmantots transportlīdzekļu, māju un citas infrastruktūras parādīšanās spēlē. +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Izvēlieties spēles laika mērīšanas vienības. Vēlāk to nevar mainīt.{}{}Kalendāra pamatā ir klasiskā OpenTTD pieredze, kurā gads sastāv no 12 mēnešiem un katrā mēnesī ir 28–31 diena.{}{}{}Uz sienas pulksteni balstītā laikā, kravu ražošanā un finanses tiek balstītas uz vienas minūtes soli, kas ir aptuveni tikpat ilgs laiks, cik 30 dienu mēnesis aizņem kalendāra režīmā. Tie ir sagrupēti 12 minūšu periodos, kas ir līdzvērtīgi gadam kalendāra režīmā.{}{}{}Abos no šiem režīmiem vienmēr ir klasisks kalendārs, kas tiek izmantots transportlīdzekļu, māju un citas infrastruktūras datu ievadīšanai. ###length 2 STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalendārs STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Sienas pulkstenis @@ -1569,7 +1569,7 @@ STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Sniega līnijas STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Izvēlieties, kādā augstumā sākas sniegs subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmi. Var mainīt tikai, izmantojot scenāriju redaktoru, vai citādi aprēķināt, izmantojot "sniega segumu" STR_CONFIG_SETTING_SNOW_COVERAGE :Sniega pārklājums: {STRING} -STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Izvēlieties aptuveno sniega daudzumu subarktiskajā ainavā. Sniegs ietekmē arī nozares ražošanas un pilsētu izaugsmei. Izmanto tikai kartes ģenerēšanas laikā. Uz jūras līmeņa un piekrastes abpagaliem nekad nav sniega. +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Izvēlieties aptuveno sniega daudzumu subarktiskajā ainavā. Sniegs ietekmē nozares ražošanas un pilsētu izaugsmes prasības. Izmanto tikai kartes ģenerēšanas laikā. Uz jūras līmeņa un piekrastes lauciņiem nekad nav sniega STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Tuksneša pārklājums: {STRING} @@ -1632,7 +1632,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši za STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Kravas plūsmu pārklājuma krāsas: {STRING} -STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Iestatiet kravas plūsmu pārklājumam izmantoto krāsu shēmu. +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Iestatiet kravas plūsmas pārklājumam izmantoto krāsu shēmu ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :Zaļš uz sarkanu (orģināli) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :Zaļš uz zilu @@ -2059,7 +2059,7 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Atpakaļceļa k STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Uzstādod šo mazāk par 100% liks simetriskajai sadalei izturēties vairāk kā asimetriskajai. Mazāk kravas ar varu tiks sūtīts atpakaļ ja noteikts daudzums tiks sūtīts uz piestātni. Ja jūs uzstādīsiet to uz 0% simetriskā sadale izturēsies tā pat kā asimetriskā. STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Īso ceļu piesātinājums pirms sākt izmantot augstas ietilpības ceļus: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Nereti starp divām stacijām ir vairāki ceļi. Kravu sadale vispirms piesātinās īsāko maršrutu, pēc tam izmantos nākamo īsāko maršrutu līdz tas būs piesātināts, un tā tālāk. Piesātinājumu nosaka novērtējot ietilpību un plānoto izmantojumu. Kad visi ceļi ir piesātināti un vēl ir palicis pieprasījumus, tas pārslogos visus ceļus, dodot priekšroku ceļiem ar lielāko ietilpību. Algoritms visbiežāk nepareizi novērtēs ietilpību. Šis iestatījums jums atļaus norādīt, līdz cik procentiem īsākais ceļš ir jāpiesātina pirmajā piegājienā pirms izvēlēties garāku ceļu. Iestatiet to uz mazāk kā 100%, lai izvairītos no pārpildītām stacijām, ja kapacitāte ir pārvērtēta. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Bieži starp divām noteiktām stacijām ir vairāki ceļi. Cargodist vispirms piesātinās īsāko ceļu, pēc tam izmantos otro īsāko ceļu, līdz tas ir piesātināts un tā tālāk. Piesātinājumu nosaka jaudas un plānotā lietojuma novērtējums. Kad tas būs piesātināts ar visiem ceļiem, ja joprojām būs pieprasījums, tas pārslogos visus ceļus, dodot priekšroku tiem, kuriem ir liela ietilpība. Tomēr lielāko daļu laika algoritms precīzi nenovērtēs jaudu. Šis iestatījums ļauj norādīt, cik procentus īsākam ceļam jābūt piesātinātam pirmajā piegājienā, pirms tiek izvēlēts nākamais garākais ceļš. Iestatiet to uz mazāku par 100%, lai izvairītos no pārpildītām stacijām pārmērīgas jaudas gadījumā STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Ātruma vienības (sauszemes): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Ātruma vienības (jūras): {STRING} @@ -2985,9 +2985,9 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Stādīt STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Normāls STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Stādiet atsevišķus kokus, velkot pāri ainavai. STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Birze -STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Stādiet mazus mežus, velkot pāri ainavai. +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Stādiet nelielus mežus, velkot pāri ainavai. STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Mežs -STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Stādiet lielos mežus, velkot pāri ainavai. +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Stādiet lielus mežus, velkot pāri ainavai # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Zemes radīšana @@ -3491,6 +3491,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Ceļa tips STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGRF mainīgā 60+x parametrs (heksadecimāls) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Gariņu izlīdzināšana: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Gariņu izlīdzināšana: Darbība 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Gariņu izlīdzināšana: Darbība 0x5, tips {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Nākamais gariņš STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Pāriet uz nākamo parasto gariņu, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Iet pie gariņa @@ -3499,6 +3502,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Iepriek STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Iet pie iepriekšējā parastā gariņa, izlaižot visus pseido/pārkrāsotos/fonta gariņus STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Atlasītā gariņa attēlojums. To attēlojot, izkārtojums netiek ievērots STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Pārvietot gariņu, lai mainītu X un Y vērtības. Ctrl+klikšķis, lai vienā piegājienā pārvietotu gariņu par astoņām vienībām +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Nobīde centrēta @@ -4457,7 +4461,7 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Ietilpī STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Pārvadājumu ieņēmumi: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}{NBSP}dienas{BLACK} {STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}{NBSP}minūtes{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}{NBSP}minūte{P s es ""}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Apkopes intervāls: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :Pēdējā apkalpošana: {LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Pēdējā apkope: pirms {LTBLUE}{NUM} minūtēm @@ -4907,7 +4911,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Plānoti STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Notiek saglabāšana,{}lLūdzu uzgaidiet! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Automātiskā saglabāšana neizdevās STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Nevar lasīt disku +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Spēles saglabāšana neizdevās... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Nevar dzēst failu +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Spēles ielāde neizdevās... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Iekšēja kļūda: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Bojāts saglabātās spēles fails - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Spēle ir saglabāta ar jaunāku versiju @@ -5839,6 +5845,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/polish.txt b/src/lang/polish.txt index a43e7ed443..89b03df67f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -3868,6 +3868,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Rodzaj drogi STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}NewGFR zmienna 60+parametr x (heksadecymalnie) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Wyrównywanie sprite'a: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Wyrównywanie sprite'a: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Wyrównywanie sprite'a: Action 0x5, typ {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Następny sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Idź do następnego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po ostatnim przejdź do pierwszego STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Idź do sprite'a @@ -3876,6 +3879,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Poprzedn STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Idź do poprzedniego normalnego sprite'a, pomijając jakiekolwiek pseudo / przebarwione / czcionkowe sprite'y, a po pierwszym przejdź do ostatniego STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Prezentacja wybranego sprite'a. Wyrównanie jest ignorowane podczas rysowania tego sprite'a STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Poruszaj spritem, zmieniając przesunięcia X i Y. Ctrl+klik aby przesunąć o 8 jednostek na raz +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Wyśrodkowanie przesunięcia @@ -6273,6 +6277,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index c230cac715..31193cbcda 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -1714,10 +1714,10 @@ STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Quando ativo, o STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Durante pausa permitir: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Seleccionar que acções podem ser feitas enquanto o jogo está em pausa ###length 4 -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma acção +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Nenhuma ação STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Todas as acções sem construção STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Todas expecto acções que modificam o terreno -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Todas as acções +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Todas as ações STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Usar a lista avançada de veículos: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Ativar a utilização de listas avançadas de veículos para o agrupamento de veículos @@ -2091,8 +2091,8 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Métrico (l) STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidades de esforço de tracção: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Quando a força de tracção é mostrada no interface de utilizador, mostrar na unidade seleccionada +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Unidades de esforço de tração: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Sempre que o esforço de tração (ou força de tração) for exibido na interface do utilizador, será mostrado nessas unidades ###length 3 STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperial (lbf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Métrico (kgf) @@ -3489,6 +3489,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Tipo de estrada STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Parâmetro da variável 60+x do NewGRF (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Alinhando sprite: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Alinhando sprite: Ação 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Alinhando sprite: Ação 0x5, tipo {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Gráfico seguinte STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Proceder ao gráfico normal seguinte, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no fim STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Ir para o gráfico @@ -3497,6 +3500,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Gráfico STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Proceder ao gráfico normal anterior, ignorando quaisquer gráficos pseudo/recolorir/tipo-de-letra e dando a volta no início STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Representação do gráfico seleccionado actualmente. O alinhamento é ignorado a desenhar este gráfico STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Desloca o gráfico, alterando os intervalos X e Y. Ctrl+Clique desloca o gráfico 8 unidades de uma só vez +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Deslocamento centrado @@ -3534,7 +3538,7 @@ STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Gráfico invál STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Propriedade de Ação 0 desconhecida {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Tentativa de uso de ID Inválido (sprite {3:NUM}) STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} contém um objecto gráfico corrompido. Todos os objectos gráficos corrompidos serão apresentados como um ponto de interrogação (?) vermelho. -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Action 8 - (sprite {3:NUM}) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contém múltiplas entradas Ação 8 - (sprite {3:NUM}) STR_NEWGRF_ERROR_READ_BOUNDS :Leitura além dos limites do pseudo-sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Recursos GRF pedidos não disponíveis (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} foi desativado por {STRING} @@ -3646,10 +3650,10 @@ STR_LOCAL_AUTHORITY_ZONE :{BLACK}Zona STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Mostrar a zona dentro dos limites da autoridade local STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Classificações de empresas de transporte: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} -STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Acções disponíveis: -STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de acções disponíveis nesta localidade - fazer clique no item para mais detalhes +STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Ações disponíveis: +STR_LOCAL_AUTHORITY_ACTIONS_TOOLTIP :{BLACK}Lista de ações disponíveis nesta localidade - clique no item para mais detalhes STR_LOCAL_AUTHORITY_DO_IT_BUTTON :{BLACK}Aplicar -STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Realizar a acção destacada na lista acima +STR_LOCAL_AUTHORITY_DO_IT_TOOLTIP :{BLACK}Realizar a ação destacada na lista acima ###length 8 STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN :Pequena campanha publicitária @@ -4091,7 +4095,7 @@ STR_PURCHASE_INFO_ALL_TYPES :Todos os tipos STR_PURCHASE_INFO_NONE :Nenhum STR_PURCHASE_INFO_ENGINES_ONLY :Apenas locomotivas STR_PURCHASE_INFO_ALL_BUT :Todas menos {CARGO_LIST} -STR_PURCHASE_INFO_MAX_TE :{BLACK}Máx. Força de Tracção: {GOLD}{FORCE} +STR_PURCHASE_INFO_MAX_TE :{BLACK}Esforço de Tração Máx: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Alcance: {GOLD}{COMMA} mosaicos STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Tipo de aeronave: {GOLD}{STRING} @@ -5833,6 +5837,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 65fb473350..b293437ddd 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -485,10 +485,10 @@ STR_SORT_BY_RATING_MIN :за найни STR_SORT_BY_ENGINE_ID :за ID (класичний порядок) STR_SORT_BY_COST :за ціною STR_SORT_BY_POWER :за потужністю -STR_SORT_BY_TRACTIVE_EFFORT :за силою тяги +STR_SORT_BY_TRACTIVE_EFFORT :за тяговим зусиллям STR_SORT_BY_INTRO_DATE :за датою випуску STR_SORT_BY_RUNNING_COST :за вартістю експлуатації -STR_SORT_BY_POWER_VS_RUNNING_COST :за потужністю/вартістю експ. +STR_SORT_BY_POWER_VS_RUNNING_COST :за співвідношенням потужність/вартість експлуатації STR_SORT_BY_CARGO_CAPACITY :за місткістю STR_SORT_BY_RANGE :за дальністю STR_SORT_BY_POPULATION :за населенням @@ -505,10 +505,10 @@ STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Середні # Group by options for vehicle list STR_GROUP_BY_NONE :Нема -STR_GROUP_BY_SHARED_ORDERS :Спільні накази +STR_GROUP_BY_SHARED_ORDERS :Спільні завдання # Order button in shared orders vehicle list -STR_GOTO_ORDER_VIEW :{BLACK}Накази +STR_GOTO_ORDER_VIEW :{BLACK}Завдання STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Відкрити вікно завдань # Tooltips for the main toolbar @@ -1151,7 +1151,7 @@ STR_GAME_OPTIONS_CURRENCY_LVL :Латвійс STR_GAME_OPTIONS_CURRENCY_PTE :Португальське ескудо STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автозбереження -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Виберіть період автозбереження гри +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Виберіть інтервал автозбереження # Autosave dropdown ###length 5 @@ -1165,27 +1165,27 @@ STR_GAME_OPTIONS_LANGUAGE :{BLACK}Мова STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Виберіть мову інтерфейса користувача STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% виконано) -STR_GAME_OPTIONS_FULLSCREEN :{BLACK}На весь екран -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Натисніть цю кнопку щоб грати на весь екран +STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Повноекранний режим +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Натисніть цю кнопку, щоби грати в OpenTTD у повноекранному режимі -STR_GAME_OPTIONS_RESOLUTION :{BLACK}Роздільна здатність -STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Виберіть роздільну здатність екрану +STR_GAME_OPTIONS_RESOLUTION :{BLACK}Роздільна здатність екрана +STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Виберіть, яку роздільну здатність екрана використовувати STR_GAME_OPTIONS_RESOLUTION_OTHER :інша STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} -STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Прискорення апаратного забезпечення +STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Апаратне прискорення STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить використання грою прискорення апаратного забезпечення. Налаштування запрацює тільки після перезапуску гри STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Налаштування запрацює тільки після перезапуску гри -STR_GAME_OPTIONS_VIDEO_VSYNC :Вертикальна синхронізація -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить вертикальну синхронізацію екрану. Налаштування запрацює тільки після перезапуску гри. Працює тільки за увімкнутого прискорення апаратного забезпечення. +STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}Вертикальна синхронізація +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Позначте цей прапорець для використання вертикальної синхронізації. Зміни застосуються тільки після перезапуску гри. Працює лише за увімкненого апаратного прискорення -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Поточний драйвер: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Використовуваний драйвер: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Розмір інтерфейсу STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Перетягніть повзунок для встановлення розміру інтерфейсу. Ctrl+протягування для точнішого перетягування -STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Автоматично визначений розмір -STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Увімкнутий прапорець дозволить автоматично визначити розмір інтерфейсу +STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Визначати розмір автоматично +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби визначати розмір інтерфейсу автоматично STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Межі шкали STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :BLACK}Увімкнутий прапорець дозволить змінити розмір інтерфейсу @@ -1211,10 +1211,10 @@ STR_GAME_OPTIONS_PARTICIPATE_SURVEY_PREVIEW_TOOLTIP :{BLACK}Пере STR_GAME_OPTIONS_GRAPHICS :{BLACK}Графіка -STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Показати швидкість оновлення -STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Обрати швидкість оновлення екрану +STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Частота оновлення екрана +STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Оберіть, яку частоту оновлення екрана використовувати STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Гц -STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Оновлення з частотою понад 60ГГц може зашкодити роботі гри. +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Частота оновлення екрана вища за 75 Гц може вплинути на швидкодію STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базовий набір графіки STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Оберіть, яку основну графіку використовувати (неможливо змінити у грі, тільки з головного меню) @@ -1420,8 +1420,8 @@ STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Ніяких п STR_CONFIG_SETTING_INTEREST_RATE :Процентна ставка: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процентна ставка за позиками; також контролює інфляцію, якщо вона увімкнена -STR_CONFIG_SETTING_RUNNING_COSTS :Експлуатаційні витрати: {STRING} -STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Встановіть вартість обслуговування та експлуатаційні витрати на транспорт та інфраструктуру +STR_CONFIG_SETTING_RUNNING_COSTS :Вартість експлуатації: {STRING} +STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Встановіть вартість обслуговування та вартість експлуатації на транспорт та інфраструктуру STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Швидкість будівництва: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Обмеження кількості будівельних дій для ШІ @@ -1541,11 +1541,11 @@ STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Показув STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :При включенні наприкінці кожного року виринає вікно фінансів для легшого огляду фінансового стану компанії. STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :При включенні наприкінці кожного періоду виринає вікно фінансів для легшого огляду фінансового стану компанії. -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створювати накази з поміткою «без зупинки»: {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Створювати завдання з поміткою «без зупинки»: {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Якщо в завданні транспортного засобу не вказана помітка «без зупинки», то він зупиняєтся на всіх станціях на своєму шляху. Якщо увімкнути це налаштування, то нові завдання будуть автоматично створюватися з поміткою «без зупинки» і транспортний засіб буде зупинятися лише на вказаних станціях. При необхідності помітку можна зняти або встановити власноруч. -STR_CONFIG_SETTING_STOP_LOCATION :Створювати накази для поїздів з зупинкою {STRING} платформи -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Оберіть кінець платформи для зупинки потягів у нових наказах. "на початку": початок платформи в напрямку руху; "посередині": середина платформи; "наприкінці": кінець платформи в напрямку руху. Окремі накази для зупинки можна встановити клацнувши на текст наказу +STR_CONFIG_SETTING_STOP_LOCATION :Створювати завдання для поїздів з зупинкою {STRING} платформи +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Оберіть кінець платформи для зупинки потягів у нових завданнях. Опція "на початку" – початок платформи в напрямку руху; "посередині" – середина платформи; "наприкінці" – кінець платформи в напрямку руху. Окремі завдання для зупинки можна встановити клацнувши на текст завдання ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :на початку STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :посередині @@ -2254,7 +2254,7 @@ STR_CONFIG_SETTING_ACCOUNTING :Облік STR_CONFIG_SETTING_VEHICLES :Транспорт STR_CONFIG_SETTING_VEHICLES_PHYSICS :Фізика STR_CONFIG_SETTING_VEHICLES_ROUTING :Маршрути -STR_CONFIG_SETTING_VEHICLES_ORDERS :Накази +STR_CONFIG_SETTING_VEHICLES_ORDERS :Завдання STR_CONFIG_SETTING_LIMITATIONS :Обмеження STR_CONFIG_SETTING_ACCIDENTS :Катастрофи STR_CONFIG_SETTING_GENWORLD :Створення світу @@ -3910,7 +3910,7 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинг STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Показати рейтинг станції STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Постачання впродовж місяця і місцевий рейтинг: -STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :BLACK}Постачання впродовж хвилини і місцевий рейтинг: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Постачання впродовж хвилини і місцевий рейтинг: STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}Групувати по @@ -4411,7 +4411,7 @@ STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :Ціна: {CURRENCY_LONG} Маса: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Ціна: {CURRENCY_LONG} Швидкість: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Швидкість: {VELOCITY} Потужність: {POWER} -STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Швидкість: {VELOCITY} Потужність: {POWER} Макс. тяга: {FORCE} +STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Швидкість: {VELOCITY} Потужність: {POWER} Максимальне тягове зусилля: {FORCE} STR_ENGINE_PREVIEW_TYPE :Тип літального апарата: {STRING} STR_ENGINE_PREVIEW_TYPE_RANGE :Тип літального апарата: {STRING} Дальність: {COMMA} клітин{P ка ки ок } STR_ENGINE_PREVIEW_RUNCOST_YEAR :Вартість експлуатації: {CURRENCY_LONG}/рік @@ -4439,8 +4439,8 @@ STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Вибе STR_REPLACE_VEHICLES_START :{BLACK}Почати оновлення STR_REPLACE_VEHICLES_NOW :Замінити усі ТС зараз STR_REPLACE_VEHICLES_WHEN_OLD :Замінювати лише застарілі ТС -STR_REPLACE_HELP_START_BUTTON :{BLACK}Натисніть для запуску оновлення потягів, що вибрані праворуч, на потяги, що вибрані праворуч -STR_REPLACE_NOT_REPLACING :{BLACK}Не можна оновити +STR_REPLACE_HELP_START_BUTTON :{BLACK}Натисніть для запуску оновлення потягів, що вибрані ліворуч, на потяги, що вибрані праворуч +STR_REPLACE_NOT_REPLACING :{BLACK}Поки що не оновлюється STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Не вибрано транспортного засобу STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} коли застаріє STR_REPLACE_VEHICLES_STOP :{BLACK}Зупинити оновлення @@ -4449,11 +4449,11 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Нати STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Переключення між вікнами заміни потягів та вагонів. STR_REPLACE_ENGINES :Локомотиви STR_REPLACE_WAGONS :Вагони -STR_REPLACE_ALL_RAILTYPE :Весь з/д транспорт +STR_REPLACE_ALL_RAILTYPE :Весь залізничний транспорт STR_REPLACE_ALL_ROADTYPE :Всі автомобілі ###length 2 -STR_REPLACE_HELP_RAILTYPE :{BLACK}Виберіть тип колії, для якого ви збираєтесь оновити потяги +STR_REPLACE_HELP_RAILTYPE :{BLACK}Виберіть тип колії, для якої ви збираєтесь оновити потяги STR_REPLACE_HELP_ROADTYPE :{BLACK}Виберіть тип дороги, на який хочете замінити двигуни ###next-name-looks-similar @@ -4504,9 +4504,9 @@ STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Пере ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Показати маршрут поїзда. Ctrl+клац показує розклад поїзда -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Показати накази авто. Ctrl+клац показує розклад авто -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Показати накази корабля. Ctrl+клац показує розклад корабля -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Показати накази літака. Ctrl+клац показує розклад літака +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Показати завдання транспортного засобу. Ctrl+клац показує розклад ТЗ +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Показати завдання корабля. Ctrl+клац показує розклад корабля +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Показати завдання літака. Ctrl+клац показує розклад літака ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Показати детальну інформацію @@ -4523,7 +4523,7 @@ STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Пото # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Вантаження STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Відходить -STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Чекає на звільнення +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Чекає на розподілення за інтервалом STR_VEHICLE_STATUS_CRASHED :{RED}Аварія! STR_VEHICLE_STATUS_BROKEN_DOWN :{RED}Зламався STR_VEHICLE_STATUS_STOPPED :{RED}Зупинено @@ -4537,7 +4537,7 @@ STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCI STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Прямує до {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Прямує до {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Техогляд у {0:DEPOT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Звільнити і обслужити в {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Обслуговується та чекає на розподілення в {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:STATION} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Неможливо досягти {0:WAYPOINT} @@ -4571,7 +4571,7 @@ STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING} STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Тип: {LTBLUE}{STRING} {BLACK}Дальність: {LTBLUE}{COMMA} клітин{P ка ки ок } STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Макс. швидкість: {LTBLUE}{VELOCITY} {BLACK}Макс. тяга: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Вага: {LTBLUE}{WEIGHT_SHORT} {BLACK}Потужність: {LTBLUE}{POWER}{BLACK} Максимальна швидкість: {LTBLUE}{VELOCITY} {BLACK}Максимальне тягове зусилля: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (торік: {CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Дохід цього року: {LTBLUE}{CURRENCY_LONG} (минулого року: {CURRENCY_LONG}) {BLACK}Найгірше: {LTBLUE}{POWER_TO_WEIGHT} @@ -4662,7 +4662,7 @@ STR_REFIT_SHIP_REFIT_TOOLTIP :{BLACK}Пере STR_REFIT_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Переобладнати літак для перевезення вибраного виду вантажу # Order view -STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Накази) +STR_ORDERS_CAPTION :{WHITE}{VEHICLE} (Завдання) STR_ORDERS_TIMETABLE_VIEW :{BLACK}Розклад STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Переключитись на розклад @@ -4705,7 +4705,7 @@ STR_ORDER_DROP_REFIT_AUTO_ANY :Доступн STR_ORDER_DROP_GO_ALWAYS_DEPOT :Завжди прямувати STR_ORDER_DROP_SERVICE_DEPOT :Прямувати при потребі в техогляді STR_ORDER_DROP_HALT_DEPOT :Прямувати і зупинитись -STR_ORDER_DROP_UNBUNCH :Звільнити +STR_ORDER_DROP_UNBUNCH :Розподілити по інтервалу # Depot action tooltips, one per vehicle type ###length VEHICLE_TYPES @@ -4715,7 +4715,7 @@ STR_ORDER_SHIP_DEPOT_ACTION_TOOLTIP :{BLACK}Вибе STR_ORDER_HANGAR_ACTION_TOOLTIP :{BLACK}Виберіть дію до виконання в цьому ангарі ###next-name-looks-similar -STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Дані транспорту для базування наказу +STR_ORDER_CONDITIONAL_VARIABLE_TOOLTIP :{BLACK}Дані транспорту для базування завдання # Conditional order variables, must follow order of OrderConditionVariable enum ###length 8 @@ -4743,20 +4743,20 @@ STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Знач STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Введіть значення для порівняння STR_ORDERS_SKIP_BUTTON :{BLACK}Пропуск -STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропустити поточний наказ, і виконувати наступний. Ctrl+клац для переходу до обраного наказу +STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропустити поточне завдання, і виконати наступне. Ctrl+клац для переходу до обраного завдання STR_ORDERS_DELETE_BUTTON :{BLACK}Видалити STR_ORDERS_DELETE_TOOLTIP :{BLACK}Видалити виділене завдання -STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Видалити всі накази -STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Скасувати спільні накази -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Припинити використовути спільні накази. Ctrl+клац видаляє всі накази для цього транспорту +STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Видалити всі завдання +STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Скасувати спільні завдання +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Припинити використання спільних завдань. Ctrl+клац видаляє всі завдання для цього транспорту STR_ORDERS_GO_TO_BUTTON :{BLACK}Прямувати STR_ORDER_GO_TO_NEAREST_DEPOT :Прямувати до найближчого депо STR_ORDER_GO_TO_NEAREST_HANGAR :Прямувати в найближчий ангар -STR_ORDER_CONDITIONAL :Зміна наказу з умовою -STR_ORDER_SHARE :Спільні накази -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Вставити новий наказ перед обраним або додати в кінець списку. Ctrl+клац на станції аби наказати "повне завантаження будь-якого вантажу". Ctrl+клац на точці маршруту аби змінити налаштування "без зупинок" на протилежне. Ctrl+клаці на гаражі для "звільнення". Клац мишею на авто копіює його накази. Ctrl+клац на авто сворює спільні накази. Наказ із гаражем вимикає автоматичний техогляд авто +STR_ORDER_CONDITIONAL :Змінити завдання, за умови +STR_ORDER_SHARE :Спільні завдання +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Вставити нове завдання перед обраним або додати в кінець списку. Ctrl+клац на станції для завдання "повне завантаження будь-якого вантажу". Ctrl+клац на точці маршруту аби змінити налаштування "без зупинок" на протилежне. Ctrl+клац на гаражі для "автоматичного розподілення". Клац мишею на авто копіює його завдання. Ctrl+клац на авто створює спільні завдання. Завдання з гаражем вимикає автоматичний техогляд транспортного засобу STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показати транспорт з таким самим маршрутом @@ -4782,7 +4782,7 @@ STR_ORDER_REFIT_ORDER :(Переобл STR_ORDER_REFIT_STOP_ORDER :(Переобладнати на {STRING} і зупинити) STR_ORDER_STOP_ORDER :(зупинити) -STR_ORDER_WAIT_TO_UNBUNCH :(чекає звільнення) +STR_ORDER_WAIT_TO_UNBUNCH :(чекати на розподілення за інтервалом) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Неможливо використати станцію){POP_COLOUR} {STRING} {STATION} {STRING} @@ -4827,21 +4827,21 @@ STR_ORDER_STOP_LOCATION_FAR_END :[кінець] STR_ORDER_OUT_OF_RANGE :{RED} (Наступний пункт призначення поза межею досяжності) -STR_ORDER_CONDITIONAL_UNCONDITIONAL :Перейти до наказу {COMMA} -STR_ORDER_CONDITIONAL_NUM :Перейти до наказу {COMMA}, якщо {STRING} {STRING} {COMMA} -STR_ORDER_CONDITIONAL_TRUE_FALSE :Перейти до наказу {COMMA}, якщо {STRING} {STRING} +STR_ORDER_CONDITIONAL_UNCONDITIONAL :Перейти до завдання {COMMA} +STR_ORDER_CONDITIONAL_NUM :Перейти до завдання {COMMA}, якщо {STRING} {STRING} {COMMA} +STR_ORDER_CONDITIONAL_TRUE_FALSE :Перейти до завдання {COMMA}, якщо {STRING} {STRING} -STR_INVALID_ORDER :{RED} (Невірний наказ) +STR_INVALID_ORDER :{RED} (Неправильне завдання) # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (розклад) STR_TIMETABLE_ORDER_VIEW :{BLACK}Завдання STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Переключитись до вікна завдань -STR_TIMETABLE_TOOLTIP :{BLACK}Розклад - клацніть мишою на наказ, щоб виділити його +STR_TIMETABLE_TOOLTIP :{BLACK}Розклад - клацніть мишею на завдання, щоб виділити його STR_TIMETABLE_NO_TRAVEL :Не прямувати -STR_TIMETABLE_NOT_TIMETABLEABLE :В дорозі (час руху враховано в наступному не автоматичному наказі) +STR_TIMETABLE_NOT_TIMETABLEABLE :В дорозі (час руху враховано в наступному не автоматичному завданні) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :В дорозі (час не вказано) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Прямувати (без розкладу) зі швидкістю, що не перевищує {2:VELOCITY} (час не вказано) STR_TIMETABLE_TRAVEL_FOR :В дорозі {STRING} @@ -4866,21 +4866,21 @@ STR_TIMETABLE_STATUS_START_IN_SECONDS.r :{BLACK}Цей STR_TIMETABLE_STATUS_START_IN_SECONDS.d :{BLACK}Цей розклад почнеться після {COMMA} секунд STR_TIMETABLE_START :{BLACK}Початок розкладу -STR_TIMETABLE_START_TOOLTIP :{BLACK}Обрати початок розкладу. Ctrl+клац для рівного розподілу початку руху транспорту зі спільним наказом. Якщо наказ із розкладом, транспорт розподілиться за відносним порядком +STR_TIMETABLE_START_TOOLTIP :{BLACK}Обрати початок розкладу. Ctrl+клац для рівного розподілу початку руху транспорту зі спільними завданнями. Якщо завдання включає в себе розклад, транспорт розподілиться по маршруту з його урахуванням STR_TIMETABLE_START_SECONDS_QUERY :Секунд до початку розкладу STR_TIMETABLE_CHANGE_TIME :{BLACK}Змінити час -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись наказ. Ctrl+клац змінить час в усіх наказах +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Змінити час, впродовж якого має виконуватись завдання. Ctrl+клац змінить час в усіх завданнях STR_TIMETABLE_CLEAR_TIME :{BLACK}Скасувати час -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного наказу. Ctrl+клац скасує обмеження часу в усіх наказах +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Скасувати час виконання виділеного завдання. Ctrl+клац скасує обмеження часу в усіх завданнях STR_TIMETABLE_CHANGE_SPEED :{BLACK}Змінити обмеж. швидкості STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Змінити обмеження швидкості для виділеного пункту. Ctrl+клац змінить швидкість в усіх завданнях STR_TIMETABLE_CLEAR_SPEED :{BLACK}Скасувати обмеж. швидкості -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного пункту. Ctrl+клац скасує обмеження швидкості в усіх наказах +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Скасувати обмеження швидкості для виділеного завдання. Ctrl+клац скасує обмеження швидкості в усіх завданнях STR_TIMETABLE_RESET_LATENESS :{BLACK}Скасувати відхилення STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Скасувати лічильник відхилення від графіка, щоб транспорт встигав. Ctrl+клац, щоб скасувати лічильник для всієї групи транспорту. При цьому останній транспорт йтиме за графіком, а інші випереджатимуть графік. @@ -5254,18 +5254,18 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Немо STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Неправильний тип депо # Depot unbunching related errors -STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... можливий тільки один звільнений наказ -STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... неможливо використати наказ "повне завантаження", якщо транспорт звільнено -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... неможливо звільнити транспорт з наказом "повне завантаження" -STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... неможливо використати стандартні накази, якщо транспорт звільнено -STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... неможливо звільнити транспорт зі стандартним наказом +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... дозволяється не більше одного завдання на розподілення по інтервалу +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... неможливо використати завдання "повне завантаження", якщо транспорт має завдання на розподілення +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... неможливо задати завдання на розподілення, якщо транспорт має завдання з умовою на "повне завантаження" +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... неможливо використати стандартні завдання, якщо транспорт має завдання на розподілення +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... неможливо задати завдання на розподілення, якщо транспорт має завдання з додатковими умовами # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} дуже довгий після оновлення STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Правила автозаміни/оновлення не застосовувалися STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(бракує коштів) STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Новий транспорт не може перевозити {STRING} -STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Нове авто не може змінити наказ {NUM} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Новий транспорт не може переобладнатися згідно з завданням {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Неможливе з'єднання колії @@ -5436,12 +5436,12 @@ STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Літа # Order related errors STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Немає місця для нових завдань STR_ERROR_TOO_MANY_ORDERS :{WHITE}Занадто багато завдань -STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Неможливо додати наказ... -STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Неможливо видалити наказ... -STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Неможливо змінити наказ... -STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Не можна перемістити цей наказ... -STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не можна пропустити цей наказ... -STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Не можна перейти до цього наказу... +STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Неможливо додати завдання... +STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Неможливо видалити завдання... +STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Неможливо змінити завдання... +STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Неможливо перемістити це завдання... +STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не можна пропустити це завдання... +STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Неможливо перейти до цього завдання... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... транспорт не може йти на всі станції STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... транспорт не може йти на цю станцію STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... транспорт, що має спільний з цим розклад, не може йти на цю станцію @@ -5449,7 +5449,7 @@ STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... не STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :WHITE}... не увесь транспорт має спільні завдання STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Неможливо розділити список завдань... -STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Неможливо скасувати спільні накази... +STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Неможливо скасувати спільні завдання... STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Неможливо скопіювати список завдань... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... занадто далеко від попереднього пункту призначення STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... літак не може летіти так далеко From 4e6d4fcf32c0178c0c958e23ed8c486c5c27e1f8 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 7 Apr 2024 22:18:39 +0200 Subject: [PATCH 14/26] Codechange: replace for loops with endof with range-based for loops --- src/saveload/saveload.cpp | 10 +++++----- src/sound/win32_s.cpp | 8 ++++---- src/strgen/strgen.cpp | 14 +++++++------- src/strgen/strgen_base.cpp | 4 ++-- src/terraform_cmd.cpp | 6 ++---- src/town_cmd.cpp | 13 ++++++------- 6 files changed, 26 insertions(+), 29 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 6c7f68c49c..2f57886118 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2678,23 +2678,23 @@ static const SaveLoadFormat *GetSavegameFormat(const std::string &full_name, uin bool has_comp_level = separator != std::string::npos; const std::string name(full_name, 0, has_comp_level ? separator : full_name.size()); - for (const SaveLoadFormat *slf = &_saveload_formats[0]; slf != endof(_saveload_formats); slf++) { - if (slf->init_write != nullptr && name.compare(slf->name) == 0) { - *compression_level = slf->default_compression; + for (const auto &slf : _saveload_formats) { + if (slf.init_write != nullptr && name.compare(slf.name) == 0) { + *compression_level = slf.default_compression; if (has_comp_level) { const std::string complevel(full_name, separator + 1); /* Get the level and determine whether all went fine. */ size_t processed; long level = std::stol(complevel, &processed, 10); - if (processed == 0 || level != Clamp(level, slf->min_compression, slf->max_compression)) { + if (processed == 0 || level != Clamp(level, slf.min_compression, slf.max_compression)) { SetDParamStr(0, complevel); ShowErrorMessage(STR_CONFIG_ERROR, STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_LEVEL, WL_CRITICAL); } else { *compression_level = level; } } - return slf; + return &slf; } } diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index 6cd72b3a2e..73cc3c062d 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -45,10 +45,10 @@ static DWORD WINAPI SoundThread(LPVOID) SetCurrentThreadName("ottd:win-sound"); do { - for (WAVEHDR *hdr = _wave_hdr; hdr != endof(_wave_hdr); hdr++) { - if ((hdr->dwFlags & WHDR_INQUEUE) != 0) continue; - MxMixSamples(hdr->lpData, hdr->dwBufferLength / 4); - if (waveOutWrite(_waveout, hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { + for (auto &hdr : _wave_hdr) { + if ((hdr.dwFlags & WHDR_INQUEUE) != 0) continue; + MxMixSamples(hdr.lpData, hdr.dwBufferLength / 4); + if (waveOutWrite(_waveout, &hdr, sizeof(WAVEHDR)) != MMSYSERR_NOERROR) { MessageBox(nullptr, L"Sounds are disabled until restart.", L"waveOutWrite failed", MB_ICONINFORMATION); return 0; } diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp index 254d566af3..bac30b9de9 100644 --- a/src/strgen/strgen.cpp +++ b/src/strgen/strgen.cpp @@ -337,25 +337,25 @@ int CDECL main(int argc, char *argv[]) switch (i) { case 'C': fmt::print("args\tflags\tcommand\treplacement\n"); - for (const CmdStruct *cs = _cmd_structs; cs < endof(_cmd_structs); cs++) { + for (const auto &cs : _cmd_structs) { char flags; - if (cs->proc == EmitGender) { + if (cs.proc == EmitGender) { flags = 'g'; // Command needs number of parameters defined by number of genders - } else if (cs->proc == EmitPlural) { + } else if (cs.proc == EmitPlural) { flags = 'p'; // Command needs number of parameters defined by plural value - } else if (cs->flags & C_DONTCOUNT) { + } else if (cs.flags & C_DONTCOUNT) { flags = 'i'; // Command may be in the translation when it is not in base } else { flags = '0'; // Command needs no parameters } - fmt::print("{}\t{:c}\t\"{}\"\t\"{}\"\n", cs->consumes, flags, cs->cmd, strstr(cs->cmd, "STRING") ? "STRING" : cs->cmd); + fmt::print("{}\t{:c}\t\"{}\"\t\"{}\"\n", cs.consumes, flags, cs.cmd, strstr(cs.cmd, "STRING") ? "STRING" : cs.cmd); } return 0; case 'L': fmt::print("count\tdescription\tnames\n"); - for (const PluralForm *pf = _plural_forms; pf < endof(_plural_forms); pf++) { - fmt::print("{}\t\"{}\"\t{}\n", pf->plural_count, pf->description, pf->names); + for (const auto &pf : _plural_forms) { + fmt::print("{}\t\"{}\"\t{}\n", pf.plural_count, pf.description, pf.names); } return 0; diff --git a/src/strgen/strgen_base.cpp b/src/strgen/strgen_base.cpp index 419ccad61b..e05c324e2d 100644 --- a/src/strgen/strgen_base.cpp +++ b/src/strgen/strgen_base.cpp @@ -420,8 +420,8 @@ void EmitGender(Buffer *buffer, char *buf, int) static const CmdStruct *FindCmd(const char *s, int len) { - for (const CmdStruct *cs = _cmd_structs; cs != endof(_cmd_structs); cs++) { - if (strncmp(cs->cmd, s, len) == 0 && cs->cmd[len] == '\0') return cs; + for (const auto &cs : _cmd_structs) { + if (strncmp(cs.cmd, s, len) == 0 && cs.cmd[len] == '\0') return &cs; } return nullptr; } diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 00c7ef0681..69e48a3940 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -136,8 +136,6 @@ static std::tuple TerraformTileHeight(TerraformerState * /* Recurse to neighboured corners if height difference is larger than 1 */ { - const TileIndexDiffC *ttm; - TileIndex orig_tile = tile; static const TileIndexDiffC _terraform_tilepos[] = { { 1, 0}, // move to tile in SE @@ -146,8 +144,8 @@ static std::tuple TerraformTileHeight(TerraformerState * { 0, -2} // undo last move, and move to tile in NE }; - for (ttm = _terraform_tilepos; ttm != endof(_terraform_tilepos); ttm++) { - tile += ToTileIndexDiff(*ttm); + for (const auto &ttm : _terraform_tilepos) { + tile += ToTileIndexDiff(ttm); if (tile >= Map::Size()) continue; /* Make sure we don't wrap around the map */ diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 8634fb0b7a..fa18e2b422 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -1398,8 +1398,8 @@ static inline bool RoadTypesAllowHouseHere(TileIndex t) static const TileIndexDiffC tiles[] = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} }; bool allow = false; - for (const TileIndexDiffC *ptr = tiles; ptr != endof(tiles); ++ptr) { - TileIndex cur_tile = t + ToTileIndexDiff(*ptr); + for (const auto &ptr : tiles) { + TileIndex cur_tile = t + ToTileIndexDiff(ptr); if (!IsValidTile(cur_tile)) continue; if (!(IsTileType(cur_tile, MP_ROAD) || IsRoadStopTile(cur_tile))) continue; @@ -1826,21 +1826,20 @@ static bool GrowTown(Town *t) TileIndex tile = t->xy; // The tile we are working with ATM /* Find a road that we can base the construction on. */ - const TileIndexDiffC *ptr; - for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) { + for (const auto &ptr : _town_coord_mod) { if (GetTownRoadBits(tile) != ROAD_NONE) { bool success = GrowTownAtRoad(t, tile); cur_company.Restore(); return success; } - tile = TileAdd(tile, ToTileIndexDiff(*ptr)); + tile = TileAdd(tile, ToTileIndexDiff(ptr)); } /* No road available, try to build a random road block by * clearing some land and then building a road there. */ if (TownAllowedToBuildRoads()) { tile = t->xy; - for (ptr = _town_coord_mod; ptr != endof(_town_coord_mod); ++ptr) { + for (const auto &ptr : _town_coord_mod) { /* Only work with plain land that not already has a house */ if (!IsTileType(tile, MP_HOUSE) && IsTileFlat(tile)) { if (Command::Do(DC_AUTO | DC_NO_WATER, tile).Succeeded()) { @@ -1850,7 +1849,7 @@ static bool GrowTown(Town *t) return true; } } - tile = TileAdd(tile, ToTileIndexDiff(*ptr)); + tile = TileAdd(tile, ToTileIndexDiff(ptr)); } } From 74e09abf76960c86263afa38d15d9c1ca2f92b50 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 13:26:19 +0100 Subject: [PATCH 15/26] Codechange: Use dynamic_cast instead of C-cast after FindWindowById. (#12448) dynamic_cast was used in most places, but not all. --- src/error_gui.cpp | 6 +++--- src/group_gui.cpp | 2 +- src/network/network_gui.cpp | 2 +- src/news_gui.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 812e04cefa..412864226c 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -348,7 +348,7 @@ void ShowFirstError() */ void UnshowCriticalError() { - ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + ErrmsgWindow *w = dynamic_cast(FindWindowById(WC_ERRMSG, 0)); if (_window_system_initialized && w != nullptr) { if (w->IsCritical()) _error_list.push_front(*w); _window_system_initialized = false; @@ -414,7 +414,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel ErrorMessageData data(summary_msg, detailed_msg, is_critical, x, y, textref_stack_grffile, textref_stack_size, textref_stack, extra_msg); data.CopyOutDParams(); - ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + ErrmsgWindow *w = dynamic_cast(FindWindowById(WC_ERRMSG, 0)); if (w != nullptr) { if (w->IsCritical()) { /* A critical error is currently shown. */ @@ -438,7 +438,7 @@ void ShowErrorMessage(StringID summary_msg, StringID detailed_msg, WarningLevel */ bool HideActiveErrorMessage() { - ErrmsgWindow *w = (ErrmsgWindow*)FindWindowById(WC_ERRMSG, 0); + ErrmsgWindow *w = dynamic_cast(FindWindowById(WC_ERRMSG, 0)); if (w == nullptr) return false; w->Close(); return true; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 1143de9f0f..55bb30dd1e 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -1169,7 +1169,7 @@ void ShowCompanyGroupForVehicle(const Vehicle *v) */ static inline VehicleGroupWindow *FindVehicleGroupWindow(VehicleType vt, Owner owner) { - return (VehicleGroupWindow *)FindWindowById(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, owner).Pack()); + return dynamic_cast(FindWindowById(GetWindowClassForVehicleType(vt), VehicleListIdentifier(VL_GROUP_LIST, vt, owner).Pack())); } /** diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index b659f64d21..aa9940c936 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -2234,7 +2234,7 @@ void ShowJoinStatusWindow() void ShowNetworkNeedPassword(NetworkPasswordType npt, std::shared_ptr request) { - NetworkJoinStatusWindow *w = (NetworkJoinStatusWindow *)FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); + NetworkJoinStatusWindow *w = dynamic_cast(FindWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN)); if (w == nullptr) return; w->request = request; diff --git a/src/news_gui.cpp b/src/news_gui.cpp index fe7710ca8d..e90772f170 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -1017,7 +1017,7 @@ static void ShowNewsMessage(NewsIterator ni) */ bool HideActiveNewsMessage() { - NewsWindow *w = (NewsWindow*)FindWindowById(WC_NEWS_WINDOW, 0); + NewsWindow *w = dynamic_cast(FindWindowById(WC_NEWS_WINDOW, 0)); if (w == nullptr) return false; w->Close(); return true; From cdfffb551c45948c7ae4bf449eda939d38679a37 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 17:07:55 +0100 Subject: [PATCH 16/26] Fix: sym->sym accidentally changed to sym prevented keys working with SDL. --- src/video/sdl2_v.cpp | 2 +- src/video/sdl_v.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp index d79016f6da..eb8791a02b 100644 --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -310,7 +310,7 @@ static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, char32_t *character) bool unprintable = false; for (const auto &map : _vk_mapping) { - if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + if (IsInsideBS(sym->sym, map.vk_from, map.vk_count)) { key = sym->sym - map.vk_from + map.map_to; unprintable = map.unprintable; break; diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp index f68168b036..7928deedb2 100644 --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -438,7 +438,7 @@ static uint ConvertSdlKeyIntoMy(SDL_keysym *sym, char32_t *character) uint key = 0; for (const auto &map : _vk_mapping) { - if (IsInsideBS(sym, map.vk_from, map.vk_count)) { + if (IsInsideBS(sym->sym, map.vk_from, map.vk_count)) { key = sym->sym - map.vk_from + map.map_to; break; } From 4daf95b878766964d1feda239daa542f150344b1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 17:07:56 +0100 Subject: [PATCH 17/26] Fix: Use static_cast instead of C-cast to avoid hidden errors. --- src/core/math_func.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index f5cc83d82c..7b457c0569 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -22,7 +22,7 @@ template constexpr T abs(const T a) { - return (a < (T)0) ? -a : a; + return (a < static_cast(0)) ? -a : a; } /** @@ -38,7 +38,7 @@ constexpr T Align(const T x, uint n) { assert((n & (n - 1)) == 0 && n != 0); n--; - return (T)((x + n) & ~((T)n)); + return static_cast((x + n) & ~static_cast(n)); } /** @@ -251,7 +251,7 @@ constexpr T Delta(const T a, const T b) template constexpr bool IsInsideBS(const T x, const size_t base, const size_t size) { - return (size_t)(x - base) < size; + return static_cast(x - base) < size; } /** @@ -268,9 +268,9 @@ template ) { - return (size_t)(x.base() - min) < (max - min); + return static_cast(x.base() - min) < (max - min); } else { - return (size_t)(x - min) < (max - min); + return static_cast(x - min) < (max - min); } } From 7e286058305b07baffb96c034c35a82b2c53d53e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 17:07:56 +0100 Subject: [PATCH 18/26] Fix: Use reinterpret_cast instead of C-style cast to align pointers. --- src/core/math_func.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/math_func.hpp b/src/core/math_func.hpp index 7b457c0569..67b347f2b4 100644 --- a/src/core/math_func.hpp +++ b/src/core/math_func.hpp @@ -54,8 +54,8 @@ constexpr T Align(const T x, uint n) template constexpr T *AlignPtr(T *x, uint n) { - static_assert(sizeof(size_t) == sizeof(void *)); - return reinterpret_cast(Align((size_t)x, n)); + static_assert(sizeof(uintptr_t) == sizeof(void *)); + return reinterpret_cast(Align(reinterpret_cast(x), n)); } /** From 1b127628cbd6a8d6c7e9ca46a91ed7bc7bc90733 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 8 Apr 2024 22:32:57 +0100 Subject: [PATCH 19/26] Codechange: Use dynamic_cast with FindWindowById. (#12458) Missed from 74e09ab. --- src/screenshot_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/screenshot_gui.cpp b/src/screenshot_gui.cpp index 2505b7cbbe..2bfde67e89 100644 --- a/src/screenshot_gui.cpp +++ b/src/screenshot_gui.cpp @@ -83,7 +83,7 @@ void ShowScreenshotWindow() */ void SetScreenshotWindowVisibility(bool hide) { - ScreenshotWindow *scw = (ScreenshotWindow *)FindWindowById(WC_SCREENSHOT, 0); + ScreenshotWindow *scw = dynamic_cast(FindWindowById(WC_SCREENSHOT, 0)); if (scw == nullptr) return; From b5ad28022d71e4e9ed80d5dd161d375557f59982 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 9 Apr 2024 04:40:33 +0000 Subject: [PATCH 20/26] Update: Translations from eints english (au): 5 changes by krysclarke chinese (simplified): 1 change by WenSimEHRP catalan: 7 changes by J0anJosep portuguese (brazilian): 27 changes by pasantoro --- src/lang/brazilian_portuguese.txt | 54 +++++++++++++++---------------- src/lang/catalan.txt | 9 ++++-- src/lang/english_AU.txt | 5 +++ src/lang/simplified_chinese.txt | 1 + 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index d026c10fcb..0c5f79b7fa 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -269,8 +269,8 @@ STR_UNITS_PERIODS :{NUM}{NBSP}per # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Filtro: -STR_LIST_FILTER_OSKTITLE :{BLACK}Inserir uma ou mais palavras-chave para filtrar a lista -STR_LIST_FILTER_TOOLTIP :{BLACK}Introduza uma ou mais palavras-chave para procurar na lista +STR_LIST_FILTER_OSKTITLE :{BLACK}Introduza uma palavra-chave para filtrar a lista +STR_LIST_FILTER_TOOLTIP :{BLACK}Introduzir uma ou mais palavras-chave para procurar na lista STR_TOOLTIP_GROUP_ORDER :{BLACK}Escolher a ordem de agrupamento STR_TOOLTIP_SORT_ORDER :{BLACK}Escolher a ordenação (descendente/ascendente) @@ -384,7 +384,7 @@ STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Pausar o STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Avanço rápido do jogo STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Opções e configurações STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Salvar, abrir ou abandonar o jogo, sair do programa -STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, visualização extra, fluxo de cargas ou lista de placas +STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Abrir mapa, visualização extra, fluxo de carga ou lista de placas STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Abrir lista de localidades ou encontrar localidade STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Abrir lista de subsídios STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Abrir lista de estações da empresa @@ -410,7 +410,7 @@ STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Abrir me STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Abrir janela de som/música STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Abrir última mensagem/notícia, histórico de mensagens ou apagar todas as mensagens STR_TOOLBAR_TOOLTIP_LAND_BLOCK_INFORMATION :{BLACK}Abrir informações do terreno, menu de captura de tela, créditos do OpenTTD ou ferramentas de desenvolvedor -STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar barras de ferramentas +STR_TOOLBAR_TOOLTIP_SWITCH_TOOLBAR :{BLACK}Trocar barra de ferramentas # Extra tooltips for the scenario editor toolbar STR_SCENEDIT_TOOLBAR_TOOLTIP_SAVE_SCENARIO_LOAD_SCENARIO :{BLACK}Salvar cenário, abrir cenário, abandonar editor de cenário, sair @@ -499,7 +499,7 @@ STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Fundar nova ind STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Construção de ferrovia STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Construção de ferrovia eletrificada STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Construção de monotrilho -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de MagLev +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Construção de Maglev # Road construction menu STR_ROAD_MENU_ROAD_CONSTRUCTION :Construção de estrada @@ -732,7 +732,7 @@ STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empreendedor STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrial STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalista STR_HIGHSCORE_PERFORMANCE_TITLE_MAGNATE :Magnata -STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Mandachuva +STR_HIGHSCORE_PERFORMANCE_TITLE_MOGUL :Grande magnata STR_HIGHSCORE_PERFORMANCE_TITLE_TYCOON_OF_THE_CENTURY :Magnata do Século STR_HIGHSCORE_NAME :{PRESIDENT_NAME}, {COMPANY} STR_HIGHSCORE_STATS :{BIG_FONT}'{STRING}' ({COMMA}) @@ -988,7 +988,7 @@ STR_GAME_OPTIONS_CURRENCY_ISK :Coroa Islandesa STR_GAME_OPTIONS_CURRENCY_ITL :Lira Italiana STR_GAME_OPTIONS_CURRENCY_NLG :Florim Holandês STR_GAME_OPTIONS_CURRENCY_NOK :Coroa Norueguesa -STR_GAME_OPTIONS_CURRENCY_PLN :Złoty Polonês +STR_GAME_OPTIONS_CURRENCY_PLN :Zloty Polonês STR_GAME_OPTIONS_CURRENCY_RON :Leu Romeno STR_GAME_OPTIONS_CURRENCY_RUR :Rublo Russo STR_GAME_OPTIONS_CURRENCY_SIT :Tolar Esloveno @@ -1188,7 +1188,7 @@ STR_SUBSIDY_X4 :x4 ###length 4 STR_CLIMATE_TEMPERATE_LANDSCAPE :Clima temperado -STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subárctico +STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Clima subártico STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :Clima subtropical STR_CLIMATE_TOYLAND_LANDSCAPE :Terra dos Brinquedos @@ -1523,8 +1523,8 @@ STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Idade relativa STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} m{P 0 ês eses} antes STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} m{P 0 ês eses} depois -STR_CONFIG_SETTING_AUTORENEW_MONEY :Quantia mínima de dinheiro necessária para fazer renovação automática: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve existir na conta bancária para a renovação automática de veículos ser considerada +STR_CONFIG_SETTING_AUTORENEW_MONEY :Dinheiro mínimo necessário para fazer renovação automática: {STRING} +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Quantia mínima de dinheiro que deve permanecer no banco antes de considerar a renovação automática de veículos STR_CONFIG_SETTING_ERRMSG_DURATION :Duração da mensagem de erro: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Tempo de exibição de mensagens de erro numa janela vermelha. Algumas mensagens de erro (crítico) não são fechadas automaticamente após este tempo e precisam ser fechadas manualmente @@ -2461,8 +2461,8 @@ STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Obtendo STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Desconectar -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Introduza a senha -STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Introduza a senha +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Servidor protegido. Digite a senha +STR_NETWORK_NEED_COMPANY_PASSWORD_CAPTION :{WHITE}Empresa protegida. Digite a senha # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Jogadores conectados @@ -3390,7 +3390,7 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Modifica STR_GENERATION_WORLD :{WHITE}Gerando Mundo... STR_GENERATION_ABORT :{BLACK}Cancelar STR_GENERATION_ABORT_CAPTION :{WHITE}Cancelar Geração de Mundo -STR_GENERATION_ABORT_MESSAGE :{YELLOW}Você realmente deseja cancelar a geração? +STR_GENERATION_ABORT_MESSAGE :{YELLOW}Você quer mesmo cancelar a geração? STR_GENERATION_PROGRESS :{WHITE}{NUM}% completo STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Geração de mundo @@ -3591,7 +3591,7 @@ STR_INVALID_VEHICLE : Date: Tue, 9 Apr 2024 08:34:45 +0100 Subject: [PATCH 21/26] Codechange: Pass by reference to UpdateWidgetSize. (#12457) These parameters are always provided and not optional. --- src/ai/ai_gui.cpp | 8 +- src/airport_gui.cpp | 14 +-- src/autoreplace_gui.cpp | 22 ++--- src/bootstrap_gui.cpp | 16 ++-- src/bridge_gui.cpp | 12 +-- src/build_vehicle_gui.cpp | 30 +++---- src/cheat_gui.cpp | 6 +- src/company_gui.cpp | 130 ++++++++++++++-------------- src/date_gui.cpp | 4 +- src/depot_gui.cpp | 20 ++--- src/dock_gui.cpp | 6 +- src/dropdown.cpp | 4 +- src/engine_gui.cpp | 8 +- src/error_gui.cpp | 12 +-- src/fios_gui.cpp | 10 +-- src/framerate_gui.cpp | 36 ++++---- src/game/game_gui.cpp | 10 +-- src/genworld_gui.cpp | 30 +++---- src/goal_gui.cpp | 12 +-- src/graph_gui.cpp | 30 +++---- src/group_gui.cpp | 34 ++++---- src/industry_gui.cpp | 40 ++++----- src/intro_gui.cpp | 6 +- src/league_gui.cpp | 18 ++-- src/linkgraph/linkgraph_gui.cpp | 6 +- src/linkgraph/linkgraph_gui.h | 2 +- src/misc_gui.cpp | 40 ++++----- src/music_gui.cpp | 14 +-- src/network/network_content_gui.cpp | 22 ++--- src/network/network_content_gui.h | 2 +- src/network/network_gui.cpp | 80 ++++++++--------- src/newgrf_debug_gui.cpp | 22 ++--- src/newgrf_gui.cpp | 64 +++++++------- src/news_gui.cpp | 32 +++---- src/object_gui.cpp | 42 ++++----- src/order_gui.cpp | 10 +-- src/rail_gui.cpp | 50 +++++------ src/road_gui.cpp | 26 +++--- src/script/script_gui.cpp | 22 ++--- src/settings_gui.cpp | 30 +++---- src/signs_gui.cpp | 14 +-- src/station_gui.cpp | 30 +++---- src/statusbar_gui.cpp | 4 +- src/story_gui.cpp | 6 +- src/subsidy_gui.cpp | 6 +- src/terraform_gui.cpp | 6 +- src/textfile_gui.cpp | 8 +- src/textfile_gui.h | 2 +- src/timetable_gui.cpp | 12 +-- src/toolbar_gui.cpp | 6 +- src/town_gui.cpp | 36 ++++---- src/tree_gui.cpp | 6 +- src/vehicle_gui.cpp | 70 +++++++-------- src/widget.cpp | 8 +- src/window_gui.h | 8 +- 55 files changed, 602 insertions(+), 602 deletions(-) diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 68c0e3d2e5..9bdf53a1de 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -128,20 +128,20 @@ struct AIConfigWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_AIC_DECREASE_NUMBER: case WID_AIC_INCREASE_NUMBER: case WID_AIC_DECREASE_INTERVAL: case WID_AIC_INCREASE_INTERVAL: - *size = maxdim(*size, NWidgetScrollbar::GetHorizontalDimension()); + size = maxdim(size, NWidgetScrollbar::GetHorizontalDimension()); break; case WID_AIC_LIST: this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->height = this->line_height; - size->height = 8 * this->line_height; + resize.height = this->line_height; + size.height = 8 * this->line_height; break; } } diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index a6e4109f59..3b346d2629 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -317,7 +317,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_AP_CLASS_DROPDOWN: { @@ -327,7 +327,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -336,11 +336,11 @@ public: const AirportSpec *as = AirportSpec::Get(i); if (!as->enabled) continue; - size->width = std::max(size->width, GetStringBoundingBox(as->name).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(as->name).width + padding.width); } this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = 5 * this->line_height; + size.height = 5 * this->line_height; break; } @@ -354,7 +354,7 @@ public: Dimension d = GetSpriteSize(sprite); d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(d, *size); + size = maxdim(d, size); } } } @@ -368,8 +368,8 @@ public: StringID string = GetAirportTextCallback(as, layout, CBID_AIRPORT_ADDITIONAL_TEXT); if (string == STR_UNDEFINED) continue; - Dimension d = GetStringMultiLineBoundingBox(string, *size); - *size = maxdim(d, *size); + Dimension d = GetStringMultiLineBoundingBox(string, size); + size = maxdim(d, size); } } break; diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 93f2ae7825..62e8b1e85e 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -316,26 +316,26 @@ public: this->sel_group = id_g; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_RV_SORT_ASCENDING_DESCENDING: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_RV_LEFT_MATRIX: case WID_RV_RIGHT_MATRIX: - resize->height = GetEngineListHeight((VehicleType)this->window_number); - size->height = (this->window_number <= VEH_ROAD ? 8 : 4) * resize->height; + resize.height = GetEngineListHeight((VehicleType)this->window_number); + size.height = (this->window_number <= VEH_ROAD ? 8 : 4) * resize.height; break; case WID_RV_LEFT_DETAILS: case WID_RV_RIGHT_DETAILS: - size->height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; + size.height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; break; case WID_RV_TRAIN_WAGONREMOVE_TOGGLE: { @@ -346,7 +346,7 @@ public: d = maxdim(d, GetStringBoundingBox(str)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -355,7 +355,7 @@ public: d = maxdim(d, GetStringBoundingBox(STR_REPLACE_WAGONS)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -364,7 +364,7 @@ public: d = maxdim(d, GetStringBoundingBox(STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -375,7 +375,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -386,7 +386,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -397,7 +397,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/bootstrap_gui.cpp b/src/bootstrap_gui.cpp index 3487998615..e2e0e37004 100644 --- a/src/bootstrap_gui.cpp +++ b/src/bootstrap_gui.cpp @@ -97,12 +97,12 @@ public: this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_BEM_MESSAGE) { - *size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR); - size->width += WidgetDimensions::scaled.frametext.Horizontal(); - size->height += WidgetDimensions::scaled.frametext.Vertical(); + size = GetStringBoundingBox(STR_MISSING_GRAPHICS_ERROR); + size.width += WidgetDimensions::scaled.frametext.Horizontal(); + size.height += WidgetDimensions::scaled.frametext.Vertical(); } } @@ -211,7 +211,7 @@ public: this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { /* We cache the button size. This is safe as no reinit can happen here. */ if (this->button_size.width == 0) { @@ -223,13 +223,13 @@ public: switch (widget) { case WID_BAFD_QUESTION: /* The question is twice as wide as the buttons, and determine the height based on the width. */ - size->width = this->button_size.width * 2; - size->height = GetStringHeight(STR_MISSING_GRAPHICS_SET_MESSAGE, size->width - WidgetDimensions::scaled.frametext.Horizontal()) + WidgetDimensions::scaled.frametext.Vertical(); + size.width = this->button_size.width * 2; + size.height = GetStringHeight(STR_MISSING_GRAPHICS_SET_MESSAGE, size.width - WidgetDimensions::scaled.frametext.Horizontal()) + WidgetDimensions::scaled.frametext.Vertical(); break; case WID_BAFD_YES: case WID_BAFD_NO: - *size = this->button_size; + size = this->button_size; break; } } diff --git a/src/bridge_gui.cpp b/src/bridge_gui.cpp index 97f152457e..1eba99ddce 100644 --- a/src/bridge_gui.cpp +++ b/src/bridge_gui.cpp @@ -174,14 +174,14 @@ public: this->last_sorting = this->bridges.GetListing(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BBS_DROPDOWN_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_BBS_DROPDOWN_CRITERIA: { @@ -191,7 +191,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_BBS_BRIDGE_LIST: { @@ -201,11 +201,11 @@ public: sprite_dim = maxdim(sprite_dim, GetScaledSpriteSize(bridge_data.spec->sprite)); text_dim = maxdim(text_dim, GetStringBoundingBox(GetBridgeSelectString(bridge_data))); } - resize->height = std::max(sprite_dim.height, text_dim.height) + padding.height; // Max of both sizes + account for matrix edges. + resize.height = std::max(sprite_dim.height, text_dim.height) + padding.height; // Max of both sizes + account for matrix edges. this->icon_width = sprite_dim.width; // Width of bridge icon. - size->width = this->icon_width + WidgetDimensions::scaled.hsep_normal + text_dim.width + padding.width; - size->height = 4 * resize->height; // Smallest bridge gui is 4 entries high in the matrix. + size.width = this->icon_width + WidgetDimensions::scaled.hsep_normal + text_dim.width + padding.width; + size.height = 4 * resize.height; // Smallest bridge gui is 4 entries high in the matrix. break; } } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index 50244c24eb..db21d23c84 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1741,43 +1741,43 @@ struct BuildVehicleWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BV_LIST: - resize->height = GetEngineListHeight(this->vehicle_type); - size->height = 3 * resize->height; - size->width = std::max(size->width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165) + padding.width; + resize.height = GetEngineListHeight(this->vehicle_type); + size.height = 3 * resize.height; + size.width = std::max(size.width, GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_left + GetVehicleImageCellSize(this->vehicle_type, EIT_PURCHASE).extend_right + 165) + padding.width; break; case WID_BV_PANEL: - size->height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; + size.height = GetCharacterHeight(FS_NORMAL) * this->details_height + padding.height; break; case WID_BV_SORT_ASCENDING_DESCENDING: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_BV_CARGO_FILTER_DROPDOWN: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildCargoDropDownList()).width + padding.width); break; case WID_BV_BUILD: - *size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + this->vehicle_type); - *size = maxdim(*size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON + this->vehicle_type)); - size->width += padding.width; - size->height += padding.height; + size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON + this->vehicle_type); + size = maxdim(size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON + this->vehicle_type)); + size.width += padding.width; + size.height += padding.height; break; case WID_BV_SHOW_HIDE: - *size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON + this->vehicle_type); - *size = maxdim(*size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON + this->vehicle_type)); - size->width += padding.width; - size->height += padding.height; + size = GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_HIDE_TOGGLE_BUTTON + this->vehicle_type); + size = maxdim(size, GetStringBoundingBox(STR_BUY_VEHICLE_TRAIN_SHOW_TOGGLE_BUTTON + this->vehicle_type)); + size.width += padding.width; + size.height += padding.height; break; } } diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp index 394e7c5223..9bafd9120c 100644 --- a/src/cheat_gui.cpp +++ b/src/cheat_gui.cpp @@ -298,7 +298,7 @@ struct CheatWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_C_PANEL) return; @@ -339,8 +339,8 @@ struct CheatWindow : Window { this->line_height = std::max(this->icon.height, SETTING_BUTTON_HEIGHT); this->line_height = std::max(this->line_height, GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.framerect.Vertical(); - size->width = width + WidgetDimensions::scaled.hsep_wide * 2 + SETTING_BUTTON_WIDTH; - size->height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lengthof(_cheats_ui); + size.width = width + WidgetDimensions::scaled.hsep_wide * 2 + SETTING_BUTTON_WIDTH; + size.height = WidgetDimensions::scaled.framerect.Vertical() + this->line_height * lengthof(_cheats_ui); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 3f81d4cfdc..c0a2ba6094 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -389,29 +389,29 @@ struct CompanyFinancesWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_CF_EXPS_CATEGORY: - size->width = GetMaxCategoriesWidth(); - size->height = GetTotalCategoriesHeight(); + size.width = GetMaxCategoriesWidth(); + size.height = GetTotalCategoriesHeight(); break; case WID_CF_EXPS_PRICE1: case WID_CF_EXPS_PRICE2: case WID_CF_EXPS_PRICE3: - size->height = GetTotalCategoriesHeight(); + size.height = GetTotalCategoriesHeight(); [[fallthrough]]; case WID_CF_BALANCE_VALUE: case WID_CF_LOAN_VALUE: case WID_CF_OWN_VALUE: SetDParamMaxValue(0, CompanyFinancesWindow::max_money); - size->width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; + size.width = std::max(GetStringBoundingBox(STR_FINANCES_NEGATIVE_INCOME).width, GetStringBoundingBox(STR_FINANCES_POSITIVE_INCOME).width) + padding.width; break; case WID_CF_INTEREST_RATE: - size->height = GetCharacterHeight(FS_NORMAL); + size.height = GetCharacterHeight(FS_NORMAL); break; } } @@ -718,7 +718,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SCL_SPACER_DROPDOWN: { @@ -736,7 +736,7 @@ public: } } - size->width = std::max(size->width, 5 + d.width + padding.width); + size.width = std::max(size.width, 5 + d.width + padding.width); break; } @@ -745,15 +745,15 @@ public: this->square = GetSpriteSize(SPR_SQUARE); this->line_height = std::max(this->square.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - size->height = 5 * this->line_height; - resize->width = 1; - resize->height = this->line_height; + size.height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; break; } case WID_SCL_SEC_COL_DROPDOWN: if (!_loaded_newgrf_features.has_2CC) { - size->width = 0; + size.width = 0; break; } [[fallthrough]]; @@ -762,9 +762,9 @@ public: this->square = GetSpriteSize(SPR_SQUARE); int string_padding = this->square.width + WidgetDimensions::scaled.hsep_normal + padding.width; for (Colours colour = COLOUR_BEGIN; colour != COLOUR_END; colour++) { - size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DARK_BLUE + colour).width + string_padding); + size.width = std::max(size.width, GetStringBoundingBox(STR_COLOUR_DARK_BLUE + colour).width + string_padding); } - size->width = std::max(size->width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + string_padding); + size.width = std::max(size.width, GetStringBoundingBox(STR_COLOUR_DEFAULT).width + string_padding); break; } } @@ -1405,31 +1405,31 @@ public: this->number_dim = number_dim; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SCMF_HAS_MOUSTACHE_EARRING_TEXT: - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_EARRING)); - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_EARRING)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); break; case WID_SCMF_TIE_EARRING_TEXT: - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_EARRING)); - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_TIE)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_EARRING)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_TIE)); break; case WID_SCMF_LIPS_MOUSTACHE_TEXT: - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_LIPS)); - *size = maxdim(*size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_LIPS)); + size = maxdim(size, GetStringBoundingBox(STR_FACE_MOUSTACHE)); break; case WID_SCMF_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_SCMF_HAS_MOUSTACHE_EARRING: case WID_SCMF_HAS_GLASSES: - *size = this->yesno_dim; + size = this->yesno_dim; break; case WID_SCMF_EYECOLOUR: @@ -1442,7 +1442,7 @@ public: case WID_SCMF_COLLAR: case WID_SCMF_TIE_EARRING: case WID_SCMF_GLASSES: - *size = this->number_dim; + size = this->number_dim; break; } } @@ -1840,7 +1840,7 @@ struct CompanyInfrastructureWindow : Window } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { const Company *c = Company::Get((CompanyID)this->window_number); @@ -1848,20 +1848,20 @@ struct CompanyInfrastructureWindow : Window case WID_CI_RAIL_DESC: { uint lines = 1; // Starts at 1 because a line is also required for the section title - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_RAIL_SECT).width + padding.width); for (const auto &rt : _sorted_railtypes) { if (HasBit(this->railtypes, rt)) { lines++; - size->width = std::max(size->width, GetStringBoundingBox(GetRailTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(GetRailTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); } } if (this->railtypes != RAILTYPES_NONE) { lines++; - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_SIGNALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); } - size->height = std::max(size->height, lines * GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, lines * GetCharacterHeight(FS_NORMAL)); break; } @@ -1869,28 +1869,28 @@ struct CompanyInfrastructureWindow : Window case WID_CI_TRAM_DESC: { uint lines = 1; // Starts at 1 because a line is also required for the section title - size->width = std::max(size->width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(widget == WID_CI_ROAD_DESC ? STR_COMPANY_INFRASTRUCTURE_VIEW_ROAD_SECT : STR_COMPANY_INFRASTRUCTURE_VIEW_TRAM_SECT).width + padding.width); for (const auto &rt : _sorted_roadtypes) { if (HasBit(this->roadtypes, rt) && RoadTypeIsRoad(rt) == (widget == WID_CI_ROAD_DESC)) { lines++; - size->width = std::max(size->width, GetStringBoundingBox(GetRoadTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(GetRoadTypeInfo(rt)->strings.name).width + padding.width + WidgetDimensions::scaled.hsep_indent); } } - size->height = std::max(size->height, lines * GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, lines * GetCharacterHeight(FS_NORMAL)); break; } case WID_CI_WATER_DESC: - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width + padding.width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_WATER_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS).width + padding.width + WidgetDimensions::scaled.hsep_indent); break; case WID_CI_STATION_DESC: - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width + padding.width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + padding.width + WidgetDimensions::scaled.hsep_indent); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS).width + padding.width + WidgetDimensions::scaled.hsep_indent); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS).width + padding.width + WidgetDimensions::scaled.hsep_indent); break; case WID_CI_RAIL_COUNT: @@ -1930,17 +1930,17 @@ struct CompanyInfrastructureWindow : Window StringID str_total = TimerGameEconomy::UsingWallclockUnits() ? STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD : STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR; SetDParamMaxValue(0, this->GetTotalMaintenanceCost() * 12); // Convert to per year this->total_width = GetStringBoundingBox(str_total).width + WidgetDimensions::scaled.hsep_indent * 2; - size->width = std::max(size->width, this->total_width); + size.width = std::max(size.width, this->total_width); SetDParamMaxValue(0, max_cost * 12); // Convert to per year count_width += std::max(this->total_width, GetStringBoundingBox(str_total).width); } - size->width = std::max(size->width, count_width); + size.width = std::max(size.width, count_width); /* Set height of the total line. */ if (widget == WID_CI_TOTAL) { - size->height = _settings_game.economy.infrastructure_maintenance ? std::max(size->height, WidgetDimensions::scaled.vsep_normal + GetCharacterHeight(FS_NORMAL)) : 0; + size.height = _settings_game.economy.infrastructure_maintenance ? std::max(size.height, WidgetDimensions::scaled.vsep_normal + GetCharacterHeight(FS_NORMAL)) : 0; } break; } @@ -2249,11 +2249,11 @@ struct CompanyWindow : Window this->DrawWidgets(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_C_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_C_DESC_COLOUR_SCHEME_EXAMPLE: { @@ -2261,31 +2261,31 @@ struct CompanyWindow : Window Dimension d = GetSpriteSize(SPR_VEH_BUS_SW_VIEW, &offset); d.width -= offset.x; d.height -= offset.y; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_C_DESC_COMPANY_VALUE: SetDParam(0, INT64_MAX); // Arguably the maximum company value - size->width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width; + size.width = GetStringBoundingBox(STR_COMPANY_VIEW_COMPANY_VALUE).width; break; case WID_C_DESC_VEHICLE_COUNTS: SetDParamMaxValue(0, 5000); // Maximum number of vehicles for (uint i = 0; i < lengthof(_company_view_vehicle_count_strings); i++) { - size->width = std::max(size->width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(_company_view_vehicle_count_strings[i]).width + padding.width); } break; case WID_C_DESC_INFRASTRUCTURE_COUNTS: SetDParamMaxValue(0, UINT_MAX); - size->width = GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width; - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); - size->width += padding.width; + size.width = GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL).width; + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_WATER).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_STATION).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_NONE).width); + size.width += padding.width; break; case WID_C_VIEW_HQ: @@ -2296,19 +2296,19 @@ struct CompanyWindow : Window case WID_C_HOSTILE_TAKEOVER: case WID_C_COMPANY_PASSWORD: case WID_C_COMPANY_JOIN: - size->width = GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width; - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); - size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); - size->width += padding.width; + size.width = GetStringBoundingBox(STR_COMPANY_VIEW_VIEW_HQ_BUTTON).width; + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_BUILD_HQ_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_RELOCATE_HQ).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width); + size.width = std::max(size.width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width); + size.width += padding.width; break; case WID_C_HAS_PASSWORD: - if (_networking) *size = maxdim(*size, GetSpriteSize(SPR_LOCK)); + if (_networking) size = maxdim(size, GetSpriteSize(SPR_LOCK)); break; } } @@ -2622,18 +2622,18 @@ struct BuyCompanyWindow : Window { this->company_value = hostile_takeover ? CalculateHostileTakeoverValue(c) : c->bankrupt_value; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BC_FACE: - *size = GetScaledSpriteSize(SPR_GRADIENT); + size = GetScaledSpriteSize(SPR_GRADIENT); break; case WID_BC_QUESTION: const Company *c = Company::Get((CompanyID)this->window_number); SetDParam(0, c->index); SetDParam(1, this->company_value); - size->height = GetStringHeight(this->hostile_takeover ? STR_BUY_COMPANY_HOSTILE_TAKEOVER : STR_BUY_COMPANY_MESSAGE, size->width); + size.height = GetStringHeight(this->hostile_takeover ? STR_BUY_COMPANY_HOSTILE_TAKEOVER : STR_BUY_COMPANY_MESSAGE, size.width); break; } } diff --git a/src/date_gui.cpp b/src/date_gui.cpp index 57b2c076a8..7faad2acf2 100644 --- a/src/date_gui.cpp +++ b/src/date_gui.cpp @@ -100,7 +100,7 @@ struct SetDateWindow : Window { ShowDropDownList(this, std::move(list), selected, widget); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d = {0, 0}; switch (widget) { @@ -126,7 +126,7 @@ struct SetDateWindow : Window { d.width += padding.width; d.height += padding.height; - *size = d; + size = d; } void SetStringParameters(WidgetID widget) const override diff --git a/src/depot_gui.cpp b/src/depot_gui.cpp index ec1595460a..74d58bc415 100644 --- a/src/depot_gui.cpp +++ b/src/depot_gui.cpp @@ -653,7 +653,7 @@ struct DepotWindow : Window { this->flag_size = maxdim(GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED), GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING)); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_D_MATRIX: { @@ -679,18 +679,18 @@ struct DepotWindow : Window { } int base_width = this->count_width + this->header_width + padding.width; - resize->height = std::max(this->cell_size.height, min_height + padding.height); + resize.height = std::max(this->cell_size.height, min_height + padding.height); if (this->type == VEH_TRAIN) { - resize->width = 1; - size->width = base_width + 2 * ScaleSpriteTrad(29); // about 2 parts - size->height = resize->height * 6; + resize.width = 1; + size.width = base_width + 2 * ScaleSpriteTrad(29); // about 2 parts + size.height = resize.height * 6; } else { - resize->width = base_width + this->cell_size.extend_left + this->cell_size.extend_right; - size->width = resize->width * (this->type == VEH_ROAD ? 5 : 3); - size->height = resize->height * (this->type == VEH_ROAD ? 5 : 3); + resize.width = base_width + this->cell_size.extend_left + this->cell_size.extend_right; + size.width = resize.width * (this->type == VEH_ROAD ? 5 : 3); + size.height = resize.height * (this->type == VEH_ROAD ? 5 : 3); } - fill->width = resize->width; - fill->height = resize->height; + fill.width = resize.width; + fill.height = resize.height; break; } } diff --git a/src/dock_gui.cpp b/src/dock_gui.cpp index e0d500fdf8..fec4024a3a 100644 --- a/src/dock_gui.cpp +++ b/src/dock_gui.cpp @@ -529,13 +529,13 @@ public: UpdateDocksDirection(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BDD_X: case WID_BDD_Y: - size->width = ScaleGUITrad(96) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(96) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Vertical(); break; } } diff --git a/src/dropdown.cpp b/src/dropdown.cpp index 292d524132..6366090b88 100644 --- a/src/dropdown.cpp +++ b/src/dropdown.cpp @@ -210,9 +210,9 @@ struct DropdownWindow : Window { if (this->position.y < button_rect.top && list_dim.height > widget_dim.height) this->vscroll->UpdatePosition(INT_MAX); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { - if (widget == WID_DM_ITEMS) *size = this->items_dim; + if (widget == WID_DM_ITEMS) size = this->items_dim; } Point OnInitialPosition([[maybe_unused]] int16_t sm_width, [[maybe_unused]] int16_t sm_height, [[maybe_unused]] int window_number) override diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index b24f902363..172b22f507 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -78,7 +78,7 @@ struct EnginePreviewWindow : Window { this->flags |= WF_STICKY; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_EP_QUESTION) return; @@ -98,11 +98,11 @@ struct EnginePreviewWindow : Window { } this->vehicle_space = std::max(ScaleSpriteTrad(40), y - y_offs); - size->width = std::max(size->width, x + std::abs(x_offs)); + size.width = std::max(size.width, x + std::abs(x_offs)); SetDParam(0, GetEngineCategoryName(engine)); - size->height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size->width) + WidgetDimensions::scaled.vsep_wide + GetCharacterHeight(FS_NORMAL) + this->vehicle_space; + size.height = GetStringHeight(STR_ENGINE_PREVIEW_MESSAGE, size.width) + WidgetDimensions::scaled.vsep_wide + GetCharacterHeight(FS_NORMAL) + this->vehicle_space; SetDParam(0, engine); - size->height += GetStringHeight(GetEngineInfoString(engine), size->width); + size.height += GetStringHeight(GetEngineInfoString(engine), size.width); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/error_gui.cpp b/src/error_gui.cpp index 412864226c..e702cdf133 100644 --- a/src/error_gui.cpp +++ b/src/error_gui.cpp @@ -189,16 +189,16 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_EM_MESSAGE: { CopyInDParam(this->params); if (this->textref_stack_size > 0) StartTextRefStackUsage(this->textref_stack_grffile, this->textref_stack_size, this->textref_stack); - this->height_summary = GetStringHeight(this->summary_msg, size->width); - this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, size->width); - this->height_extra = (this->extra_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->extra_msg, size->width); + this->height_summary = GetStringHeight(this->summary_msg, size.width); + this->height_detailed = (this->detailed_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->detailed_msg, size.width); + this->height_extra = (this->extra_msg == INVALID_STRING_ID) ? 0 : GetStringHeight(this->extra_msg, size.width); if (this->textref_stack_size > 0) StopTextRefStackUsage(); @@ -206,11 +206,11 @@ public: if (this->detailed_msg != INVALID_STRING_ID) panel_height += this->height_detailed + WidgetDimensions::scaled.vsep_wide; if (this->extra_msg != INVALID_STRING_ID) panel_height += this->height_extra + WidgetDimensions::scaled.vsep_wide; - size->height = std::max(size->height, panel_height); + size.height = std::max(size.height, panel_height); break; } case WID_EM_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; } } diff --git a/src/fios_gui.cpp b/src/fios_gui.cpp index c986b4eff6..58bfbe627f 100644 --- a/src/fios_gui.cpp +++ b/src/fios_gui.cpp @@ -561,23 +561,23 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SL_BACKGROUND: - size->height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; break; case WID_SL_DRIVES_DIRECTORIES_LIST: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = resize->height * 10 + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = resize.height * 10 + padding.height; break; case WID_SL_SORT_BYNAME: case WID_SL_SORT_BYDATE: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/framerate_gui.cpp b/src/framerate_gui.cpp index dc5698791d..ea1bd9e4dc 100644 --- a/src/framerate_gui.cpp +++ b/src/framerate_gui.cpp @@ -540,32 +540,32 @@ struct FramerateWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_FRW_RATE_GAMELOOP: SetDParam(0, STR_FRAMERATE_FPS_GOOD); SetDParam(1, 999999); SetDParam(2, 2); - *size = GetStringBoundingBox(STR_FRAMERATE_RATE_GAMELOOP); + size = GetStringBoundingBox(STR_FRAMERATE_RATE_GAMELOOP); break; case WID_FRW_RATE_DRAWING: SetDParam(0, STR_FRAMERATE_FPS_GOOD); SetDParam(1, 999999); SetDParam(2, 2); - *size = GetStringBoundingBox(STR_FRAMERATE_RATE_BLITTER); + size = GetStringBoundingBox(STR_FRAMERATE_RATE_BLITTER); break; case WID_FRW_RATE_FACTOR: SetDParam(0, 999999); SetDParam(1, 2); - *size = GetStringBoundingBox(STR_FRAMERATE_SPEED_FACTOR); + size = GetStringBoundingBox(STR_FRAMERATE_SPEED_FACTOR); break; case WID_FRW_TIMES_NAMES: { - size->width = 0; - size->height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + MIN_ELEMENTS * GetCharacterHeight(FS_NORMAL); - resize->width = 0; - resize->height = GetCharacterHeight(FS_NORMAL); + size.width = 0; + size.height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + MIN_ELEMENTS * GetCharacterHeight(FS_NORMAL); + resize.width = 0; + resize.height = GetCharacterHeight(FS_NORMAL); for (PerformanceElement e : DISPLAY_ORDER_PFE) { if (_pf_data[e].num_valid == 0) continue; Dimension line_size; @@ -576,7 +576,7 @@ struct FramerateWindow : Window { SetDParamStr(1, GetAIName(e - PFE_AI0)); line_size = GetStringBoundingBox(STR_FRAMERATE_AI); } - size->width = std::max(size->width, line_size.width); + size.width = std::max(size.width, line_size.width); } break; } @@ -584,14 +584,14 @@ struct FramerateWindow : Window { case WID_FRW_TIMES_CURRENT: case WID_FRW_TIMES_AVERAGE: case WID_FRW_ALLOCSIZE: { - *size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT)); + size = GetStringBoundingBox(STR_FRAMERATE_CURRENT + (widget - WID_FRW_TIMES_CURRENT)); SetDParam(0, 999999); SetDParam(1, 2); Dimension item_size = GetStringBoundingBox(STR_FRAMERATE_MS_GOOD); - size->width = std::max(size->width, item_size.width); - size->height += GetCharacterHeight(FS_NORMAL) * MIN_ELEMENTS + WidgetDimensions::scaled.vsep_normal; - resize->width = 0; - resize->height = GetCharacterHeight(FS_NORMAL); + size.width = std::max(size.width, item_size.width); + size.height += GetCharacterHeight(FS_NORMAL) * MIN_ELEMENTS + WidgetDimensions::scaled.vsep_normal; + resize.width = 0; + resize.height = GetCharacterHeight(FS_NORMAL); break; } } @@ -780,7 +780,7 @@ struct FrametimeGraphWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_FGW_GRAPH) { SetDParam(0, 100); @@ -792,10 +792,10 @@ struct FrametimeGraphWindow : Window { graph_size.height = std::max(100u, 10 * (size_ms_label.height + 1)); /* Always 2:1 graph area */ graph_size.width = 2 * graph_size.height; - *size = graph_size; + size = graph_size; - size->width += size_ms_label.width + 2; - size->height += size_s_label.height + 2; + size.width += size_ms_label.width + 2; + size.height += size_s_label.height + 2; } } diff --git a/src/game/game_gui.cpp b/src/game/game_gui.cpp index aae47f76e8..7ad4cd7b42 100644 --- a/src/game/game_gui.cpp +++ b/src/game/game_gui.cpp @@ -136,19 +136,19 @@ struct GSConfigWindow : public Window { this->vscroll->SetCount(this->visible_settings.size()); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GSC_SETTINGS: this->line_height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; break; case WID_GSC_GSLIST: this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = 1 * this->line_height; + size.height = 1 * this->line_height; break; } } diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 8c34d91f8e..e6942fe9c7 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -571,15 +571,15 @@ struct GenerateLandscapeWindow : public Window { } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d{0, (uint)GetCharacterHeight(FS_NORMAL)}; const StringID *strs = nullptr; switch (widget) { case WID_GL_TEMPERATE: case WID_GL_ARCTIC: case WID_GL_TROPICAL: case WID_GL_TOYLAND: - size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_GL_HEIGHTMAP_HEIGHT_TEXT: @@ -654,7 +654,7 @@ struct GenerateLandscapeWindow : public Window { break; case WID_GL_HEIGHTMAP_NAME_TEXT: - size->width = 0; + size.width = 0; break; default: @@ -667,7 +667,7 @@ struct GenerateLandscapeWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override @@ -1121,14 +1121,14 @@ struct CreateScenarioWindow : public Window this->DrawWidgets(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { StringID str = STR_JUST_INT; switch (widget) { case WID_CS_TEMPERATE: case WID_CS_ARCTIC: case WID_CS_TROPICAL: case WID_CS_TOYLAND: - size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_CS_START_DATE_TEXT: @@ -1151,7 +1151,7 @@ struct CreateScenarioWindow : public Window Dimension d = GetStringBoundingBox(str); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override @@ -1405,23 +1405,23 @@ struct GenerateProgressWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GP_PROGRESS_BAR: { SetDParamMaxValue(0, 100); - *size = GetStringBoundingBox(STR_GENERATION_PROGRESS); + size = GetStringBoundingBox(STR_GENERATION_PROGRESS); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; } case WID_GP_PROGRESS_TEXT: for (uint i = 0; i < GWP_CLASS_COUNT; i++) { - size->width = std::max(size->width, GetStringBoundingBox(_generation_class_table[i]).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(_generation_class_table[i]).width + padding.width); } - size->height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; + size.height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; break; } } diff --git a/src/goal_gui.cpp b/src/goal_gui.cpp index 033c6359e2..afbbd953d5 100644 --- a/src/goal_gui.cpp +++ b/src/goal_gui.cpp @@ -168,18 +168,18 @@ struct GoalListWindow : public Window { return num; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_GOAL_LIST) return; Dimension d = GetStringBoundingBox(STR_GOALS_NONE); - resize->width = 1; - resize->height = d.height; + resize.width = 1; + resize.height = d.height; d.height *= 5; d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(*size, d); + size = maxdim(size, d); } /** @@ -388,12 +388,12 @@ struct GoalQuestionWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_GQ_QUESTION) return; SetDParamStr(0, this->question); - size->height = GetStringHeight(STR_JUST_RAW_STRING, size->width); + size.height = GetStringHeight(STR_JUST_RAW_STRING, size.width); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index af2efd3722..01f6f4ad15 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -517,7 +517,7 @@ protected: } public: - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_GRAPH_GRAPH) return; @@ -548,9 +548,9 @@ public: SetDParam(1, INT64_MAX); uint y_label_width = GetStringBoundingBox(STR_GRAPH_Y_LABEL).width; - size->width = std::max(size->width, ScaleGUITrad(5) + y_label_width + this->num_vert_lines * (x_label_width + ScaleGUITrad(5)) + ScaleGUITrad(9)); - size->height = std::max(size->height, ScaleGUITrad(5) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->draw_dates ? 3 : 1)) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4)); - size->height = std::max(size->height, size->width / 3); + size.width = std::max(size.width, ScaleGUITrad(5) + y_label_width + this->num_vert_lines * (x_label_width + ScaleGUITrad(5)) + ScaleGUITrad(9)); + size.height = std::max(size.height, ScaleGUITrad(5) + (1 + MIN_GRAPH_NUM_LINES_Y * 2 + (this->draw_dates ? 3 : 1)) * GetCharacterHeight(FS_SMALL) + ScaleGUITrad(4)); + size.height = std::max(size.height, size.width / 3); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -990,14 +990,14 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_CPR_MATRIX) { BaseGraphWindow::UpdateWidgetSize(widget, size, padding, fill, resize); return; } - size->height = GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical(); + size.height = GetCharacterHeight(FS_SMALL) + WidgetDimensions::scaled.framerect.Vertical(); for (const CargoSpec *cs : _sorted_standard_cargo_specs) { SetDParam(0, cs->name); @@ -1005,13 +1005,13 @@ struct PaymentRatesGraphWindow : BaseGraphWindow { d.width += this->legend_width + WidgetDimensions::scaled.hsep_normal; // colour field d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(d, *size); + size = maxdim(d, size); } - this->line_height = size->height; - size->height = this->line_height * 11; /* Default number of cargo types in most climates. */ - resize->width = 0; - resize->height = this->line_height; + this->line_height = size.height; + size.height = this->line_height * 11; /* Default number of cargo types in most climates. */ + resize.width = 0; + resize.height = this->line_height; } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -1216,12 +1216,12 @@ struct PerformanceRatingDetailWindow : Window { uint score_detail_left; uint score_detail_right; - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_PRD_SCORE_FIRST: this->bar_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.fullbevel.Vertical(); - size->height = this->bar_height + WidgetDimensions::scaled.matrix.Vertical(); + size.height = this->bar_height + WidgetDimensions::scaled.matrix.Vertical(); uint score_info_width = 0; for (uint i = SCORE_BEGIN; i < SCORE_END; i++) { @@ -1257,9 +1257,9 @@ struct PerformanceRatingDetailWindow : Window { SetDParam(1, max); uint score_detail_width = GetStringBoundingBox(STR_PERFORMANCE_DETAIL_AMOUNT_CURRENCY).width; - size->width = WidgetDimensions::scaled.frametext.Horizontal() + score_info_width + WidgetDimensions::scaled.hsep_wide + this->bar_width + WidgetDimensions::scaled.hsep_wide + score_detail_width; + size.width = WidgetDimensions::scaled.frametext.Horizontal() + score_info_width + WidgetDimensions::scaled.hsep_wide + this->bar_width + WidgetDimensions::scaled.hsep_wide + score_detail_width; uint left = WidgetDimensions::scaled.frametext.left; - uint right = size->width - WidgetDimensions::scaled.frametext.right; + uint right = size.width - WidgetDimensions::scaled.frametext.right; bool rtl = _current_text_dir == TD_RTL; this->score_info_left = rtl ? right - score_info_width : left; diff --git a/src/group_gui.cpp b/src/group_gui.cpp index 55bb30dd1e..c4b3998102 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -400,56 +400,56 @@ public: *this->sorting = this->vehgroups.GetListing(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GL_LIST_GROUP: - size->width = this->ComputeGroupInfoSize(); - resize->height = this->tiny_step_height; - fill->height = this->tiny_step_height; + size.width = this->ComputeGroupInfoSize(); + resize.height = this->tiny_step_height; + fill.height = this->tiny_step_height; break; case WID_GL_ALL_VEHICLES: case WID_GL_DEFAULT_VEHICLES: - size->width = this->ComputeGroupInfoSize(); - size->height = this->tiny_step_height; + size.width = this->ComputeGroupInfoSize(); + size.height = this->tiny_step_height; break; case WID_GL_SORT_BY_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_GL_LIST_VEHICLE: this->ComputeGroupInfoSize(); - resize->height = GetVehicleListHeight(this->vli.vtype, this->tiny_step_height); - size->height = 4 * resize->height; + resize.height = GetVehicleListHeight(this->vli.vtype, this->tiny_step_height); + size.height = 4 * resize.height; break; case WID_GL_GROUP_BY_DROPDOWN: - size->width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; + size.width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; break; case WID_GL_SORT_BY_DROPDOWN: - size->width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); - size->width += padding.width; + size.width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); + size.width += padding.width; break; case WID_GL_FILTER_BY_CARGO: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); break; case WID_GL_MANAGE_VEHICLES_DROPDOWN: { Dimension d = this->GetActionDropdownSize(true, true, true); d.height += padding.height; d.width += padding.width; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 711ee598f9..96d82325dc 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -423,7 +423,7 @@ public: this->SetupArrays(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_DPI_MATRIX_WIDGET: { @@ -431,10 +431,10 @@ public: for (const auto &indtype : this->list) { d = maxdim(d, GetStringBoundingBox(GetIndustrySpec(indtype)->name)); } - resize->height = std::max(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height; + resize.height = std::max(this->legend.height, GetCharacterHeight(FS_NORMAL)) + padding.height; d.width += this->legend.width + WidgetDimensions::scaled.hsep_wide + padding.width; - d.height = 5 * resize->height; - *size = maxdim(*size, d); + d.height = 5 * resize.height; + size = maxdim(size, d); break; } @@ -478,8 +478,8 @@ public: /* Set it to something more sane :) */ height += extra_lines_prd + extra_lines_req + extra_lines_newgrf; - size->height = height * GetCharacterHeight(FS_NORMAL) + padding.height; - size->width = d.width + padding.width; + size.height = height * GetCharacterHeight(FS_NORMAL) + padding.height; + size.width = d.width + padding.width; break; } @@ -489,7 +489,7 @@ public: d = maxdim(d, GetStringBoundingBox(STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -1004,9 +1004,9 @@ public: if (widget == WID_IV_CAPTION) SetDParam(0, this->window_number); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { - if (widget == WID_IV_INFO) size->height = this->info_height; + if (widget == WID_IV_INFO) size.height = this->info_height; } void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override @@ -1720,14 +1720,14 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_ID_DROPDOWN_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -1738,17 +1738,17 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_ID_INDUSTRY_LIST: { Dimension d = GetStringBoundingBox(STR_INDUSTRY_DIRECTORY_NONE); - resize->height = d.height; + resize.height = d.height; d.height *= 5; d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -2626,21 +2626,21 @@ struct IndustryCargoesWindow : public Window { CargoesField::cargo_field_width = CargoesField::cargo_border.width * 2 + CargoesField::cargo_line.width * CargoesField::max_cargoes + CargoesField::cargo_space.width * (CargoesField::max_cargoes - 1); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_IC_PANEL: - resize->height = CargoesField::normal_height; - size->width = CargoesField::industry_width * 3 + CargoesField::cargo_field_width * 2 + WidgetDimensions::scaled.frametext.Horizontal(); - size->height = CargoesField::small_height + 2 * resize->height + WidgetDimensions::scaled.frametext.Vertical(); + resize.height = CargoesField::normal_height; + size.width = CargoesField::industry_width * 3 + CargoesField::cargo_field_width * 2 + WidgetDimensions::scaled.frametext.Horizontal(); + size.height = CargoesField::small_height + 2 * resize.height + WidgetDimensions::scaled.frametext.Vertical(); break; case WID_IC_IND_DROPDOWN: - size->width = std::max(size->width, this->ind_textsize.width + padding.width); + size.width = std::max(size.width, this->ind_textsize.width + padding.width); break; case WID_IC_CARGO_DROPDOWN: - size->width = std::max(size->width, this->cargo_textsize.width + padding.width); + size.width = std::max(size.width, this->cargo_textsize.width + padding.width); break; } } diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 0e1d53c84c..32e6c2d34a 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -297,13 +297,13 @@ struct SelectGameWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SGI_TEMPERATE_LANDSCAPE: case WID_SGI_ARCTIC_LANDSCAPE: case WID_SGI_TROPIC_LANDSCAPE: case WID_SGI_TOYLAND_LANDSCAPE: - size->width += WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.fullbevel.Vertical(); break; } } diff --git a/src/league_gui.cpp b/src/league_gui.cpp index 3e9c5ca833..58b36c213b 100644 --- a/src/league_gui.cpp +++ b/src/league_gui.cpp @@ -129,7 +129,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_PLT_BACKGROUND) return; @@ -162,8 +162,8 @@ public: this->text_width = widest_width + WidgetDimensions::scaled.hsep_indent * 3; // Keep some extra spacing - size->width = WidgetDimensions::scaled.framerect.Horizontal() + this->ordinal_width + this->icon.width + this->text_width + WidgetDimensions::scaled.hsep_wide; - size->height = this->line_height * MAX_COMPANIES + WidgetDimensions::scaled.framerect.Vertical(); + size.width = WidgetDimensions::scaled.framerect.Horizontal() + this->ordinal_width + this->icon.width + this->text_width + WidgetDimensions::scaled.hsep_wide; + size.height = this->line_height * MAX_COMPANIES + WidgetDimensions::scaled.framerect.Vertical(); } void OnGameTick() override @@ -359,7 +359,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SLT_BACKGROUND) return; @@ -385,18 +385,18 @@ public: if (!show_icon_column) this->icon_size.width = 0; else this->icon_size.width += WidgetDimensions::scaled.hsep_wide; - size->width = this->rank_width + this->icon_size.width + this->text_width + this->score_width + WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.hsep_wide * 2; - size->height = this->line_height * std::max(3u, (unsigned)this->rows.size()) + WidgetDimensions::scaled.framerect.Vertical(); + size.width = this->rank_width + this->icon_size.width + this->text_width + this->score_width + WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.hsep_wide * 2; + size.height = this->line_height * std::max(3u, (unsigned)this->rows.size()) + WidgetDimensions::scaled.framerect.Vertical(); if (!lt->header.empty()) { SetDParamStr(0, lt->header); - this->header_height = GetStringHeight(STR_JUST_RAW_STRING, size->width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; - size->height += header_height; + this->header_height = GetStringHeight(STR_JUST_RAW_STRING, size.width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; + size.height += header_height; } else this->header_height = 0; if (!lt->footer.empty()) { SetDParamStr(0, lt->footer); - size->height += GetStringHeight(STR_JUST_RAW_STRING, size->width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; + size.height += GetStringHeight(STR_JUST_RAW_STRING, size.width - WidgetDimensions::scaled.framerect.Horizontal()) + WidgetDimensions::scaled.vsep_wide; } } diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 7f9c944c4e..c065711504 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -579,7 +579,7 @@ void LinkGraphLegendWindow::SetOverlay(std::shared_ptr overlay } } -void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) +void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) { if (IsInsideMM(widget, WID_LGL_SATURATION_FIRST, WID_LGL_SATURATION_LAST + 1)) { StringID str = STR_NULL; @@ -594,7 +594,7 @@ void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [ Dimension dim = GetStringBoundingBox(str, FS_SMALL); dim.width += padding.width; dim.height += padding.height; - *size = maxdim(*size, dim); + size = maxdim(size, dim); } } if (IsInsideMM(widget, WID_LGL_CARGO_FIRST, WID_LGL_CARGO_LAST + 1)) { @@ -602,7 +602,7 @@ void LinkGraphLegendWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [ Dimension dim = GetStringBoundingBox(cargo->abbrev, FS_SMALL); dim.width += padding.width; dim.height += padding.height; - *size = maxdim(*size, dim); + size = maxdim(size, dim); } } diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index e86a38b84b..a8dc91c822 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -108,7 +108,7 @@ public: LinkGraphLegendWindow(WindowDesc *desc, int window_number); void SetOverlay(std::shared_ptr overlay); - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; void DrawWidget(const Rect &r, WidgetID widget) const override; bool OnTooltip([[maybe_unused]] Point pt, WidgetID widget, TooltipCloseCondition close_cond) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override; diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index 182693b1a0..1412e849de 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -89,23 +89,23 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_LI_BACKGROUND) return; - size->height = WidgetDimensions::scaled.frametext.Vertical(); + size.height = WidgetDimensions::scaled.frametext.Vertical(); for (size_t i = 0; i < this->landinfo_data.size(); i++) { uint width = GetStringBoundingBox(this->landinfo_data[i]).width + WidgetDimensions::scaled.frametext.Horizontal(); - size->width = std::max(size->width, width); + size.width = std::max(size.width, width); - size->height += GetCharacterHeight(FS_NORMAL) + (i == 0 ? WidgetDimensions::scaled.vsep_wide : WidgetDimensions::scaled.vsep_normal); + size.height += GetCharacterHeight(FS_NORMAL) + (i == 0 ? WidgetDimensions::scaled.vsep_wide : WidgetDimensions::scaled.vsep_normal); } if (!this->cargo_acceptance.empty()) { uint width = GetStringBoundingBox(this->cargo_acceptance).width + WidgetDimensions::scaled.frametext.Horizontal(); - size->width = std::max(size->width, std::min(static_cast(ScaleGUITrad(300)), width)); + size.width = std::max(size.width, std::min(static_cast(ScaleGUITrad(300)), width)); SetDParamStr(0, cargo_acceptance); - size->height += GetStringHeight(STR_JUST_RAW_STRING, size->width - WidgetDimensions::scaled.frametext.Horizontal()); + size.height += GetStringHeight(STR_JUST_RAW_STRING, size.width - WidgetDimensions::scaled.frametext.Horizontal()); } } @@ -489,7 +489,7 @@ struct AboutWindow : public Window { if (widget == WID_A_COPYRIGHT) SetDParamStr(0, _openttd_revision_year); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_A_SCROLLING_TEXT) return; @@ -502,7 +502,7 @@ struct AboutWindow : public Window { for (const auto &str : _credits) { d.width = std::max(d.width, GetStringBoundingBox(str).width); } - *size = maxdim(*size, d); + size = maxdim(size, d); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -702,17 +702,17 @@ struct TooltipsWindow : public Window return pt; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_TT_BACKGROUND) return; CopyInDParam(this->params); - size->width = std::min(GetStringBoundingBox(this->string_id).width, ScaleGUITrad(194)); - size->height = GetStringHeight(this->string_id, size->width); + size.width = std::min(GetStringBoundingBox(this->string_id).width, ScaleGUITrad(194)); + size.height = GetStringHeight(this->string_id, size.width); /* Increase slightly to have some space around the box. */ - size->width += WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height += WidgetDimensions::scaled.framerect.Vertical() + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width += WidgetDimensions::scaled.framerect.Horizontal() + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height += WidgetDimensions::scaled.framerect.Vertical() + WidgetDimensions::scaled.fullbevel.Vertical(); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -986,17 +986,17 @@ struct QueryStringWindow : public Window this->ReInit(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_QS_DEFAULT && (this->flags & QSF_ENABLE_DEFAULT) == 0) { /* We don't want this widget to show! */ - fill->width = 0; - resize->width = 0; - size->width = 0; + fill.width = 0; + resize.width = 0; + size.width = 0; } if (widget == WID_QS_WARNING) { - *size = this->warning_size; + size = this->warning_size; } } @@ -1139,11 +1139,11 @@ struct QueryWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_Q_TEXT) return; - *size = GetStringMultiLineBoundingBox(this->message, *size); + size = GetStringMultiLineBoundingBox(this->message, size); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/music_gui.cpp b/src/music_gui.cpp index 081cd3650b..36817ae150 100644 --- a/src/music_gui.cpp +++ b/src/music_gui.cpp @@ -518,7 +518,7 @@ struct MusicTrackSelectionWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_MTS_PLAYLIST: { @@ -530,7 +530,7 @@ struct MusicTrackSelectionWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -547,7 +547,7 @@ struct MusicTrackSelectionWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -700,7 +700,7 @@ struct MusicWindow : public Window { ); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { /* Make sure that WID_M_SHUFFLE and WID_M_PROGRAMME have the same size. @@ -710,7 +710,7 @@ struct MusicWindow : public Window { Dimension d = maxdim(GetStringBoundingBox(STR_MUSIC_PROGRAM), GetStringBoundingBox(STR_MUSIC_SHUFFLE)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -718,7 +718,7 @@ struct MusicWindow : public Window { Dimension d = GetStringBoundingBox(STR_MUSIC_TRACK_NONE); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -730,7 +730,7 @@ struct MusicWindow : public Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } diff --git a/src/network/network_content_gui.cpp b/src/network/network_content_gui.cpp index 2a37224498..d6a15f44fa 100644 --- a/src/network/network_content_gui.cpp +++ b/src/network/network_content_gui.cpp @@ -116,21 +116,21 @@ void BaseNetworkContentDownloadStatusWindow::Close([[maybe_unused]] int data) this->Window::Close(); } -void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) +void BaseNetworkContentDownloadStatusWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) { switch (widget) { case WID_NCDS_PROGRESS_BAR: SetDParamMaxDigits(0, 8); SetDParamMaxDigits(1, 8); SetDParamMaxDigits(2, 8); - *size = GetStringBoundingBox(STR_CONTENT_DOWNLOAD_PROGRESS_SIZE); + size = GetStringBoundingBox(STR_CONTENT_DOWNLOAD_PROGRESS_SIZE); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; case WID_NCDS_PROGRESS_TEXT: - size->height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; + size.height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; break; } } @@ -585,25 +585,25 @@ public: this->checkbox_size = maxdim(maxdim(GetSpriteSize(SPR_BOX_EMPTY), GetSpriteSize(SPR_BOX_CHECKED)), GetSpriteSize(SPR_BLOT)); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NCL_CHECKBOX: - size->width = this->checkbox_size.width + padding.width; + size.width = this->checkbox_size.width + padding.width; break; case WID_NCL_TYPE: { - Dimension d = *size; + Dimension d = size; for (int i = CONTENT_TYPE_BEGIN; i < CONTENT_TYPE_END; i++) { d = maxdim(d, GetStringBoundingBox(STR_CONTENT_TYPE_BASE_GRAPHICS + i - CONTENT_TYPE_BASE_GRAPHICS)); } - size->width = d.width + padding.width; + size.width = d.width + padding.width; break; } case WID_NCL_MATRIX: - resize->height = std::max(this->checkbox_size.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - size->height = 10 * resize->height; + resize.height = std::max(this->checkbox_size.height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; + size.height = 10 * resize.height; break; } } diff --git a/src/network/network_content_gui.h b/src/network/network_content_gui.h index 5af46a59aa..a0f014e239 100644 --- a/src/network/network_content_gui.h +++ b/src/network/network_content_gui.h @@ -33,7 +33,7 @@ public: BaseNetworkContentDownloadStatusWindow(WindowDesc *desc); void Close([[maybe_unused]] int data = 0) override; - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; void DrawWidget(const Rect &r, WidgetID widget) const override; void OnDownloadProgress(const ContentInfo *ci, int bytes) override; }; diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index aa9940c936..54584a1a51 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -475,48 +475,48 @@ public: this->flag_offset = this->blot_offset + ScaleGUITrad(2) + GetSpriteSize(SPR_BLOT).width; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NG_MATRIX: - resize->height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - fill->height = resize->height; - size->height = 12 * resize->height; + resize.height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; + fill.height = resize.height; + size.height = 12 * resize.height; break; case WID_NG_LASTJOINED: - size->height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.matrix.Vertical(); + size.height = std::max(GetSpriteSize(SPR_BLOT).height, (uint)GetCharacterHeight(FS_NORMAL)) + WidgetDimensions::scaled.matrix.Vertical(); break; case WID_NG_LASTJOINED_SPACER: - size->width = NWidgetScrollbar::GetVerticalDimension().width; + size.width = NWidgetScrollbar::GetVerticalDimension().width; break; case WID_NG_NAME: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow break; case WID_NG_CLIENTS: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow SetDParamMaxValue(0, MAX_CLIENTS); SetDParamMaxValue(1, MAX_CLIENTS); SetDParamMaxValue(2, MAX_COMPANIES); SetDParamMaxValue(3, MAX_COMPANIES); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_GENERAL_ONLINE)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_GENERAL_ONLINE)); break; case WID_NG_MAPSIZE: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow SetDParamMaxValue(0, MAX_MAP_SIZE); SetDParamMaxValue(1, MAX_MAP_SIZE); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT)); break; case WID_NG_DATE: case WID_NG_YEARS: - size->width += 2 * Window::SortButtonWidth(); // Make space for the arrow + size.width += 2 * Window::SortButtonWidth(); // Make space for the arrow SetDParamMaxValue(0, 5); - *size = maxdim(*size, GetStringBoundingBox(STR_JUST_INT)); + size = maxdim(size, GetStringBoundingBox(STR_JUST_INT)); break; } } @@ -1010,13 +1010,13 @@ struct NetworkStartServerWindow : public Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NSS_CONNTYPE_BTN: - *size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); - size->width += padding.width; - size->height += padding.height; + size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); + size.width += padding.width; + size.height += padding.height; break; } } @@ -1673,7 +1673,7 @@ public: this->SetWidgetDisabledState(WID_CL_SERVER_NAME_EDIT, !_network_server); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_CL_SERVER_NAME: @@ -1684,14 +1684,14 @@ public: const NetworkClientInfo *own_ci = NetworkClientInfo::GetByClientID(_network_own_client_id); SetDParamStr(0, own_ci != nullptr ? own_ci->client_name : _settings_client.network.client_name); } - *size = GetStringBoundingBox(STR_JUST_RAW_STRING); - size->width = std::min(size->width, static_cast(ScaleGUITrad(200))); // By default, don't open the window too wide. + size = GetStringBoundingBox(STR_JUST_RAW_STRING); + size.width = std::min(size.width, static_cast(ScaleGUITrad(200))); // By default, don't open the window too wide. break; case WID_CL_SERVER_VISIBILITY: - *size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); - size->width += padding.width; - size->height += padding.height; + size = maxdim(maxdim(GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_LOCAL), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_PUBLIC)), GetStringBoundingBox(STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY)); + size.width += padding.width; + size.height += padding.height; break; case WID_CL_MATRIX: { @@ -1699,10 +1699,10 @@ public: height += WidgetDimensions::scaled.framerect.Vertical(); this->line_height = std::max(height, (uint)GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - fill->height = this->line_height; - size->height = std::max(size->height, 5 * this->line_height); + resize.width = 1; + resize.height = this->line_height; + fill.height = this->line_height; + size.height = std::max(size.height, 5 * this->line_height); break; } } @@ -2162,28 +2162,28 @@ struct NetworkJoinStatusWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NJS_PROGRESS_BAR: /* Account for the statuses */ for (uint i = 0; i < NETWORK_JOIN_STATUS_END; i++) { - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_1 + i)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_1 + i)); } /* For the number of waiting (other) players */ SetDParamMaxValue(0, MAX_CLIENTS); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_WAITING)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_WAITING)); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; case WID_NJS_PROGRESS_TEXT: /* Account for downloading ~ 10 MiB */ SetDParamMaxDigits(0, 8); SetDParamMaxDigits(1, 8); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); - *size = maxdim(*size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); + size = maxdim(size, GetStringBoundingBox(STR_NETWORK_CONNECTING_DOWNLOADING_1)); break; } } @@ -2273,10 +2273,10 @@ struct NetworkCompanyPasswordWindow : public Window { this->ReInit(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_NCP_WARNING) { - *size = this->warning_size; + size = this->warning_size; } } @@ -2379,10 +2379,10 @@ struct NetworkAskRelayWindow : public Window { this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_NAR_TEXT) { - *size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT); + size = GetStringBoundingBox(STR_NETWORK_ASK_RELAY_TEXT); } } @@ -2482,10 +2482,10 @@ struct NetworkAskSurveyWindow : public Window { this->InitNested(0); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_NAS_TEXT) { - *size = GetStringBoundingBox(STR_NETWORK_ASK_SURVEY_TEXT); + size = GetStringBoundingBox(STR_NETWORK_ASK_SURVEY_TEXT); } } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index 95695ab294..e19ccba54b 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -357,21 +357,21 @@ struct NewGRFInspectWindow : Window { GetFeatureHelper(this->window_number)->SetStringParameters(this->GetFeatureIndex()); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NGRFI_VEH_CHAIN: { assert(this->HasChainIndex()); GrfSpecFeature f = GetFeatureNum(this->window_number); - size->height = std::max(size->height, GetVehicleImageCellSize((VehicleType)(VEH_TRAIN + (f - GSF_TRAINS)), EIT_IN_DEPOT).height + 2 + WidgetDimensions::scaled.bevel.Vertical()); + size.height = std::max(size.height, GetVehicleImageCellSize((VehicleType)(VEH_TRAIN + (f - GSF_TRAINS)), EIT_IN_DEPOT).height + 2 + WidgetDimensions::scaled.bevel.Vertical()); break; } case WID_NGRFI_MAINPANEL: - resize->height = std::max(11, GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal); - resize->width = 1; + resize.height = std::max(11, GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal); + resize.width = 1; - size->height = 5 * resize->height + WidgetDimensions::scaled.frametext.Vertical(); + size.height = 5 * resize.height + WidgetDimensions::scaled.frametext.Vertical(); break; } } @@ -882,11 +882,11 @@ struct SpriteAlignerWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SA_SPRITE: - size->height = ScaleGUITrad(200); + size.height = ScaleGUITrad(200); break; case WID_SA_LIST: { @@ -896,10 +896,10 @@ struct SpriteAlignerWindow : Window { SetDParamMaxDigits(1, 6); d = maxdim(d, GetStringBoundingBox(STR_SPRITE_ALIGNER_SPRITE)); } - size->width = d.width + padding.width; - resize->height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->width = 1; - fill->height = resize->height; + size.width = d.width + padding.width; + resize.height = GetCharacterHeight(FS_NORMAL) + padding.height; + resize.width = 1; + fill.height = resize.height; break; } diff --git a/src/newgrf_gui.cpp b/src/newgrf_gui.cpp index e311fad3c6..ef8950a5ce 100644 --- a/src/newgrf_gui.cpp +++ b/src/newgrf_gui.cpp @@ -210,13 +210,13 @@ struct NewGRFParametersWindow : public Window { return this->HasParameterInfo(nr) ? this->grf_config->param_info[nr].value() : GetDummyParameterInfo(nr); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NP_NUMPAR_DEC: case WID_NP_NUMPAR_INC: { - size->width = std::max(SETTING_BUTTON_WIDTH / 2, GetCharacterHeight(FS_NORMAL)); - size->height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)); + size.width = std::max(SETTING_BUTTON_WIDTH / 2, GetCharacterHeight(FS_NORMAL)); + size.height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)); break; } @@ -225,16 +225,16 @@ struct NewGRFParametersWindow : public Window { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_NP_BACKGROUND: this->line_height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; break; case WID_NP_DESCRIPTION: @@ -248,7 +248,7 @@ struct NewGRFParametersWindow : public Window { d.height += WidgetDimensions::scaled.frametext.Vertical(); suggestion = maxdim(d, suggestion); } - size->height = suggestion.height; + size.height = suggestion.height; break; } } @@ -743,34 +743,34 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_NS_FILE_LIST: { Dimension d = maxdim(GetScaledSpriteSize(SPR_SQUARE), GetScaledSpriteSize(SPR_WARNING_SIGN)); - resize->height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); - size->height = std::max(size->height, padding.height + 6 * resize->height); + resize.height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, padding.height + 6 * resize.height); break; } case WID_NS_AVAIL_LIST: { Dimension d = maxdim(GetScaledSpriteSize(SPR_SQUARE), GetScaledSpriteSize(SPR_WARNING_SIGN)); - resize->height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); - size->height = std::max(size->height, padding.height + 8 * resize->height); + resize.height = std::max(d.height + 2U, GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, padding.height + 8 * resize.height); break; } case WID_NS_NEWGRF_INFO_TITLE: { Dimension dim = GetStringBoundingBox(STR_NEWGRF_SETTINGS_INFO_TITLE); - size->height = std::max(size->height, dim.height + WidgetDimensions::scaled.frametext.Vertical()); - size->width = std::max(size->width, dim.width + WidgetDimensions::scaled.frametext.Horizontal()); + size.height = std::max(size.height, dim.height + WidgetDimensions::scaled.frametext.Vertical()); + size.width = std::max(size.width, dim.width + WidgetDimensions::scaled.frametext.Horizontal()); break; } case WID_NS_NEWGRF_INFO: - size->height = std::max(size->height, WidgetDimensions::scaled.framerect.Vertical() + 10 * GetCharacterHeight(FS_NORMAL)); + size.height = std::max(size.height, WidgetDimensions::scaled.framerect.Vertical() + 10 * GetCharacterHeight(FS_NORMAL)); break; case WID_NS_PRESET_LIST: { @@ -780,16 +780,16 @@ struct NewGRFWindow : public Window, NewGRFScanCallback { d = maxdim(d, GetStringBoundingBox(STR_JUST_RAW_STRING)); } d.width += padding.width; - *size = maxdim(d, *size); + size = maxdim(d, size); break; } case WID_NS_CONTENT_DOWNLOAD: case WID_NS_CONTENT_DOWNLOAD2: { Dimension d = GetStringBoundingBox(STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON); - *size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT)); - size->width += padding.width; - size->height += padding.height; + size = maxdim(d, GetStringBoundingBox(STR_INTRO_ONLINE_CONTENT)); + size.width += padding.width; + size.height += padding.height; break; } } @@ -2099,18 +2099,18 @@ struct SavePresetWindow : public Window { { } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SVP_PRESET_LIST: { - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 0; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 0; for (uint i = 0; i < this->presets.size(); i++) { Dimension d = GetStringBoundingBox(this->presets[i]); - size->width = std::max(size->width, d.width + padding.width); - resize->height = std::max(resize->height, d.height); + size.width = std::max(size.width, d.width + padding.width); + resize.height = std::max(resize.height, d.height); } - size->height = ClampU((uint)this->presets.size(), 5, 20) * resize->height + padding.height; + size.height = ClampU((uint)this->presets.size(), 5, 20) * resize.height + padding.height; break; } } @@ -2214,15 +2214,15 @@ struct ScanProgressWindow : public Window { this->InitNested(1); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SP_PROGRESS_BAR: { SetDParamMaxValue(0, 100); - *size = GetStringBoundingBox(STR_GENERATION_PROGRESS); + size = GetStringBoundingBox(STR_GENERATION_PROGRESS); /* We need some spacing for the 'border' */ - size->height += WidgetDimensions::scaled.frametext.Horizontal(); - size->width += WidgetDimensions::scaled.frametext.Vertical(); + size.height += WidgetDimensions::scaled.frametext.Horizontal(); + size.width += WidgetDimensions::scaled.frametext.Vertical(); break; } @@ -2231,8 +2231,8 @@ struct ScanProgressWindow : public Window { SetDParamMaxDigits(1, 4); /* We really don't know the width. We could determine it by scanning the NewGRFs, * but this is the status window for scanning them... */ - size->width = std::max(size->width, GetStringBoundingBox(STR_NEWGRF_SCAN_STATUS).width + padding.width); - size->height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; + size.width = std::max(size.width, GetStringBoundingBox(STR_NEWGRF_SCAN_STATUS).width + padding.width); + size.height = GetCharacterHeight(FS_NORMAL) * 2 + WidgetDimensions::scaled.vsep_normal; break; } } diff --git a/src/news_gui.cpp b/src/news_gui.cpp index e90772f170..8e8d98f261 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -358,7 +358,7 @@ struct NewsWindow : Window { return pt; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { StringID str = STR_NULL; switch (widget) { @@ -367,12 +367,12 @@ struct NewsWindow : Window { * thus it doesn't get the default sizing of a caption. */ Dimension d2 = GetStringBoundingBox(STR_NEWS_MESSAGE_CAPTION); d2.height += WidgetDimensions::scaled.captiontext.Vertical(); - *size = maxdim(*size, d2); + size = maxdim(size, d2); return; } case WID_N_MGR_FACE: - *size = maxdim(*size, GetScaledSpriteSize(SPR_GRADIENT)); + size = maxdim(size, GetScaledSpriteSize(SPR_GRADIENT)); break; case WID_N_MGR_NAME: @@ -406,15 +406,15 @@ struct NewsWindow : Window { Dimension d2 = GetStringBoundingBox(this->GetWidget(WID_N_SHOW_GROUP)->widget_data); d2.height += WidgetDimensions::scaled.captiontext.Vertical(); d2.width += WidgetDimensions::scaled.captiontext.Horizontal(); - *size = d2; + size = d2; } else { /* Hide 'Show group window' button if this news is not about a vehicle. */ - size->width = 0; - size->height = 0; - resize->width = 0; - resize->height = 0; - fill->width = 0; - fill->height = 0; + size.width = 0; + size.height = 0; + resize.width = 0; + resize.height = 0; + fill.width = 0; + fill.height = 0; } return; @@ -423,13 +423,13 @@ struct NewsWindow : Window { } /* Update minimal size with length of the multi-line string. */ - Dimension d = *size; + Dimension d = size; d.width = (d.width >= padding.width) ? d.width - padding.width : 0; d.height = (d.height >= padding.height) ? d.height - padding.height : 0; d = GetStringMultiLineBoundingBox(str, d); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); } void SetStringParameters(WidgetID widget) const override @@ -1099,19 +1099,19 @@ struct MessageHistoryWindow : Window { this->OnInvalidateData(0); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_MH_BACKGROUND) { this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; - resize->height = this->line_height; + resize.height = this->line_height; /* Months are off-by-one, so it's actually 8. Not using * month 12 because the 1 is usually less wide. */ SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::ORIGINAL_MAX_YEAR, 7, 30)); this->date_width = GetStringBoundingBox(STR_JUST_DATE_TINY).width + WidgetDimensions::scaled.hsep_wide; - size->height = 4 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); // At least 4 lines are visible. - size->width = std::max(200u, size->width); // At least 200 pixels wide. + size.height = 4 * resize.height + WidgetDimensions::scaled.framerect.Vertical(); // At least 4 lines are visible. + size.width = std::max(200u, size.width); // At least 200 pixels wide. } } diff --git a/src/object_gui.cpp b/src/object_gui.cpp index 8d1880723a..7ea9fd37df 100644 --- a/src/object_gui.cpp +++ b/src/object_gui.cpp @@ -212,25 +212,25 @@ public: this->object_margin = ScaleGUITrad(4); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BO_CLASS_LIST: { 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 + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(objclass->name).width + padding.width); } this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.height = this->line_height; + size.height = 5 * this->line_height; break; } case WID_BO_OBJECT_NAME: case WID_BO_OBJECT_SIZE: /* We do not want the window to resize when selecting objects; better clip texts */ - size->width = 0; + size.width = 0; break; case WID_BO_OBJECT_MATRIX: { @@ -238,11 +238,11 @@ public: ObjectClass *objclass = ObjectClass::Get(_selected_object_class); const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); if (spec != nullptr) { - if (spec->views >= 2) size->width += resize->width; - if (spec->views >= 4) size->height += resize->height; + if (spec->views >= 2) size.width += resize.width; + if (spec->views >= 4) size.height += resize.height; } - resize->width = 0; - resize->height = 0; + resize.width = 0; + resize.height = 0; break; } @@ -267,37 +267,37 @@ public: * we want these columns to be slightly less wide. When there are two rows, then * determine the size of the widgets based on the maximum size for a single row * of widgets, or just the twice the widget height of the two row ones. */ - size->height = std::max(height[0], height[1] * 2); + size.height = std::max(height[0], height[1] * 2); if (two_wide) { - size->width = (3 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin) * 2; + size.width = (3 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin) * 2; } else { - size->width = 4 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; + size.width = 4 * ScaleGUITrad(TILE_PIXELS) + 2 * this->object_margin; } /* Get the right size for the single widget based on the current spec. */ ObjectClass *objclass = ObjectClass::Get(_selected_object_class); const ObjectSpec *spec = objclass->GetSpec(_selected_object_index); if (spec != nullptr) { - if (spec->views <= 1) size->width += WidgetDimensions::scaled.hsep_normal; - if (spec->views <= 2) size->height += WidgetDimensions::scaled.vsep_normal; - if (spec->views >= 2) size->width /= 2; - if (spec->views >= 4) size->height /= 2; + if (spec->views <= 1) size.width += WidgetDimensions::scaled.hsep_normal; + if (spec->views <= 2) size.height += WidgetDimensions::scaled.vsep_normal; + if (spec->views >= 2) size.width /= 2; + if (spec->views >= 4) size.height /= 2; } break; } case WID_BO_INFO: - size->height = this->info_height; + size.height = this->info_height; break; case WID_BO_SELECT_MATRIX: - fill->height = 1; - resize->height = 1; + fill.height = 1; + resize.height = 1; break; case WID_BO_SELECT_IMAGE: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); break; default: break; diff --git a/src/order_gui.cpp b/src/order_gui.cpp index 95d0d6f941..44979fd75a 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -836,12 +836,12 @@ public: this->OnInvalidateData(VIWD_MODIFY_ORDERS); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_O_ORDER_LIST: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 6 * resize->height + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 6 * resize.height + padding.height; break; case WID_O_COND_VARIABLE: { @@ -851,7 +851,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -862,7 +862,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 16a0e985b6..a3ebd0843d 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1236,7 +1236,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BRAS_NEWST_LIST: { @@ -1244,17 +1244,17 @@ public: for (auto station_class : this->station_classes) { d = maxdim(d, GetStringBoundingBox(StationClass::Get(station_class)->name)); } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = 5 * this->line_height; - resize->height = this->line_height; + size.height = 5 * this->line_height; + resize.height = this->line_height; break; } case WID_BRAS_SHOW_NEWST_TYPE: { if (!_railstation.newstations) { - size->width = 0; - size->height = 0; + size.width = 0; + size.height = 0; break; } @@ -1269,24 +1269,24 @@ public: d = maxdim(d, GetStringBoundingBox(str)); } } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); break; } case WID_BRAS_PLATFORM_DIR_X: case WID_BRAS_PLATFORM_DIR_Y: case WID_BRAS_IMAGE: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_BRAS_COVERAGE_TEXTS: - size->height = this->coverage_height; + size.height = this->coverage_height; break; case WID_BRAS_MATRIX: - fill->height = 1; - resize->height = 1; + fill.height = 1; + resize.height = 1; break; } } @@ -1752,14 +1752,14 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_BS_DRAG_SIGNALS_DENSITY_LABEL) { /* Two digits for signals density. */ - size->width = std::max(size->width, 2 * GetDigitWidth() + padding.width + WidgetDimensions::scaled.framerect.Horizontal()); + size.width = std::max(size.width, 2 * GetDigitWidth() + padding.width + WidgetDimensions::scaled.framerect.Horizontal()); } else if (IsInsideMM(widget, WID_BS_SEMAPHORE_NORM, WID_BS_ELECTRIC_PBS_OWAY + 1)) { - size->width = std::max(size->width, this->sig_sprite_size.width + padding.width); - size->height = std::max(size->height, this->sig_sprite_size.height + padding.height); + size.width = std::max(size.width, this->sig_sprite_size.width + padding.width); + size.height = std::max(size.height, this->sig_sprite_size.height + padding.height); } } @@ -1951,12 +1951,12 @@ struct BuildRailDepotWindow : public PickerWindowBase { this->LowerWidget(WID_BRAD_DEPOT_NE + _build_depot_direction); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (!IsInsideMM(widget, WID_BRAD_DEPOT_NE, WID_BRAD_DEPOT_NW + 1)) return; - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -2106,21 +2106,21 @@ struct BuildRailWaypointWindow : PickerWindowBase { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BRW_WAYPOINT_MATRIX: /* Two blobs high and three wide. */ - size->width += resize->width * 2; - size->height += resize->height * 1; + size.width += resize.width * 2; + size.height += resize.height * 1; /* Resizing in X direction only at blob size, but at pixel level in Y. */ - resize->height = 1; + resize.height = 1; break; case WID_BRW_WAYPOINT: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(58) + WidgetDimensions::scaled.fullbevel.Vertical(); break; } } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index e966d9b770..6bc38298ce 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -1020,12 +1020,12 @@ struct BuildRoadDepotWindow : public PickerWindowBase { this->FinishInitNested(TRANSPORT_ROAD); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (!IsInsideMM(widget, WID_BROD_DEPOT_NE, WID_BROD_DEPOT_NW + 1)) return; - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -1354,7 +1354,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_BROS_NEWST_LIST: { @@ -1362,10 +1362,10 @@ public: for (auto rs_class : this->roadstop_classes) { d = maxdim(d, GetStringBoundingBox(RoadStopClass::Get(rs_class)->name)); } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); this->line_height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.matrix.Vertical(); - size->height = 5 * this->line_height; - resize->height = this->line_height; + size.height = 5 * this->line_height; + resize.height = this->line_height; break; } @@ -1380,7 +1380,7 @@ public: d = maxdim(d, GetStringBoundingBox(str)); } } - size->width = std::max(size->width, d.width + padding.width); + size.width = std::max(size.width, d.width + padding.width); break; } @@ -1391,17 +1391,17 @@ public: case WID_BROS_STATION_X: case WID_BROS_STATION_Y: case WID_BROS_IMAGE: - size->width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); - size->height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); + size.width = ScaleGUITrad(64) + WidgetDimensions::scaled.fullbevel.Horizontal(); + size.height = ScaleGUITrad(48) + WidgetDimensions::scaled.fullbevel.Vertical(); break; case WID_BROS_MATRIX: - fill->height = 1; - resize->height = 1; + fill.height = 1; + resize.height = 1; break; case WID_BROS_ACCEPTANCE: - size->height = this->coverage_height; + size.height = this->coverage_height; break; } } diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 21d0a5af0a..9706426a6a 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -103,15 +103,15 @@ struct ScriptListWindow : public Window { SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_LIST_CAPTION_GAMESCRIPT : STR_AI_LIST_CAPTION_AI); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SCRL_LIST) return; this->line_height = GetCharacterHeight(FS_NORMAL) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -341,15 +341,15 @@ struct ScriptSettingsWindow : public Window { SetDParam(0, (this->slot == OWNER_DEITY) ? STR_AI_SETTINGS_CAPTION_GAMESCRIPT : STR_AI_SETTINGS_CAPTION_AI); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SCRS_BACKGROUND) return; this->line_height = std::max(SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)) + padding.height; - resize->width = 1; - resize->height = this->line_height; - size->height = 5 * this->line_height; + resize.width = 1; + resize.height = this->line_height; + size.height = 5 * this->line_height; } void DrawWidget(const Rect &r, WidgetID widget) const override @@ -823,11 +823,11 @@ struct ScriptDebugWindow : public Window { ScriptDebugWindow::initial_state = this->filter; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget == WID_SCRD_LOG_PANEL) { - resize->height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; - size->height = 14 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); + resize.height = GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal; + size.height = 14 * resize.height + WidgetDimensions::scaled.framerect.Vertical(); } } diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index dbcd63755e..b188d429e6 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -648,7 +648,7 @@ struct GameOptionsWindow : Window { if (changed) this->ReInit(0, 0, this->flags & WF_CENTERED); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GO_TEXT_SFX_VOLUME: @@ -656,7 +656,7 @@ struct GameOptionsWindow : Window { Dimension d = maxdim(GetStringBoundingBox(STR_GAME_OPTIONS_SFX_VOLUME), GetStringBoundingBox(STR_GAME_OPTIONS_MUSIC_VOLUME)); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -669,7 +669,7 @@ struct GameOptionsWindow : Window { case WID_GO_BASE_SFX_DROPDOWN: case WID_GO_BASE_MUSIC_DROPDOWN: { int selected; - size->width = std::max(size->width, GetDropDownListDimension(this->BuildDropDownList(widget, &selected)).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildDropDownList(widget, &selected)).width + padding.width); break; } } @@ -2364,14 +2364,14 @@ struct GameSettingsWindow : Window { _circle_size = maxdim(GetSpriteSize(SPR_CIRCLE_FOLDED), GetSpriteSize(SPR_CIRCLE_UNFOLDED)); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_GS_OPTIONSPANEL: - resize->height = SETTING_HEIGHT = std::max({(int)_circle_size.height, SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)}) + WidgetDimensions::scaled.vsep_normal; - resize->width = 1; + resize.height = SETTING_HEIGHT = std::max({(int)_circle_size.height, SETTING_BUTTON_HEIGHT, GetCharacterHeight(FS_NORMAL)}) + WidgetDimensions::scaled.vsep_normal; + resize.width = 1; - size->height = 5 * resize->height + WidgetDimensions::scaled.framerect.Vertical(); + size.height = 5 * resize.height + WidgetDimensions::scaled.framerect.Vertical(); break; case WID_GS_HELP_TEXT: { @@ -2382,16 +2382,16 @@ struct GameSettingsWindow : Window { }; for (uint i = 0; i < lengthof(setting_types); i++) { SetDParam(0, setting_types[i]); - size->width = std::max(size->width, GetStringBoundingBox(STR_CONFIG_SETTING_TYPE).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_CONFIG_SETTING_TYPE).width + padding.width); } - size->height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + - std::max(size->height, GetSettingsTree().GetMaxHelpHeight(size->width)); + size.height = 2 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal + + std::max(size.height, GetSettingsTree().GetMaxHelpHeight(size.width)); break; } case WID_GS_RESTRICT_CATEGORY: case WID_GS_RESTRICT_TYPE: - size->width = std::max(GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_CATEGORY).width, GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_TYPE).width); + size.width = std::max(GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_CATEGORY).width, GetStringBoundingBox(STR_CONFIG_SETTING_RESTRICT_TYPE).width); break; default: @@ -3010,7 +3010,7 @@ struct CustomCurrencyWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { /* Set the appropriate width for the up/down buttons. */ @@ -3018,21 +3018,21 @@ struct CustomCurrencyWindow : Window { case WID_CC_RATE_UP: case WID_CC_YEAR_DOWN: case WID_CC_YEAR_UP: - *size = maxdim(*size, {(uint)SETTING_BUTTON_WIDTH / 2, (uint)SETTING_BUTTON_HEIGHT}); + size = maxdim(size, {(uint)SETTING_BUTTON_WIDTH / 2, (uint)SETTING_BUTTON_HEIGHT}); break; /* Set the appropriate width for the edit buttons. */ case WID_CC_SEPARATOR_EDIT: case WID_CC_PREFIX_EDIT: case WID_CC_SUFFIX_EDIT: - *size = maxdim(*size, {(uint)SETTING_BUTTON_WIDTH, (uint)SETTING_BUTTON_HEIGHT}); + size = maxdim(size, {(uint)SETTING_BUTTON_WIDTH, (uint)SETTING_BUTTON_HEIGHT}); break; /* Make sure the window is wide enough for the widest exchange rate */ case WID_CC_RATE: SetDParam(0, 1); SetDParam(1, INT32_MAX); - *size = GetStringBoundingBox(STR_CURRENCY_EXCHANGE_RATE); + size = GetStringBoundingBox(STR_CURRENCY_EXCHANGE_RATE); break; } } diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index fd327eb020..1556930029 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -263,23 +263,23 @@ struct SignListWindow : Window, SignList { this->vscroll->SetCapacityFromWidget(this, WID_SIL_LIST, WidgetDimensions::scaled.framerect.Vertical()); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SIL_LIST: { Dimension spr_dim = GetSpriteSize(SPR_COMPANY_ICON); this->text_offset = WidgetDimensions::scaled.frametext.left + spr_dim.width + 2; // 2 pixels space between icon and the sign text. - resize->height = std::max(GetCharacterHeight(FS_NORMAL), spr_dim.height + 2); - Dimension d = {(uint)(this->text_offset + WidgetDimensions::scaled.frametext.right), padding.height + 5 * resize->height}; - *size = maxdim(*size, d); + resize.height = std::max(GetCharacterHeight(FS_NORMAL), spr_dim.height + 2); + Dimension d = {(uint)(this->text_offset + WidgetDimensions::scaled.frametext.right), padding.height + 5 * resize.height}; + size = maxdim(size, d); break; } case WID_SIL_CAPTION: SetDParamMaxValue(0, Sign::GetPoolSize(), 3); - *size = GetStringBoundingBox(STR_SIGN_LIST_CAPTION); - size->height += padding.height; - size->width += padding.width; + size = GetStringBoundingBox(STR_SIGN_LIST_CAPTION); + size.height += padding.height; + size.width += padding.width; break; } } diff --git a/src/station_gui.cpp b/src/station_gui.cpp index a9c45fb5da..d277fdbf1f 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -411,14 +411,14 @@ public: CompanyStationsWindow::initial_state = this->filter; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_STL_SORTBY: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -429,13 +429,13 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_STL_LIST: - resize->height = std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL) + ScaleGUITrad(3)); - size->height = padding.height + 5 * resize->height; + resize.height = std::max(GetCharacterHeight(FS_NORMAL), GetCharacterHeight(FS_SMALL) + ScaleGUITrad(3)); + size.height = padding.height + 5 * resize.height; /* Determine appropriate width for mini station rating graph */ this->rating_width = 0; @@ -1392,25 +1392,25 @@ struct StationViewWindow : public Window { data->Update(count); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_SV_WAITING: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 4 * resize->height + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 4 * resize.height + padding.height; this->expand_shrink_width = std::max(GetStringBoundingBox("-").width, GetStringBoundingBox("+").width); break; case WID_SV_ACCEPT_RATING_LIST: - size->height = ((this->GetWidget(WID_SV_ACCEPTS_RATINGS)->widget_data == STR_STATION_VIEW_RATINGS_BUTTON) ? this->accepts_lines : this->rating_lines) * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = ((this->GetWidget(WID_SV_ACCEPTS_RATINGS)->widget_data == STR_STATION_VIEW_RATINGS_BUTTON) ? this->accepts_lines : this->rating_lines) * GetCharacterHeight(FS_NORMAL) + padding.height; break; case WID_SV_CLOSE_AIRPORT: if (!(Station::Get(this->window_number)->facilities & FACIL_AIRPORT)) { /* Hide 'Close Airport' button if no airport present. */ - size->width = 0; - resize->width = 0; - fill->width = 0; + size.width = 0; + resize.width = 0; + fill.width = 0; } break; } @@ -2305,7 +2305,7 @@ struct SelectStationWindow : Window { this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_JS_PANEL) return; @@ -2319,11 +2319,11 @@ struct SelectStationWindow : Window { d = maxdim(d, GetStringBoundingBox(T::EXPECTED_FACIL == FACIL_WAYPOINT ? STR_STATION_LIST_WAYPOINT : STR_STATION_LIST_STATION)); } - resize->height = d.height; + resize.height = d.height; d.height *= 5; d.width += padding.width; d.height += padding.height; - *size = d; + size = d; } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/statusbar_gui.cpp b/src/statusbar_gui.cpp index 69f12dbfdd..dd6e33da34 100644 --- a/src/statusbar_gui.cpp +++ b/src/statusbar_gui.cpp @@ -83,7 +83,7 @@ struct StatusBarWindow : Window { Window::FindWindowPlacementAndResize(_toolbar_width, def_height); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { Dimension d; switch (widget) { @@ -106,7 +106,7 @@ struct StatusBarWindow : Window { d.width += padding.width; d.height += padding.height; - *size = maxdim(d, *size); + size = maxdim(d, size); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/story_gui.cpp b/src/story_gui.cpp index 1ed4e950d9..9a91eb7128 100644 --- a/src/story_gui.cpp +++ b/src/story_gui.cpp @@ -751,7 +751,7 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SB_SEL_PAGE && widget != WID_SB_PAGE_PANEL) return; @@ -780,14 +780,14 @@ public: d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_SB_PAGE_PANEL: { d.height *= 5; d.height += padding.height + WidgetDimensions::scaled.frametext.Vertical(); - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/subsidy_gui.cpp b/src/subsidy_gui.cpp index f43226d5f4..98c218e3b6 100644 --- a/src/subsidy_gui.cpp +++ b/src/subsidy_gui.cpp @@ -131,17 +131,17 @@ struct SubsidyListWindow : Window { return 3 + num_awarded + num_not_awarded; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_SUL_PANEL) return; Dimension d = maxdim(GetStringBoundingBox(STR_SUBSIDIES_OFFERED_TITLE), GetStringBoundingBox(STR_SUBSIDIES_SUBSIDISED_TITLE)); - resize->height = GetCharacterHeight(FS_NORMAL); + resize.height = GetCharacterHeight(FS_NORMAL); d.height *= 5; d.width += WidgetDimensions::scaled.framerect.Horizontal(); d.height += WidgetDimensions::scaled.framerect.Vertical(); - *size = maxdim(*size, d); + size = maxdim(size, d); } void DrawCargoIcon(const Rect &r, int y_offset, CargoID cid) const diff --git a/src/terraform_gui.cpp b/src/terraform_gui.cpp index 6da19b9037..417c7fa427 100644 --- a/src/terraform_gui.cpp +++ b/src/terraform_gui.cpp @@ -553,12 +553,12 @@ struct ScenarioEditorLandscapeGenerationWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget != WID_ETT_DOTS) return; - size->width = std::max(size->width, ScaleGUITrad(59)); - size->height = std::max(size->height, ScaleGUITrad(31)); + size.width = std::max(size.width, ScaleGUITrad(59)); + size.height = std::max(size.height, ScaleGUITrad(31)); } void DrawWidget(const Rect &r, WidgetID widget) const override diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 194c3c6a4c..bb6c2d876d 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -133,14 +133,14 @@ uint TextfileWindow::GetContentHeight() return this->lines.back().bottom; } -/* virtual */ void TextfileWindow::UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) +/* virtual */ void TextfileWindow::UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) { switch (widget) { case WID_TF_BACKGROUND: - resize->height = GetCharacterHeight(FS_MONO); + resize.height = GetCharacterHeight(FS_MONO); - size->height = 4 * resize->height + WidgetDimensions::scaled.frametext.Vertical(); // At least 4 lines are visible. - size->width = std::max(200u, size->width); // At least 200 pixels wide. + size.height = 4 * resize.height + WidgetDimensions::scaled.frametext.Vertical(); // At least 4 lines are visible. + size.width = std::max(200u, size.width); // At least 200 pixels wide. break; } } diff --git a/src/textfile_gui.h b/src/textfile_gui.h index 6376bd64c1..09d55a355d 100644 --- a/src/textfile_gui.h +++ b/src/textfile_gui.h @@ -23,7 +23,7 @@ struct TextfileWindow : public Window, MissingGlyphSearcher { Scrollbar *vscroll; ///< Vertical scrollbar. Scrollbar *hscroll; ///< Horizontal scrollbar. - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override; + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override; void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override; void DrawWidget(const Rect &r, WidgetID widget) const override; void OnResize() override; diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index d55b7dc711..283dbd401e 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -248,7 +248,7 @@ struct TimetableWindow : Window { return (travelling && v->lateness_counter < 0); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VT_ARRIVAL_DEPARTURE_PANEL: @@ -256,21 +256,21 @@ struct TimetableWindow : Window { if (_settings_client.gui.timetable_mode == TimetableMode::Seconds) { /* A five-digit number would fit a timetable lasting 2.7 real-world hours, which should be plenty. */ SetDParamMaxDigits(1, 4, FS_SMALL); - size->width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; + size.width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; } else { SetDParamMaxValue(1, TimerGameEconomy::DateAtStartOfYear(EconomyTime::MAX_YEAR), 0, FS_SMALL); - size->width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_DATE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_DATE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; + size.width = std::max(GetStringBoundingBox(STR_TIMETABLE_ARRIVAL_DATE).width, GetStringBoundingBox(STR_TIMETABLE_DEPARTURE_DATE).width) + WidgetDimensions::scaled.hsep_wide + padding.width; } [[fallthrough]]; case WID_VT_ARRIVAL_DEPARTURE_SELECTION: case WID_VT_TIMETABLE_PANEL: - resize->height = GetCharacterHeight(FS_NORMAL); - size->height = 8 * resize->height + padding.height; + resize.height = GetCharacterHeight(FS_NORMAL); + size.height = 8 * resize.height + padding.height; break; case WID_VT_SUMMARY_PANEL: - size->height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 2 * GetCharacterHeight(FS_NORMAL) + padding.height; break; } } diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 26fcfa798d..58589da48c 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2339,16 +2339,16 @@ struct ScenarioEditorToolbarWindow : Window { } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TE_SPACER: - size->width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + padding.width; + size.width = std::max(GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_OPENTTD).width, GetStringBoundingBox(STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR).width) + padding.width; break; case WID_TE_DATE: SetDParam(0, TimerGameCalendar::ConvertYMDToDate(CalendarTime::MAX_YEAR, 0, 1)); - *size = GetStringBoundingBox(STR_JUST_DATE_LONG); + size = GetStringBoundingBox(STR_JUST_DATE_LONG); break; } } diff --git a/src/town_gui.cpp b/src/town_gui.cpp index 14ddaa8619..29e8c5396f 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -256,34 +256,34 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TA_ACTION_INFO: { - assert(size->width > padding.width && size->height > padding.height); + assert(size.width > padding.width && size.height > padding.height); Dimension d = {0, 0}; for (int i = 0; i < TACT_COUNT; i++) { SetDParam(0, _price[PR_TOWN_ACTION] * _town_action_costs[i] >> 8); - d = maxdim(d, GetStringMultiLineBoundingBox(this->action_tooltips[i], *size)); + d = maxdim(d, GetStringMultiLineBoundingBox(this->action_tooltips[i], size)); } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TA_COMMAND_LIST: - size->height = (TACT_COUNT + 1) * GetCharacterHeight(FS_NORMAL) + padding.height; - size->width = GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTIONS_TITLE).width; + size.height = (TACT_COUNT + 1) * GetCharacterHeight(FS_NORMAL) + padding.height; + size.width = GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTIONS_TITLE).width; for (uint i = 0; i < TACT_COUNT; i++ ) { - size->width = std::max(size->width, GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i).width + padding.width); + size.width = std::max(size.width, GetStringBoundingBox(STR_LOCAL_AUTHORITY_ACTION_SMALL_ADVERTISING_CAMPAIGN + i).width + padding.width); } - size->width += padding.width; + size.width += padding.width; break; case WID_TA_RATING_INFO: - resize->height = std::max({this->icon_size.height + WidgetDimensions::scaled.vsep_normal, this->exclusive_size.height + WidgetDimensions::scaled.vsep_normal, (uint)GetCharacterHeight(FS_NORMAL)}); - size->height = 9 * resize->height + padding.height; + resize.height = std::max({this->icon_size.height + WidgetDimensions::scaled.vsep_normal, this->exclusive_size.height + WidgetDimensions::scaled.vsep_normal, (uint)GetCharacterHeight(FS_NORMAL)}); + size.height = 9 * resize.height + padding.height; break; } } @@ -524,11 +524,11 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TV_INFO: - size->height = GetDesiredInfoHeight(size->width) + padding.height; + size.height = GetDesiredInfoHeight(size.width) + padding.height; break; } } @@ -878,14 +878,14 @@ public: } } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_TD_SORT_ORDER: { Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TD_SORT_CRITERIA: { @@ -895,7 +895,7 @@ public: } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TD_LIST: { @@ -912,11 +912,11 @@ public: Dimension icon_size = GetSpriteSize(SPR_TOWN_RATING_GOOD); d.width += icon_size.width + 2; d.height = std::max(d.height, icon_size.height); - resize->height = d.height; + resize.height = d.height; d.height *= 5; d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_TD_WORLD_POPULATION: { @@ -924,7 +924,7 @@ public: Dimension d = GetStringBoundingBox(STR_TOWN_POPULATION); d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } diff --git a/src/tree_gui.cpp b/src/tree_gui.cpp index f8dd8f6bad..e751dba3f5 100644 --- a/src/tree_gui.cpp +++ b/src/tree_gui.cpp @@ -152,13 +152,13 @@ public: this->FinishInitNested(window_number); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { if (widget >= WID_BT_TYPE_BUTTON_FIRST) { /* Ensure tree type buttons are sized after the largest tree type */ Dimension d = GetMaxTreeSpriteSize(); - size->width = d.width + padding.width; - size->height = d.height + padding.height + ScaleGUITrad(BUTTON_BOTTOM_OFFSET); // we need some more space + size.width = d.width + padding.width; + size.height = d.height + padding.height + ScaleGUITrad(BUTTON_BOTTOM_OFFSET); // we need some more space } } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 94fc106bae..7f4ce36146 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -916,20 +916,20 @@ struct RefitWindow : public Window { this->DrawWidgets(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VR_MATRIX: - resize->height = GetCharacterHeight(FS_NORMAL) + padding.height; - size->height = resize->height * 8; + resize.height = GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = resize.height * 8; break; case WID_VR_VEHICLE_PANEL_DISPLAY: - size->height = ScaleGUITrad(GetVehicleHeight(Vehicle::Get(this->window_number)->type)); + size.height = ScaleGUITrad(GetVehicleHeight(Vehicle::Get(this->window_number)->type)); break; case WID_VR_INFO: - size->width = this->information_width + padding.height; + size.width = this->information_width + padding.height; break; } } @@ -1901,20 +1901,20 @@ public: *this->sorting = this->vehgroups.GetListing(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VL_LIST: - resize->height = GetVehicleListHeight(this->vli.vtype, 1); + resize.height = GetVehicleListHeight(this->vli.vtype, 1); switch (this->vli.vtype) { case VEH_TRAIN: case VEH_ROAD: - size->height = 6 * resize->height; + size.height = 6 * resize.height; break; case VEH_SHIP: case VEH_AIRCRAFT: - size->height = 4 * resize->height; + size.height = 4 * resize.height; break; default: NOT_REACHED(); } @@ -1924,31 +1924,31 @@ public: Dimension d = GetStringBoundingBox(this->GetWidget(widget)->widget_data); d.width += padding.width + Window::SortButtonWidth() * 2; // Doubled since the string is centred and it also looks better. d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } case WID_VL_GROUP_BY_PULLDOWN: - size->width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; + size.width = GetStringListWidth(this->vehicle_group_by_names) + padding.width; break; case WID_VL_SORT_BY_PULLDOWN: - size->width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); - size->width = std::max(size->width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); - size->width += padding.width; + size.width = GetStringListWidth(this->vehicle_group_none_sorter_names_calendar); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_none_sorter_names_wallclock)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_calendar)); + size.width = std::max(size.width, GetStringListWidth(this->vehicle_group_shared_orders_sorter_names_wallclock)); + size.width += padding.width; break; case WID_VL_FILTER_BY_CARGO: - size->width = std::max(size->width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); + size.width = std::max(size.width, GetDropDownListDimension(this->BuildCargoDropDownList(true)).width + padding.width); break; case WID_VL_MANAGE_VEHICLES_DROPDOWN: { Dimension d = this->GetActionDropdownSize(this->vli.type == VL_STANDARD, false, true); d.height += padding.height; d.width += padding.width; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } } @@ -2424,12 +2424,12 @@ struct VehicleDetailsWindow : Window { return desired_height; } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { switch (widget) { case WID_VD_TOP_DETAILS: { Dimension dim = { 0, 0 }; - size->height = 4 * GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = 4 * GetCharacterHeight(FS_NORMAL) + padding.height; for (uint i = 0; i < 4; i++) SetDParamMaxValue(i, INT16_MAX); static const StringID info_strings[] = { @@ -2445,7 +2445,7 @@ struct VehicleDetailsWindow : Window { } SetDParam(0, STR_VEHICLE_INFO_AGE); dim = maxdim(dim, GetStringBoundingBox(TimerGameEconomy::UsingWallclockUnits() ? STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD : STR_VEHICLE_INFO_AGE_RUNNING_COST_YR)); - size->width = dim.width + padding.width; + size.width = dim.width + padding.width; break; } @@ -2453,15 +2453,15 @@ struct VehicleDetailsWindow : Window { const Vehicle *v = Vehicle::Get(this->window_number); switch (v->type) { case VEH_ROAD: - size->height = this->GetRoadVehDetailsHeight(v) + padding.height; + size.height = this->GetRoadVehDetailsHeight(v) + padding.height; break; case VEH_SHIP: - size->height = 4 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; + size.height = 4 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; break; case VEH_AIRCRAFT: - size->height = 5 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; + size.height = 5 * GetCharacterHeight(FS_NORMAL) + WidgetDimensions::scaled.vsep_normal * 2 + padding.height; break; default: @@ -2471,8 +2471,8 @@ struct VehicleDetailsWindow : Window { } case WID_VD_MATRIX: - resize->height = std::max(ScaleGUITrad(14), GetCharacterHeight(FS_NORMAL) + padding.height); - size->height = 4 * resize->height; + resize.height = std::max(ScaleGUITrad(14), GetCharacterHeight(FS_NORMAL) + padding.height); + size.height = 4 * resize.height; break; case WID_VD_SERVICE_INTERVAL_DROPDOWN: { @@ -2484,7 +2484,7 @@ struct VehicleDetailsWindow : Window { } d.width += padding.width; d.height += padding.height; - *size = maxdim(*size, d); + size = maxdim(size, d); break; } @@ -2501,11 +2501,11 @@ struct VehicleDetailsWindow : Window { /*/ Vehicle was last serviced at year 0, and we're at max year */ SetDParamMaxValue(2, TimerGameEconomy::DateAtStartOfYear(EconomyTime::MAX_YEAR)); } - size->width = std::max( + size.width = std::max( GetStringBoundingBox(STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT).width, GetStringBoundingBox(STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS).width ) + padding.width; - size->height = GetCharacterHeight(FS_NORMAL) + padding.height; + size.height = GetCharacterHeight(FS_NORMAL) + padding.height; break; } } @@ -3037,24 +3037,24 @@ public: this->Window::Close(); } - void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override + void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override { const Vehicle *v = Vehicle::Get(this->window_number); switch (widget) { case WID_VV_START_STOP: - size->height = std::max({size->height, (uint)GetCharacterHeight(FS_NORMAL), GetScaledSpriteSize(SPR_WARNING_SIGN).height, GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED).height, GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING).height}) + padding.height; + size.height = std::max({size.height, (uint)GetCharacterHeight(FS_NORMAL), GetScaledSpriteSize(SPR_WARNING_SIGN).height, GetScaledSpriteSize(SPR_FLAG_VEH_STOPPED).height, GetScaledSpriteSize(SPR_FLAG_VEH_RUNNING).height}) + padding.height; break; case WID_VV_FORCE_PROCEED: if (v->type != VEH_TRAIN) { - size->height = 0; - size->width = 0; + size.height = 0; + size.width = 0; } break; case WID_VV_VIEWPORT: - size->width = VV_INITIAL_VIEWPORT_WIDTH; - size->height = (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT; + size.width = VV_INITIAL_VIEWPORT_WIDTH; + size.height = (v->type == VEH_TRAIN) ? VV_INITIAL_VIEWPORT_HEIGHT_TRAIN : VV_INITIAL_VIEWPORT_HEIGHT; break; } } diff --git a/src/widget.cpp b/src/widget.cpp index b9aa2c0d76..74e970eb66 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -1216,7 +1216,7 @@ void NWidgetStacked::SetupSmallestSize(Window *w) Dimension fill = {(this->shown_plane == SZSP_HORIZONTAL), (this->shown_plane == SZSP_VERTICAL)}; Dimension resize = {(this->shown_plane == SZSP_HORIZONTAL), (this->shown_plane == SZSP_VERTICAL)}; /* Here we're primarily interested in the value of resize */ - if (this->index >= 0) w->UpdateWidgetSize(this->index, &size, padding, &fill, &resize); + if (this->index >= 0) w->UpdateWidgetSize(this->index, size, padding, fill, resize); this->smallest_x = size.width; this->smallest_y = size.height; @@ -1833,7 +1833,7 @@ void NWidgetMatrix::SetupSmallestSize(Window *w) Dimension fill = {0, 0}; Dimension resize = {this->pip_inter + this->children.front()->smallest_x, this->pip_inter + this->children.front()->smallest_y}; - if (this->index >= 0) w->UpdateWidgetSize(this->index, &size, padding, &fill, &resize); + if (this->index >= 0) w->UpdateWidgetSize(this->index, size, padding, fill, resize); this->smallest_x = size.width; this->smallest_y = size.height; @@ -2108,7 +2108,7 @@ void NWidgetBackground::SetupSmallestSize(Window *w) case WWT_FRAME: padding = {WidgetDimensions::scaled.frametext.Horizontal(), WidgetDimensions::scaled.frametext.Vertical()}; break; case WWT_INSET: padding = {WidgetDimensions::scaled.inset.Horizontal(), WidgetDimensions::scaled.inset.Vertical()}; break; } - w->UpdateWidgetSize(this->index, &d, padding, &fill, &resize); + w->UpdateWidgetSize(this->index, d, padding, fill, resize); } } this->smallest_x = d.width; @@ -2730,7 +2730,7 @@ void NWidgetLeaf::SetupSmallestSize(Window *w) NOT_REACHED(); } - if (this->index >= 0) w->UpdateWidgetSize(this->index, &size, padding, &fill, &resize); + if (this->index >= 0) w->UpdateWidgetSize(this->index, size, padding, fill, resize); this->smallest_x = size.width; this->smallest_y = size.height; diff --git a/src/window_gui.h b/src/window_gui.h index 0993b4c95f..5a67fd9b2c 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -611,12 +611,12 @@ public: * and \a resize is taken to contain the resize steps. For the convenience of the callee, \a padding contains the amount of * padding between the content and the edge of the widget. This should be added to the returned size. * @param widget Widget number. - * @param size Size of the widget. + * @param[in,out] size Size of the widget. * @param padding Recommended amount of space between the widget content and the widget edge. - * @param fill Fill step of the widget. - * @param resize Resize step of the widget. + * @param[in,out] fill Fill step of the widget. + * @param[in,out] resize Resize step of the widget. */ - virtual void UpdateWidgetSize([[maybe_unused]] WidgetID widget, [[maybe_unused]] Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) {} + virtual void UpdateWidgetSize([[maybe_unused]] WidgetID widget, [[maybe_unused]] Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) {} /** * Initialize string parameters for a widget. From dc7c2bb30de3b72f864301fe7b8ddf7a934f00fb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 08:35:12 +0100 Subject: [PATCH 22/26] Fix: Draw continuation lines for engine variant hierarchy tree. (#12434) --- src/autoreplace_gui.cpp | 25 +---------- src/build_vehicle_gui.cpp | 89 +++++++++++++++++++++++++-------------- src/engine_gui.h | 9 +++- 3 files changed, 66 insertions(+), 57 deletions(-) diff --git a/src/autoreplace_gui.cpp b/src/autoreplace_gui.cpp index 62e8b1e85e..b145e34696 100644 --- a/src/autoreplace_gui.cpp +++ b/src/autoreplace_gui.cpp @@ -34,8 +34,6 @@ #include "safeguards.h" -void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group); - static bool EngineNumberSorter(const GUIEngineListItem &a, const GUIEngineListItem &b) { return Engine::Get(a.engine_id)->list_position < Engine::Get(b.engine_id)->list_position; @@ -114,27 +112,6 @@ class ReplaceVehicleWindow : public Window { return true; } - void AddChildren(const GUIEngineList &source, GUIEngineList &target, EngineID parent, int indent, int side) - { - for (const auto &item : source) { - if (item.variant_id != parent || item.engine_id == parent) continue; - - const Engine *e = Engine::Get(item.engine_id); - EngineDisplayFlags flags = item.flags; - if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded; - target.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent); - - /* Add variants if not folded */ - if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) { - /* Add this engine again as a child */ - if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) { - target.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1); - } - AddChildren(source, target, item.engine_id, indent + 1, side); - } - } - } - /** * Generate an engines list * @param draw_left true if generating the left list, otherwise false @@ -208,7 +185,7 @@ class ReplaceVehicleWindow : public Window { this->engines[side].clear(); if (side == 1) { - AddChildren(list, this->engines[side], INVALID_ENGINE, 0, side); + GUIEngineListAddChildren(this->engines[side], list); } else { this->engines[side].swap(list); } diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index db21d23c84..9d97603b3c 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -1045,6 +1045,9 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li int small_text_y_offset = ir.Height() - GetCharacterHeight(FS_SMALL); int replace_icon_y_offset = (ir.Height() - replace_icon.height) / 2; + const int offset = (rtl ? -circle_width : circle_width) / 2; + const int level_width = rtl ? -WidgetDimensions::scaled.hsep_indent : WidgetDimensions::scaled.hsep_indent; + int y = ir.top; for (auto it = first; it != last; ++it) { const auto &item = *it; @@ -1052,6 +1055,21 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li bool has_variants = (item.flags & EngineDisplayFlags::HasVariants) != EngineDisplayFlags::None; bool is_folded = (item.flags & EngineDisplayFlags::IsFolded) != EngineDisplayFlags::None; bool shaded = (item.flags & EngineDisplayFlags::Shaded) != EngineDisplayFlags::None; + + if (item.indent > 0) { + /* Draw tree continuation lines. */ + int tx = (rtl ? ir.right : ir.left) + offset; + int ty = y - WidgetDimensions::scaled.matrix.top; + for (uint lvl = 1; lvl <= item.indent; ++lvl) { + if (HasBit(item.level_mask, lvl)) GfxDrawLine(tx, ty, tx, ty + step_size - 1, linecolour, WidgetDimensions::scaled.fullbevel.top); + if (lvl < item.indent) tx += level_width; + } + /* Draw our node in the tree. */ + int ycentre = y + normal_text_y_offset + GetCharacterHeight(FS_NORMAL) / 2 - 1; + if (!HasBit(item.level_mask, item.indent)) GfxDrawLine(tx, ty, tx, ycentre, linecolour, WidgetDimensions::scaled.fullbevel.top); + GfxDrawLine(tx, ycentre, tx + offset - (rtl ? -1 : 1), ycentre, linecolour, WidgetDimensions::scaled.fullbevel.top); + } + /* Note: num_engines is only used in the autoreplace GUI, so it is correct to use _local_company here. */ const uint num_engines = GetGroupNumEngines(_local_company, selected_group, item.engine_id); @@ -1079,14 +1097,6 @@ void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_li Rect fr = ir.Indent(indent, rtl).WithWidth(circle_width, rtl); DrawSpriteIgnorePadding(is_folded ? SPR_CIRCLE_FOLDED : SPR_CIRCLE_UNFOLDED, PAL_NONE, {fr.left, y, fr.right, y + ir.Height() - 1}, SA_CENTER); } - if (indent > 0) { - /* Draw tree lines */ - Rect fr = ir.Indent(indent - WidgetDimensions::scaled.hsep_indent, rtl).WithWidth(circle_width, rtl); - int ycenter = y + normal_text_y_offset + GetCharacterHeight(FS_NORMAL) / 2; - bool continues = std::next(it) != std::end(eng_list) && std::next(it)->indent == item.indent; - GfxDrawLine(fr.left + circle_width / 2, y - WidgetDimensions::scaled.matrix.top, fr.left + circle_width / 2, continues ? y - WidgetDimensions::scaled.matrix.top + step_size - 1 : ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top); - GfxDrawLine(fr.left + circle_width / 2, ycenter, fr.right, ycenter, linecolour, WidgetDimensions::scaled.fullbevel.top); - } y += step_size; } } @@ -1114,6 +1124,44 @@ void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selecte ShowDropDownMenu(w, _engine_sort_listing[vehicle_type], selected, button, 0, hidden_mask); } +/** + * Add children to GUI engine list to build a hierarchical tree. + * @param dst Destination list. + * @param src Source list. + * @param parent Current tree parent (set by self with recursion). + * @param indent Current tree indentation level (set by self with recursion). + */ +void GUIEngineListAddChildren(GUIEngineList &dst, const GUIEngineList &src, EngineID parent, uint8_t indent) +{ + for (const auto &item : src) { + if (item.variant_id != parent || item.engine_id == parent) continue; + + const Engine *e = Engine::Get(item.engine_id); + EngineDisplayFlags flags = item.flags; + if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded; + dst.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent); + + /* Add variants if not folded */ + if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) { + /* Add this engine again as a child */ + if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) { + dst.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1); + } + GUIEngineListAddChildren(dst, src, item.engine_id, indent + 1); + } + } + + if (indent > 0 || dst.empty()) return; + + /* Hierarchy is complete, traverse in reverse to find where indentation levels continue. */ + uint16_t level_mask = 0; + for (auto it = std::rbegin(dst); std::next(it) != std::rend(dst); ++it) { + auto next_it = std::next(it); + SB(level_mask, it->indent, 1, it->indent <= next_it->indent); + next_it->level_mask = level_mask; + } +} + /** Enum referring to the Hotkeys in the build vehicle window */ enum BuildVehicleHotkeys { BVHK_FOCUS_FILTER_BOX, ///< Focus the edit box for editing the filter string @@ -1157,27 +1205,6 @@ struct BuildVehicleWindow : Window { } } - void AddChildren(const GUIEngineList &source, EngineID parent, int indent) - { - for (const auto &item : source) { - if (item.variant_id != parent || item.engine_id == parent) continue; - - const Engine *e = Engine::Get(item.engine_id); - EngineDisplayFlags flags = item.flags; - if (e->display_last_variant != INVALID_ENGINE) flags &= ~EngineDisplayFlags::Shaded; - this->eng_list.emplace_back(e->display_last_variant == INVALID_ENGINE ? item.engine_id : e->display_last_variant, item.engine_id, flags, indent); - - /* Add variants if not folded */ - if ((item.flags & (EngineDisplayFlags::HasVariants | EngineDisplayFlags::IsFolded)) == EngineDisplayFlags::HasVariants) { - /* Add this engine again as a child */ - if ((item.flags & EngineDisplayFlags::Shaded) == EngineDisplayFlags::None) { - this->eng_list.emplace_back(item.engine_id, item.engine_id, EngineDisplayFlags::None, indent + 1); - } - AddChildren(source, item.engine_id, indent + 1); - } - } - } - BuildVehicleWindow(WindowDesc *desc, TileIndex tile, VehicleType type) : Window(desc), vehicle_editbox(MAX_LENGTH_VEHICLE_NAME_CHARS * MAX_CHAR_LENGTH, MAX_LENGTH_VEHICLE_NAME_CHARS) { this->vehicle_type = type; @@ -1518,7 +1545,7 @@ struct BuildVehicleWindow : Window { default: NOT_REACHED(); case VEH_TRAIN: this->GenerateBuildTrainList(list); - AddChildren(list, INVALID_ENGINE, 0); + GUIEngineListAddChildren(this->eng_list, list); this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); return; @@ -1556,7 +1583,7 @@ struct BuildVehicleWindow : Window { EngList_Sort(this->eng_list, _engine_sort_functions[this->vehicle_type][this->sort_criteria]); this->eng_list.swap(list); - AddChildren(list, INVALID_ENGINE, 0); + GUIEngineListAddChildren(this->eng_list, list, INVALID_ENGINE, 0); this->eng_list.shrink_to_fit(); this->eng_list.RebuildDone(); } diff --git a/src/engine_gui.h b/src/engine_gui.h index 5a43f1f610..ba7e41715f 100644 --- a/src/engine_gui.h +++ b/src/engine_gui.h @@ -11,6 +11,7 @@ #define ENGINE_GUI_H #include "engine_type.h" +#include "group_type.h" #include "sortlist_type.h" #include "gfx_type.h" #include "vehicle_type.h" @@ -20,9 +21,10 @@ struct GUIEngineListItem { EngineID engine_id; ///< Engine to display in build purchase list EngineID variant_id; ///< Variant group of the engine. EngineDisplayFlags flags; ///< Flags for toggling/drawing (un)folded status and controlling indentation. - int8_t indent; ///< Display indentation level. + uint8_t indent; ///< Display indentation level. + uint16_t level_mask; ///< Mask of level continuations. - GUIEngineListItem(EngineID engine_id, EngineID variant_id, EngineDisplayFlags flags, int indent) : engine_id(engine_id), variant_id(variant_id), flags(flags), indent(indent) {} + GUIEngineListItem(EngineID engine_id, EngineID variant_id, EngineDisplayFlags flags, uint8_t indent) : engine_id(engine_id), variant_id(variant_id), flags(flags), indent(indent), level_mask(0) {} /* Used when searching list only by engine_id. */ bool operator == (const EngineID &other) const { return this->engine_id == other; } @@ -50,7 +52,10 @@ extern bool _engine_sort_show_hidden_engines[]; extern const StringID _engine_sort_listing[][12]; extern EngList_SortTypeFunction * const _engine_sort_functions[][11]; +/* Functions in build_vehicle_gui.cpp */ uint GetEngineListHeight(VehicleType type); void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selected, WidgetID button); +void DrawEngineList(VehicleType type, const Rect &r, const GUIEngineList &eng_list, const Scrollbar &sb, EngineID selected_id, bool show_count, GroupID selected_group); +void GUIEngineListAddChildren(GUIEngineList &dst, const GUIEngineList &src, EngineID parent = INVALID_ENGINE, uint8_t indent = 0); #endif /* ENGINE_GUI_H */ From 54be756aae27fd29f52452cc53b8ca232e45317c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 08:40:27 +0100 Subject: [PATCH 23/26] Codechange: Pass NewGRF strings as std::string_view instead of char *. (#12461) --- src/network/core/network_game_info.cpp | 2 +- src/newgrf.cpp | 58 +++++++++++--------------- src/newgrf_text.cpp | 18 ++++---- src/newgrf_text.h | 10 ++--- 4 files changed, 40 insertions(+), 48 deletions(-) diff --git a/src/network/core/network_game_info.cpp b/src/network/core/network_game_info.cpp index 004cac1b6c..623be7fa84 100644 --- a/src/network/core/network_game_info.cpp +++ b/src/network/core/network_game_info.cpp @@ -163,7 +163,7 @@ const NetworkServerGameInfo &GetCurrentNetworkServerGameInfo() * @param config The GRF to handle. * @param name The name of the NewGRF, empty when unknown. */ -static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string name) +static void HandleIncomingNetworkGameInfoGRFConfig(GRFConfig *config, std::string_view name) { /* Find the matching GRF file */ const GRFConfig *f = FindGRFConfig(config->ident.grfid, FGCM_EXACT, &config->ident.md5sum); diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 1203a19ef9..cbd44526b9 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -269,22 +269,14 @@ public: } } - const char *ReadString() + std::string_view ReadString() { char *string = reinterpret_cast(data); size_t string_length = ttd_strnlen(string, Remaining()); - if (string_length == Remaining()) { - /* String was not NUL terminated, so make sure it is now. */ - string[string_length - 1] = '\0'; - GrfMsg(7, "String was not terminated with a zero byte."); - } else { - /* Increase the string length to include the NUL byte. */ - string_length++; - } Skip(string_length); - return string; + return std::string_view(string, string_length); } inline size_t Remaining() const @@ -2859,27 +2851,27 @@ static ChangeInfoResult GlobalVarChangeInfo(uint gvid, int numinfo, int prop, By uint8_t newgrf_id = buf->ReadByte(); // The NewGRF (custom) identifier. while (newgrf_id != 0) { - const char *name = buf->ReadString(); // The name for the OpenTTD identifier. + std::string_view name = buf->ReadString(); // The name for the OpenTTD identifier. /* We'll just ignore the UTF8 identifier character. This is (fairly) * safe as OpenTTD's strings gender/cases are usually in ASCII which * is just a subset of UTF8, or they need the bigger UTF8 characters * such as Cyrillic. Thus we will simply assume they're all UTF8. */ char32_t c; - size_t len = Utf8Decode(&c, name); - if (c == NFO_UTF8_IDENTIFIER) name += len; + size_t len = Utf8Decode(&c, name.data()); + if (c == NFO_UTF8_IDENTIFIER) name = name.substr(len); LanguageMap::Mapping map; map.newgrf_id = newgrf_id; if (prop == 0x13) { - map.openttd_id = lang->GetGenderIndex(name); + map.openttd_id = lang->GetGenderIndex(name.data()); if (map.openttd_id >= MAX_NUM_GENDERS) { GrfMsg(1, "GlobalVarChangeInfo: Gender name {} is not known, ignoring", name); } else { _cur.grffile->language_map[curidx].gender_map.push_back(map); } } else { - map.openttd_id = lang->GetCaseIndex(name); + map.openttd_id = lang->GetCaseIndex(name.data()); if (map.openttd_id >= MAX_NUM_CASES) { GrfMsg(1, "GlobalVarChangeInfo: Case name {} is not known, ignoring", name); } else { @@ -6295,7 +6287,7 @@ static void FeatureNewName(ByteReader *buf) id, endid, feature, lang); for (; id < endid && buf->HasData(); id++) { - const char *name = buf->ReadString(); + const std::string_view name = buf->ReadString(); GrfMsg(8, "FeatureNewName: 0x{:04X} <- {}", id, name); switch (feature) { @@ -7013,7 +7005,7 @@ static void ScanInfo(ByteReader *buf) { uint8_t grf_version = buf->ReadByte(); uint32_t grfid = buf->ReadDWord(); - const char *name = buf->ReadString(); + std::string_view name = buf->ReadString(); _cur.grfconfig->ident.grfid = grfid; @@ -7028,7 +7020,7 @@ static void ScanInfo(ByteReader *buf) AddGRFTextToList(_cur.grfconfig->name, 0x7F, grfid, false, name); if (buf->HasData()) { - const char *info = buf->ReadString(); + std::string_view info = buf->ReadString(); AddGRFTextToList(_cur.grfconfig->info, 0x7F, grfid, true, info); } @@ -7048,7 +7040,7 @@ static void GRFInfo(ByteReader *buf) uint8_t version = buf->ReadByte(); uint32_t grfid = buf->ReadDWord(); - const char *name = buf->ReadString(); + std::string_view name = buf->ReadString(); if (_cur.stage < GLS_RESERVE && _cur.grfconfig->status != GCS_UNKNOWN) { DisableGrf(STR_NEWGRF_ERROR_MULTIPLE_ACTION_8); @@ -7198,7 +7190,7 @@ static void GRFLoadError(ByteReader *buf) if (message_id == 0xFF) { /* This is a custom error message. */ if (buf->HasData()) { - const char *message = buf->ReadString(); + std::string_view message = buf->ReadString(); error->custom_message = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, message, SCC_RAW_STRING_POINTER); } else { @@ -7210,7 +7202,7 @@ static void GRFLoadError(ByteReader *buf) } if (buf->HasData()) { - const char *data = buf->ReadString(); + std::string_view data = buf->ReadString(); error->data = TranslateTTDPatchCodes(_cur.grffile->grfid, lang, true, data); } else { @@ -7234,7 +7226,7 @@ static void GRFComment(ByteReader *buf) if (!buf->HasData()) return; - const char *text = buf->ReadString(); + std::string_view text = buf->ReadString(); GrfMsg(2, "GRFComment: {}", text); } @@ -7761,7 +7753,7 @@ static void FeatureTownName(ByteReader *buf) do { ClrBit(lang, 7); - const char *name = buf->ReadString(); + std::string_view name = buf->ReadString(); std::string lang_name = TranslateTTDPatchCodes(grfid, lang, false, name); GrfMsg(6, "FeatureTownName: lang 0x{:X} -> '{}'", lang, lang_name); @@ -7801,7 +7793,7 @@ static void FeatureTownName(ByteReader *buf) part.id = ref_id; GrfMsg(6, "FeatureTownName: part {}, text {}, uses intermediate definition 0x{:02X} (with probability {})", partnum, textnum, ref_id, part.prob & 0x7F); } else { - const char *text = buf->ReadString(); + std::string_view text = buf->ReadString(); part.text = TranslateTTDPatchCodes(grfid, 0, false, text); GrfMsg(6, "FeatureTownName: part {}, text {}, '{}' (with probability {})", partnum, textnum, part.text, part.prob); } @@ -8079,9 +8071,9 @@ static void TranslateGRFStrings(ByteReader *buf) } for (uint i = 0; i < num_strings && buf->HasData(); i++) { - const char *string = buf->ReadString(); + std::string_view string = buf->ReadString(); - if (StrEmpty(string)) { + if (string.empty()) { GrfMsg(7, "TranslateGRFString: Ignoring empty string."); continue; } @@ -8091,21 +8083,21 @@ static void TranslateGRFStrings(ByteReader *buf) } /** Callback function for 'INFO'->'NAME' to add a translation to the newgrf name. */ -static bool ChangeGRFName(uint8_t langid, const char *str) +static bool ChangeGRFName(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur.grfconfig->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'DESC' to add a translation to the newgrf description. */ -static bool ChangeGRFDescription(uint8_t langid, const char *str) +static bool ChangeGRFDescription(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur.grfconfig->info, langid, _cur.grfconfig->ident.grfid, true, str); return true; } /** Callback function for 'INFO'->'URL_' to set the newgrf url. */ -static bool ChangeGRFURL(uint8_t langid, const char *str) +static bool ChangeGRFURL(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur.grfconfig->url, langid, _cur.grfconfig->ident.grfid, false, str); return true; @@ -8207,14 +8199,14 @@ static bool ChangeGRFMinVersion(size_t len, ByteReader *buf) static GRFParameterInfo *_cur_parameter; ///< The parameter which info is currently changed by the newgrf. /** Callback function for 'INFO'->'PARAM'->param_num->'NAME' to set the name of a parameter. */ -static bool ChangeGRFParamName(uint8_t langid, const char *str) +static bool ChangeGRFParamName(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur_parameter->name, langid, _cur.grfconfig->ident.grfid, false, str); return true; } /** Callback function for 'INFO'->'PARAM'->param_num->'DESC' to set the description of a parameter. */ -static bool ChangeGRFParamDescription(uint8_t langid, const char *str) +static bool ChangeGRFParamDescription(uint8_t langid, std::string_view str) { AddGRFTextToList(_cur_parameter->desc, langid, _cur.grfconfig->ident.grfid, true, str); return true; @@ -8294,7 +8286,7 @@ static bool ChangeGRFParamDefault(size_t len, ByteReader *buf) } typedef bool (*DataHandler)(size_t, ByteReader *); ///< Type of callback function for binary nodes -typedef bool (*TextHandler)(uint8_t, const char *str); ///< Type of callback function for text nodes +typedef bool (*TextHandler)(uint8_t, std::string_view str); ///< Type of callback function for text nodes typedef bool (*BranchHandler)(ByteReader *); ///< Type of callback function for branch nodes /** @@ -8398,7 +8390,7 @@ static bool ChangeGRFParamValueNames(ByteReader *buf) } uint8_t langid = buf->ReadByte(); - const char *name_string = buf->ReadString(); + std::string_view name_string = buf->ReadString(); auto val_name = _cur_parameter->value_names.find(id); if (val_name != _cur_parameter->value_names.end()) { diff --git a/src/newgrf_text.cpp b/src/newgrf_text.cpp index 967af68196..97eb460795 100644 --- a/src/newgrf_text.cpp +++ b/src/newgrf_text.cpp @@ -233,12 +233,12 @@ struct UnmappedChoiceList { * @param byte80 The control code to use as replacement for the 0x80-value. * @return The translated string. */ -std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, const std::string &str, StringControlCode byte80) +std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, std::string_view str, StringControlCode byte80) { /* Empty input string? Nothing to do here. */ - if (str.empty()) return str; + if (str.empty()) return {}; - std::string::const_iterator src = str.cbegin(); + std::string_view::const_iterator src = str.cbegin(); /* Is this an unicode string? */ bool unicode = false; @@ -482,7 +482,7 @@ string_end: * @param langid The The language of the new text. * @param text_to_add The text to add to the list. */ -static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::string &text_to_add) +static void AddGRFTextToList(GRFTextList &list, uint8_t langid, std::string_view text_to_add) { /* Loop through all languages and see if we can replace a string */ for (auto &text : list) { @@ -493,7 +493,7 @@ static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::strin } /* If a string wasn't replaced, then we must append the new string */ - list.push_back(GRFText{ langid, text_to_add }); + list.push_back(GRFText{ langid, std::string(text_to_add) }); } /** @@ -505,7 +505,7 @@ static void AddGRFTextToList(GRFTextList &list, uint8_t langid, const std::strin * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add) { AddGRFTextToList(list, langid, TranslateTTDPatchCodes(grfid, langid, allow_newlines, text_to_add)); } @@ -519,7 +519,7 @@ void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool al * @param text_to_add The text to add to the list. * @note All text-codes will be translated. */ -void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add) +void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add) { if (!list) list.reset(new GRFTextList()); AddGRFTextToList(*list, langid, grfid, allow_newlines, text_to_add); @@ -531,7 +531,7 @@ void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool * @param list The list where the text should be added to. * @param text_to_add The text to add to the list. */ -void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add) +void AddGRFTextToList(GRFTextWrapper &list, std::string_view text_to_add) { if (!list) list.reset(new GRFTextList()); AddGRFTextToList(*list, GRFLX_UNSPECIFIED, text_to_add); @@ -540,7 +540,7 @@ void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add) /** * Add the new read string into our structure. */ -StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid_to_add, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string) +StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid_to_add, bool new_scheme, bool allow_newlines, std::string_view text_to_add, StringID def_string) { /* When working with the old language scheme (grf_version is less than 7) and * English or American is among the set bits, simply add it as English in diff --git a/src/newgrf_text.h b/src/newgrf_text.h index aad9e92cce..dfefac89ed 100644 --- a/src/newgrf_text.h +++ b/src/newgrf_text.h @@ -29,17 +29,17 @@ typedef std::vector GRFTextList; /** Reference counted wrapper around a GRFText pointer. */ typedef std::shared_ptr GRFTextWrapper; -StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, const char *text_to_add, StringID def_string); +StringID AddGRFString(uint32_t grfid, uint16_t stringid, uint8_t langid, bool new_scheme, bool allow_newlines, std::string_view text_to_add, StringID def_string); StringID GetGRFStringID(uint32_t grfid, StringID stringid); const char *GetGRFStringFromGRFText(const GRFTextList &text_list); const char *GetGRFStringFromGRFText(const GRFTextWrapper &text); const char *GetGRFStringPtr(uint32_t stringid); void CleanUpStrings(); void SetCurrentGrfLangID(uint8_t language_id); -std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, const std::string &str, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); -void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); -void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, const char *text_to_add); -void AddGRFTextToList(GRFTextWrapper &list, const std::string &text_to_add); +std::string TranslateTTDPatchCodes(uint32_t grfid, uint8_t language_id, bool allow_newlines, std::string_view str, StringControlCode byte80 = SCC_NEWGRF_PRINT_WORD_STRING_ID); +void AddGRFTextToList(GRFTextList &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, uint8_t langid, uint32_t grfid, bool allow_newlines, std::string_view text_to_add); +void AddGRFTextToList(GRFTextWrapper &list, std::string_view text_to_add); bool CheckGrfLangID(uint8_t lang_id, uint8_t grf_version); From 883d3e7a9f9f0ac8e5bed71bd0766c4b02dbdb35 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 8 Apr 2024 20:14:25 +0200 Subject: [PATCH 24/26] Codechange: use std::span instead of pointer + length --- src/industry_gui.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index 96d82325dc..f682f0cc13 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -367,16 +367,18 @@ class BuildIndustryWindow : public Window { * @param prefixstr String to use for the first item * @return A formatted raw string */ - std::string MakeCargoListString(const CargoID *cargolist, const CargoSuffix *cargo_suffix, int cargolistlen, StringID prefixstr) const + std::string MakeCargoListString(const std::span cargolist, const std::span cargo_suffix, StringID prefixstr) const { - std::string cargostring; - int numcargo = 0; - int firstcargo = -1; + assert(cargolist.size() == cargo_suffix.size()); - for (int j = 0; j < cargolistlen; j++) { + std::string cargostring; + size_t numcargo = 0; + size_t firstcargo; + + for (size_t j = 0; j < cargolist.size(); j++) { if (!IsValidCargoID(cargolist[j])) continue; numcargo++; - if (firstcargo < 0) { + if (numcargo == 1) { firstcargo = j; continue; } @@ -452,7 +454,7 @@ public: /* Measure the accepted cargoes, if any. */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, indtype, indsp, indsp->accepts_cargo, cargo_suffix); - std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); + std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); Dimension strdim = GetStringBoundingBox(cargostring); if (strdim.width > max_minwidth) { extra_lines_req = std::max(extra_lines_req, strdim.width / max_minwidth + 1); @@ -462,7 +464,7 @@ public: /* Measure the produced cargoes, if any. */ GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, nullptr, indtype, indsp, indsp->produced_cargo, cargo_suffix); - cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); + cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); strdim = GetStringBoundingBox(cargostring); if (strdim.width > max_minwidth) { extra_lines_prd = std::max(extra_lines_prd, strdim.width / max_minwidth + 1); @@ -568,12 +570,12 @@ public: /* Draw the accepted cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_IN, CST_FUND, nullptr, this->selected_type, indsp, indsp->accepts_cargo, cargo_suffix); - std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, lengthof(indsp->accepts_cargo), STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); + std::string cargostring = this->MakeCargoListString(indsp->accepts_cargo, cargo_suffix, STR_INDUSTRY_VIEW_REQUIRES_N_CARGO); ir.top = DrawStringMultiLine(ir, cargostring); /* Draw the produced cargoes, if any. Otherwise, will print "Nothing". */ GetAllCargoSuffixes(CARGOSUFFIX_OUT, CST_FUND, nullptr, this->selected_type, indsp, indsp->produced_cargo, cargo_suffix); - cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, lengthof(indsp->produced_cargo), STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); + cargostring = this->MakeCargoListString(indsp->produced_cargo, cargo_suffix, STR_INDUSTRY_VIEW_PRODUCES_N_CARGO); ir.top = DrawStringMultiLine(ir, cargostring); /* Get the additional purchase info text, if it has not already been queried. */ From 2976a46d069871eb34e0b894acf2f289f72fbf99 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 15:15:09 +0100 Subject: [PATCH 25/26] Fix 54be756: Terminating NUL byte was not skipped in ReadString(). (#12462) --- src/newgrf.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index cbd44526b9..0446fbd736 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -274,7 +274,8 @@ public: char *string = reinterpret_cast(data); size_t string_length = ttd_strnlen(string, Remaining()); - Skip(string_length); + /* Skip past the terminating NUL byte if it is present, but not more than remaining. */ + Skip(std::min(string_length + 1, Remaining())); return std::string_view(string, string_length); } From 90ca3515da31c44813b340c865058fd000a8b471 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 9 Apr 2024 21:46:29 +0100 Subject: [PATCH 26/26] Fix #12459, f6a88e4: Crashes when deleting news messages. (#12460) The updated logic in f6a88e4 for deleting news messages did things in the wrong order. --- src/news_gui.cpp | 42 +++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 8e8d98f261..24827d0f19 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -685,13 +685,14 @@ static bool ReadyForNextNewsItem() /** Move to the next ticker item */ static void MoveToNextTickerItem() { - assert(!std::empty(_news)); - /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ if (FindWindowById(WC_STATUS_BAR, 0) == nullptr) return; + /* No news to move to. */ + if (std::empty(_news)) return; + /* if we're not at the latest item, then move on */ while (_statusbar_news != std::begin(_news)) { --_statusbar_news; @@ -719,8 +720,6 @@ static void MoveToNextTickerItem() /** Move to the next news item */ static void MoveToNextNewsItem() { - assert(!std::empty(_news)); - /* There is no status bar, so no reason to show news; * especially important with the end game screen when * there is no status bar but possible news. */ @@ -729,6 +728,9 @@ static void MoveToNextNewsItem() CloseWindowById(WC_NEWS_WINDOW, 0); // close the newspapers window if shown _forced_news = std::end(_news); + /* No news to move to. */ + if (std::empty(_news)) return; + /* if we're not at the latest item, then move on */ while (_current_news != std::begin(_news)) { --_current_news; @@ -755,28 +757,38 @@ static void MoveToNextNewsItem() /** Delete a news item from the queue */ static std::list::iterator DeleteNewsItem(std::list::iterator ni) { - if (_forced_news == ni || _current_news == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - if (_current_news == ni) _current_news = (_current_news == std::begin(_news)) ? std::end(_news) : std::prev(_current_news); + bool updateCurrentNews = (_forced_news == ni || _current_news == ni); + bool updateStatusbarNews = (_statusbar_news == ni); + if (updateCurrentNews) { + /* When we're the current news, go to the next older item first; + * we just possibly made that the last news item. */ + if (_current_news == ni) ++_current_news; + if (_forced_news == ni) _forced_news = std::end(_news); + } + + if (updateStatusbarNews) { + /* When we're the current news, go to the next older item first; + * we just possibly made that the last news item. */ + ++_statusbar_news; + } + + /* Delete the news from the news queue. */ + ni = _news.erase(ni); + + if (updateCurrentNews) { /* About to remove the currently forced item (shown as newspapers) || * about to remove the currently displayed item (newspapers) */ MoveToNextNewsItem(); } - if (_statusbar_news == ni) { - /* When we're the current news, go to the previous item first; - * we just possibly made that the last news item. */ - if (_statusbar_news == ni) _statusbar_news = (_statusbar_news == std::begin(_news)) ? std::end(_news) : std::prev(_statusbar_news); - + if (updateStatusbarNews) { /* About to remove the currently displayed item (ticker, or just a reminder) */ InvalidateWindowData(WC_STATUS_BAR, 0, SBI_NEWS_DELETED); // invalidate the statusbar MoveToNextTickerItem(); } - /* Delete the news from the news queue. */ - return _news.erase(ni); + return ni; } /**