1
0
Fork 0

Codechange: Turn ZoomLevel into enum class.

pull/14203/head
frosch 2025-05-03 20:21:05 +02:00 committed by frosch
parent c0d4ab69d0
commit 8571af9833
39 changed files with 176 additions and 177 deletions

View File

@ -308,12 +308,12 @@ Sprite *Blitter_32bppOptimized::EncodeInternal(SpriteType sprite_type, const Spr
ZoomLevel zoom_max; ZoomLevel zoom_max;
if (sprite_type == SpriteType::Font) { if (sprite_type == SpriteType::Font) {
zoom_min = ZOOM_LVL_MIN; zoom_min = ZoomLevel::Min;
zoom_max = ZOOM_LVL_MIN; zoom_max = ZoomLevel::Min;
} else { } else {
zoom_min = _settings_client.gui.zoom_min; zoom_min = _settings_client.gui.zoom_min;
zoom_max = _settings_client.gui.zoom_max; zoom_max = _settings_client.gui.zoom_max;
if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_MAX; if (zoom_max == zoom_min) zoom_max = ZoomLevel::Max;
} }
for (ZoomLevel z = zoom_min; z <= zoom_max; z++) { for (ZoomLevel z = zoom_min; z <= zoom_max; z++) {

View File

@ -26,12 +26,12 @@ Sprite *Blitter_32bppSSE_Base::Encode(SpriteType sprite_type, const SpriteLoader
* Second uint32_t of a line = the number of transparent pixels from the right. * Second uint32_t of a line = the number of transparent pixels from the right.
* Then all RGBA then all MV. * Then all RGBA then all MV.
*/ */
ZoomLevel zoom_min = ZOOM_LVL_MIN; ZoomLevel zoom_min = ZoomLevel::Min;
ZoomLevel zoom_max = ZOOM_LVL_MIN; ZoomLevel zoom_max = ZoomLevel::Min;
if (sprite_type != SpriteType::Font) { if (sprite_type != SpriteType::Font) {
zoom_min = _settings_client.gui.zoom_min; zoom_min = _settings_client.gui.zoom_min;
zoom_max = _settings_client.gui.zoom_max; zoom_max = _settings_client.gui.zoom_max;
if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_MAX; if (zoom_max == zoom_min) zoom_max = ZoomLevel::Max;
} }
/* Calculate sizes and allocate. */ /* Calculate sizes and allocate. */

View File

@ -28,7 +28,7 @@
#endif #endif
#define META_LENGTH 2 ///< Number of uint32_t inserted before each line of pixels in a sprite. #define META_LENGTH 2 ///< Number of uint32_t inserted before each line of pixels in a sprite.
#define MARGIN_NORMAL_THRESHOLD (zoom == ZOOM_LVL_OUT_8X ? 8 : 4) ///< Minimum width to use margins with BlitterMode::Normal. #define MARGIN_NORMAL_THRESHOLD (zoom == ZoomLevel::Out8x ? 8 : 4) ///< Minimum width to use margins with BlitterMode::Normal.
#define MARGIN_REMAP_THRESHOLD 4 ///< Minimum width to use margins with BlitterMode::ColourRemap. #define MARGIN_REMAP_THRESHOLD 4 ///< Minimum width to use margins with BlitterMode::ColourRemap.
typedef union alignas(16) um128i { typedef union alignas(16) um128i {

View File

@ -129,12 +129,12 @@ Sprite *Blitter_8bppOptimized::Encode(SpriteType sprite_type, const SpriteLoader
ZoomLevel zoom_max; ZoomLevel zoom_max;
if (sprite_type == SpriteType::Font) { if (sprite_type == SpriteType::Font) {
zoom_min = ZOOM_LVL_MIN; zoom_min = ZoomLevel::Min;
zoom_max = ZOOM_LVL_MIN; zoom_max = ZoomLevel::Min;
} else { } else {
zoom_min = _settings_client.gui.zoom_min; zoom_min = _settings_client.gui.zoom_min;
zoom_max = _settings_client.gui.zoom_max; zoom_max = _settings_client.gui.zoom_max;
if (zoom_max == zoom_min) zoom_max = ZOOM_LVL_MAX; if (zoom_max == zoom_min) zoom_max = ZoomLevel::Max;
} }
for (ZoomLevel i = zoom_min; i <= zoom_max; i++) { for (ZoomLevel i = zoom_min; i <= zoom_max; i++) {

View File

@ -313,16 +313,16 @@ static bool ConZoomToLevel(std::span<std::string_view> argv)
IConsolePrint(CC_HELP, "Set the current zoom level of the main viewport."); IConsolePrint(CC_HELP, "Set the current zoom level of the main viewport.");
IConsolePrint(CC_HELP, "Usage: 'zoomto <level>'."); IConsolePrint(CC_HELP, "Usage: 'zoomto <level>'.");
if (ZOOM_LVL_MIN < _settings_client.gui.zoom_min) { if (ZoomLevel::Min < _settings_client.gui.zoom_min) {
IConsolePrint(CC_HELP, "The lowest zoom-in level allowed by current client settings is {}.", std::max(ZOOM_LVL_MIN, _settings_client.gui.zoom_min)); IConsolePrint(CC_HELP, "The lowest zoom-in level allowed by current client settings is {}.", std::max(ZoomLevel::Min, _settings_client.gui.zoom_min));
} else { } else {
IConsolePrint(CC_HELP, "The lowest supported zoom-in level is {}.", std::max(ZOOM_LVL_MIN, _settings_client.gui.zoom_min)); IConsolePrint(CC_HELP, "The lowest supported zoom-in level is {}.", std::max(ZoomLevel::Min, _settings_client.gui.zoom_min));
} }
if (_settings_client.gui.zoom_max < ZOOM_LVL_MAX) { if (_settings_client.gui.zoom_max < ZoomLevel::Max) {
IConsolePrint(CC_HELP, "The highest zoom-out level allowed by current client settings is {}.", std::min(_settings_client.gui.zoom_max, ZOOM_LVL_MAX)); IConsolePrint(CC_HELP, "The highest zoom-out level allowed by current client settings is {}.", std::min(_settings_client.gui.zoom_max, ZoomLevel::Max));
} else { } else {
IConsolePrint(CC_HELP, "The highest supported zoom-out level is {}.", std::min(_settings_client.gui.zoom_max, ZOOM_LVL_MAX)); IConsolePrint(CC_HELP, "The highest supported zoom-out level is {}.", std::min(_settings_client.gui.zoom_max, ZoomLevel::Max));
} }
return true; return true;
@ -330,8 +330,8 @@ static bool ConZoomToLevel(std::span<std::string_view> argv)
auto level = ParseInteger<std::underlying_type_t<ZoomLevel>>(argv[1]); auto level = ParseInteger<std::underlying_type_t<ZoomLevel>>(argv[1]);
if (level.has_value()) { if (level.has_value()) {
auto zoom_lvl = static_cast<ZoomLevel>(*level); auto zoom_lvl = static_cast<ZoomLevel>(*level);
if (!IsInsideMM(zoom_lvl, ZOOM_LVL_BEGIN, ZOOM_LVL_END)) { if (!IsInsideMM(zoom_lvl, ZoomLevel::Begin, ZoomLevel::End)) {
IConsolePrint(CC_ERROR, "Invalid zoom level. Valid range is {} to {}.", ZOOM_LVL_MIN, ZOOM_LVL_MAX); IConsolePrint(CC_ERROR, "Invalid zoom level. Valid range is {} to {}.", ZoomLevel::Min, ZoomLevel::Max);
} else if (!IsInsideMM(zoom_lvl, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max + 1)) { } else if (!IsInsideMM(zoom_lvl, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max + 1)) {
IConsolePrint(CC_ERROR, "Current client settings limit zoom levels to range {} to {}.", _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); IConsolePrint(CC_ERROR, "Current client settings limit zoom levels to range {} to {}.", _settings_client.gui.zoom_min, _settings_client.gui.zoom_max);
} else { } else {

View File

@ -242,8 +242,8 @@ const Sprite *FreeTypeFontCache::InternalGetGlyph(GlyphID key, bool aa)
/* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */ /* FreeType has rendered the glyph, now we allocate a sprite and copy the image into it */
SpriteLoader::SpriteCollection spritecollection; SpriteLoader::SpriteCollection spritecollection;
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; SpriteLoader::Sprite &sprite = spritecollection[ZoomLevel::Min];
sprite.AllocateData(ZOOM_LVL_MIN, static_cast<size_t>(width) * height); sprite.AllocateData(ZoomLevel::Min, static_cast<size_t>(width) * height);
sprite.colours = SpriteComponent::Palette; sprite.colours = SpriteComponent::Palette;
if (aa) sprite.colours.Set(SpriteComponent::Alpha); if (aa) sprite.colours.Set(SpriteComponent::Alpha);
sprite.width = width; sprite.width = width;

View File

@ -54,11 +54,11 @@ static uint8_t _stringwidth_table[FS_END][224]; ///< Cache containing width of o
DrawPixelInfo *_cur_dpi; DrawPixelInfo *_cur_dpi;
static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE); static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE);
static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_MIN); static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZoomLevel::Min);
static ReusableBuffer<uint8_t> _cursor_backup; static ReusableBuffer<uint8_t> _cursor_backup;
ZoomLevel _gui_zoom = ZOOM_LVL_NORMAL; ///< GUI Zoom level ZoomLevel _gui_zoom = ZoomLevel::Normal; ///< GUI Zoom level
ZoomLevel _font_zoom = _gui_zoom; ///< Sprite font Zoom level (not clamped) ZoomLevel _font_zoom = _gui_zoom; ///< Sprite font Zoom level (not clamped)
int _gui_scale = MIN_INTERFACE_SCALE; ///< GUI scale, 100 is 100%. int _gui_scale = MIN_INTERFACE_SCALE; ///< GUI scale, 100 is 100%.
int _gui_scale_cfg; ///< GUI scale in config. int _gui_scale_cfg; ///< GUI scale in config.
@ -101,7 +101,7 @@ void GfxScroll(int left, int top, int width, int height, int xo, int yo)
/** /**
* Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen. * Applies a certain FillRectMode-operation to a rectangle [left, right] x [top, bottom] on the screen.
* *
* @pre dpi->zoom == ZOOM_LVL_MIN, right >= left, bottom >= top * @pre dpi->zoom == ZoomLevel::Min, right >= left, bottom >= top
* @param left Minimum X (inclusive) * @param left Minimum X (inclusive)
* @param top Minimum Y (inclusive) * @param top Minimum Y (inclusive)
* @param right Maximum X (inclusive) * @param right Maximum X (inclusive)
@ -120,7 +120,7 @@ void GfxFillRect(int left, int top, int right, int bottom, int colour, FillRectM
const int otop = top; const int otop = top;
const int oleft = left; const int oleft = left;
if (dpi->zoom != ZOOM_LVL_MIN) return; if (dpi->zoom != ZoomLevel::Min) return;
if (left > right || top > bottom) return; if (left > right || top > bottom) return;
if (right < dpi->left || left >= dpi->left + dpi->width) return; if (right < dpi->left || left >= dpi->left + dpi->width) return;
if (bottom < dpi->top || top >= dpi->top + dpi->height) return; if (bottom < dpi->top || top >= dpi->top + dpi->height) return;
@ -200,7 +200,7 @@ static std::vector<LineSegment> MakePolygonSegments(std::span<const Point> shape
* The odd-even winding rule is used, i.e. self-intersecting polygons will have holes in them. * The odd-even winding rule is used, i.e. self-intersecting polygons will have holes in them.
* Left and top edges are inclusive, right and bottom edges are exclusive. * Left and top edges are inclusive, right and bottom edges are exclusive.
* @note For rectangles the GfxFillRect function will be faster. * @note For rectangles the GfxFillRect function will be faster.
* @pre dpi->zoom == ZOOM_LVL_MIN * @pre dpi->zoom == ZoomLevel::Min
* @param shape List of points on the polygon. * @param shape List of points on the polygon.
* @param colour An 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolour spritenumber (FILLRECT_RECOLOUR). * @param colour An 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolour spritenumber (FILLRECT_RECOLOUR).
* @param mode * @param mode
@ -212,7 +212,7 @@ void GfxFillPolygon(std::span<const Point> shape, int colour, FillRectMode mode)
{ {
Blitter *blitter = BlitterFactory::GetCurrentBlitter(); Blitter *blitter = BlitterFactory::GetCurrentBlitter();
const DrawPixelInfo *dpi = _cur_dpi; const DrawPixelInfo *dpi = _cur_dpi;
if (dpi->zoom != ZOOM_LVL_MIN) return; if (dpi->zoom != ZoomLevel::Min) return;
std::vector<LineSegment> segments = MakePolygonSegments(shape, Point{ dpi->left, dpi->top }); std::vector<LineSegment> segments = MakePolygonSegments(shape, Point{ dpi->left, dpi->top });
@ -1556,7 +1556,7 @@ bool FillDrawPixelInfo(DrawPixelInfo *n, int left, int top, int width, int heigh
Blitter *blitter = BlitterFactory::GetCurrentBlitter(); Blitter *blitter = BlitterFactory::GetCurrentBlitter();
const DrawPixelInfo *o = _cur_dpi; const DrawPixelInfo *o = _cur_dpi;
n->zoom = ZOOM_LVL_MIN; n->zoom = ZoomLevel::Min;
assert(width > 0); assert(width > 0);
assert(height > 0); assert(height > 0);
@ -1782,12 +1782,12 @@ void UpdateGUIZoom()
_gui_scale = Clamp(_gui_scale_cfg, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE); _gui_scale = Clamp(_gui_scale_cfg, MIN_INTERFACE_SCALE, MAX_INTERFACE_SCALE);
} }
int8_t new_zoom = ScaleGUITrad(1) <= 1 ? ZOOM_LVL_NORMAL : ScaleGUITrad(1) >= 4 ? ZOOM_LVL_IN_4X : ZOOM_LVL_IN_2X; ZoomLevel new_zoom = ScaleGUITrad(1) <= 1 ? ZoomLevel::Normal : ScaleGUITrad(1) >= 4 ? ZoomLevel::In4x : ZoomLevel::In2x;
/* Font glyphs should not be clamped to min/max zoom. */ /* Font glyphs should not be clamped to min/max zoom. */
_font_zoom = static_cast<ZoomLevel>(new_zoom); _font_zoom = new_zoom;
/* Ensure the gui_zoom is clamped between min/max. */ /* Ensure the gui_zoom is clamped between min/max. */
new_zoom = Clamp(new_zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); new_zoom = Clamp(new_zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max);
_gui_zoom = static_cast<ZoomLevel>(new_zoom); _gui_zoom = new_zoom;
} }
/** /**

View File

@ -116,7 +116,7 @@ static std::unique_ptr<NWidgetBase> MakeNWidgetCompanyLines()
{ {
auto vert = std::make_unique<NWidgetVertical>(NWidContainerFlag::EqualSize); auto vert = std::make_unique<NWidgetVertical>(NWidContainerFlag::EqualSize);
vert->SetPadding(2, 2, 2, 2); vert->SetPadding(2, 2, 2, 2);
uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_NORMAL).height; uint sprite_height = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZoomLevel::Normal).height;
for (WidgetID widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) { for (WidgetID widnum = WID_GL_FIRST_COMPANY; widnum <= WID_GL_LAST_COMPANY; widnum++) {
auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_BROWN, widnum); auto panel = std::make_unique<NWidgetBackground>(WWT_PANEL, COLOUR_BROWN, widnum);

View File

@ -825,7 +825,7 @@ public:
this->InitNested(window_number); this->InitNested(window_number);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_IV_VIEWPORT); NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_IV_VIEWPORT);
nvp->InitializeViewport(this, Industry::Get(window_number)->location.GetCenterTile(), ScaleZoomGUI(ZOOM_LVL_INDUSTRY)); nvp->InitializeViewport(this, Industry::Get(window_number)->location.GetCenterTile(), ScaleZoomGUI(ZoomLevel::Industry));
const Industry *i = Industry::Get(window_number); const Industry *i = Industry::Get(window_number);
if (!i->IsCargoProduced()) this->DisableWidget(WID_IV_GRAPH); if (!i->IsCargoProduced()) this->DisableWidget(WID_IV_GRAPH);

View File

@ -219,7 +219,7 @@ struct MainWindow : Window
ResizeWindow(this, _screen.width, _screen.height); ResizeWindow(this, _screen.width, _screen.height);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_M_VIEWPORT); NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_M_VIEWPORT);
nvp->InitializeViewport(this, TileXY(32, 32), ScaleZoomGUI(ZOOM_LVL_VIEWPORT)); nvp->InitializeViewport(this, TileXY(32, 32), ScaleZoomGUI(ZoomLevel::Viewport));
this->viewport->overlay = std::make_shared<LinkGraphOverlay>(this, WID_M_VIEWPORT, 0, CompanyMask{}, 2); this->viewport->overlay = std::make_shared<LinkGraphOverlay>(this, WID_M_VIEWPORT, 0, CompanyMask{}, 2);
this->refresh_timeout.Reset(); this->refresh_timeout.Reset();

View File

@ -44,7 +44,7 @@ static Dimension GetBadgeMaximalDimension(BadgeClassID class_index, GrfSpecFeatu
PalSpriteID ps = GetBadgeSprite(badge, feature, std::nullopt, PAL_NONE); PalSpriteID ps = GetBadgeSprite(badge, feature, std::nullopt, PAL_NONE);
if (ps.sprite == 0) continue; if (ps.sprite == 0) continue;
d.width = std::max(d.width, GetSpriteSize(ps.sprite, nullptr, ZOOM_LVL_NORMAL).width); d.width = std::max(d.width, GetSpriteSize(ps.sprite, nullptr, ZoomLevel::Normal).width);
if (d.width > MAX_BADGE_WIDTH) break; if (d.width > MAX_BADGE_WIDTH) break;
} }

View File

@ -822,7 +822,7 @@ struct SpriteAlignerWindow : Window {
Scrollbar *vscroll = nullptr; Scrollbar *vscroll = nullptr;
std::map<SpriteID, XyOffs> offs_start_map{}; ///< Mapping of starting offsets for the sprites which have been aligned in the sprite aligner window. std::map<SpriteID, XyOffs> offs_start_map{}; ///< Mapping of starting offsets for the sprites which have been aligned in the sprite aligner window.
static inline ZoomLevel zoom = ZOOM_LVL_END; static inline ZoomLevel zoom = ZoomLevel::End;
static bool centre; static bool centre;
static bool crosshair; static bool crosshair;
const Action5Type *act5_type = nullptr; ///< Sprite Area of current selected sprite. const Action5Type *act5_type = nullptr; ///< Sprite Area of current selected sprite.
@ -830,7 +830,7 @@ struct SpriteAlignerWindow : Window {
SpriteAlignerWindow(WindowDesc &desc, WindowNumber wno) : Window(desc) SpriteAlignerWindow(WindowDesc &desc, WindowNumber wno) : Window(desc)
{ {
/* On first opening, set initial zoom to current zoom level. */ /* On first opening, set initial zoom to current zoom level. */
if (SpriteAlignerWindow::zoom == ZOOM_LVL_END) SpriteAlignerWindow::zoom = _gui_zoom; if (SpriteAlignerWindow::zoom == ZoomLevel::End) SpriteAlignerWindow::zoom = _gui_zoom;
SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); 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! */ /* Oh yes, we assume there is at least one normal sprite! */
@ -1071,8 +1071,8 @@ struct SpriteAlignerWindow : Window {
break; break;
default: default:
if (IsInsideBS(widget, WID_SA_ZOOM, ZOOM_LVL_END)) { if (IsInsideBS(widget, WID_SA_ZOOM, to_underlying(ZoomLevel::End))) {
SpriteAlignerWindow::zoom = ZoomLevel(widget - WID_SA_ZOOM); SpriteAlignerWindow::zoom = static_cast<ZoomLevel>(widget - WID_SA_ZOOM);
this->InvalidateData(0, true); this->InvalidateData(0, true);
} }
break; break;
@ -1109,7 +1109,7 @@ struct SpriteAlignerWindow : Window {
} }
SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); SpriteAlignerWindow::zoom = Clamp(SpriteAlignerWindow::zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max);
for (ZoomLevel z = ZOOM_LVL_BEGIN; z < ZOOM_LVL_END; z++) { for (ZoomLevel z = ZoomLevel::Begin; z < ZoomLevel::End; z++) {
this->SetWidgetsDisabledState(z < _settings_client.gui.zoom_min || z > _settings_client.gui.zoom_max, WID_SA_ZOOM + to_underlying(z)); this->SetWidgetsDisabledState(z < _settings_client.gui.zoom_min || z > _settings_client.gui.zoom_max, WID_SA_ZOOM + to_underlying(z));
this->SetWidgetsLoweredState(SpriteAlignerWindow::zoom == z, WID_SA_ZOOM + to_underlying(z)); this->SetWidgetsLoweredState(SpriteAlignerWindow::zoom == z, WID_SA_ZOOM + to_underlying(z));
} }
@ -1191,12 +1191,12 @@ static constexpr NWidgetPart _nested_sprite_aligner_widgets[] = {
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SA_SCROLLBAR), NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_SA_SCROLLBAR),
EndContainer(), EndContainer(),
NWidget(NWID_VERTICAL), NWidget(NWID_VERTICAL),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZOOM_LVL_IN_4X)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZoomLevel::In4x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZOOM_LVL_IN_2X)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZoomLevel::In2x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_IN_2X), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZOOM_LVL_NORMAL)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZoomLevel::Normal)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZOOM_LVL_OUT_2X)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZoomLevel::Out2x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZOOM_LVL_OUT_4X)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZoomLevel::Out4x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X), SetFill(1, 0),
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZOOM_LVL_OUT_8X)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X), SetFill(1, 0), NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_SA_ZOOM + to_underlying(ZoomLevel::Out8x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X), SetFill(1, 0),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),
EndContainer(), EndContainer(),

View File

@ -395,9 +395,9 @@ struct NewsWindow : Window {
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_N_VIEWPORT); NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_N_VIEWPORT);
if (nvp != nullptr) { if (nvp != nullptr) {
if (std::holds_alternative<VehicleID>(ni->ref1)) { if (std::holds_alternative<VehicleID>(ni->ref1)) {
nvp->InitializeViewport(this, std::get<VehicleID>(ni->ref1), ScaleZoomGUI(ZOOM_LVL_NEWS)); nvp->InitializeViewport(this, std::get<VehicleID>(ni->ref1), ScaleZoomGUI(ZoomLevel::News));
} else { } else {
nvp->InitializeViewport(this, GetReferenceTile(ni->ref1), ScaleZoomGUI(ZOOM_LVL_NEWS)); nvp->InitializeViewport(this, GetReferenceTile(ni->ref1), ScaleZoomGUI(ZoomLevel::News));
} }
if (this->ni->flags.Test(NewsFlag::NoTransparency)) nvp->disp_flags.Set(NWidgetDisplayFlag::NoTransparency); if (this->ni->flags.Test(NewsFlag::NoTransparency)) nvp->disp_flags.Set(NWidgetDisplayFlag::NoTransparency);
if (!this->ni->flags.Test(NewsFlag::InColour)) { if (!this->ni->flags.Test(NewsFlag::InColour)) {

View File

@ -760,7 +760,7 @@ int openttd_main(std::span<std::string_view> arguments)
InitializeSpriteSorter(); InitializeSpriteSorter();
/* Initialize the zoom level of the screen to normal */ /* Initialize the zoom level of the screen to normal */
_screen.zoom = ZOOM_LVL_MIN; _screen.zoom = ZoomLevel::Min;
/* The video driver is now selected, now initialise GUI zoom */ /* The video driver is now selected, now initialise GUI zoom */
UpdateGUIZoom(); UpdateGUIZoom();

View File

@ -229,8 +229,8 @@ const Sprite *CoreTextFontCache::InternalGetGlyph(GlyphID key, bool use_aa)
if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) UserError("Font glyph is too large"); if (width > MAX_GLYPH_DIM || height > MAX_GLYPH_DIM) UserError("Font glyph is too large");
SpriteLoader::SpriteCollection spritecollection; SpriteLoader::SpriteCollection spritecollection;
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; SpriteLoader::Sprite &sprite = spritecollection[ZoomLevel::Min];
sprite.AllocateData(ZOOM_LVL_MIN, width * height); sprite.AllocateData(ZoomLevel::Min, width * height);
sprite.colours = SpriteComponent::Palette; sprite.colours = SpriteComponent::Palette;
if (use_aa) sprite.colours.Set(SpriteComponent::Alpha); if (use_aa) sprite.colours.Set(SpriteComponent::Alpha);
sprite.width = width; sprite.width = width;

View File

@ -225,8 +225,8 @@ void Win32FontCache::ClearFontCache()
/* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */
SpriteLoader::SpriteCollection spritecollection; SpriteLoader::SpriteCollection spritecollection;
SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; SpriteLoader::Sprite &sprite = spritecollection[ZoomLevel::Min];
sprite.AllocateData(ZOOM_LVL_MIN, width * height); sprite.AllocateData(ZoomLevel::Min, width * height);
sprite.colours = SpriteComponent::Palette; sprite.colours = SpriteComponent::Palette;
if (aa) sprite.colours.Set(SpriteComponent::Alpha); if (aa) sprite.colours.Set(SpriteComponent::Alpha);
sprite.width = width; sprite.width = width;

View File

@ -1658,7 +1658,7 @@ static void DrawRoadBits(TileInfo *ti)
DrawRoadCatenary(ti); DrawRoadCatenary(ti);
/* Return if full detail is disabled, or we are zoomed fully out. */ /* Return if full detail is disabled, or we are zoomed fully out. */
if (!HasBit(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom > ZOOM_LVL_DETAIL) return; if (!HasBit(_display_opt, DO_FULL_DETAIL) || _cur_dpi->zoom > ZoomLevel::Detail) return;
/* Do not draw details (street lights, trees) under low bridge */ /* Do not draw details (street lights, trees) under low bridge */
Roadside roadside = GetRoadside(ti->tile); Roadside roadside = GetRoadside(ti->tile);

View File

@ -43,7 +43,7 @@ void SaveViewportBeforeSaveGame()
/* Ensure saved position is clearly invalid. */ /* Ensure saved position is clearly invalid. */
_saved_scrollpos_x = INT_MAX; _saved_scrollpos_x = INT_MAX;
_saved_scrollpos_y = INT_MAX; _saved_scrollpos_y = INT_MAX;
_saved_scrollpos_zoom = ZOOM_LVL_END; _saved_scrollpos_zoom = ZoomLevel::End;
} else { } else {
_saved_scrollpos_x = w->viewport->scrollpos_x; _saved_scrollpos_x = w->viewport->scrollpos_x;
_saved_scrollpos_y = w->viewport->scrollpos_y; _saved_scrollpos_y = w->viewport->scrollpos_y;
@ -61,12 +61,12 @@ void ResetViewportAfterLoadGame()
w->viewport->dest_scrollpos_y = _saved_scrollpos_y; w->viewport->dest_scrollpos_y = _saved_scrollpos_y;
Viewport &vp = *w->viewport; Viewport &vp = *w->viewport;
vp.zoom = std::min(_saved_scrollpos_zoom, ZOOM_LVL_MAX); vp.zoom = std::min(_saved_scrollpos_zoom, ZoomLevel::Max);
vp.virtual_width = ScaleByZoom(vp.width, vp.zoom); vp.virtual_width = ScaleByZoom(vp.width, vp.zoom);
vp.virtual_height = ScaleByZoom(vp.height, vp.zoom); vp.virtual_height = ScaleByZoom(vp.height, vp.zoom);
/* If zoom_max is ZOOM_LVL_MIN then the setting has not been loaded yet, therefore all levels are allowed. */ /* If zoom_max is ZoomLevel::Min then the setting has not been loaded yet, therefore all levels are allowed. */
if (_settings_client.gui.zoom_max != ZOOM_LVL_MIN) { if (_settings_client.gui.zoom_max != ZoomLevel::Min) {
/* Ensure zoom level is allowed */ /* Ensure zoom level is allowed */
while (vp.zoom < _settings_client.gui.zoom_min) DoZoomInOutWindow(ZOOM_OUT, w); while (vp.zoom < _settings_client.gui.zoom_min) DoZoomInOutWindow(ZOOM_OUT, w);
while (vp.zoom > _settings_client.gui.zoom_max) DoZoomInOutWindow(ZOOM_IN, w); while (vp.zoom > _settings_client.gui.zoom_max) DoZoomInOutWindow(ZOOM_IN, w);

View File

@ -94,7 +94,7 @@ static void LargeWorldCallback(Viewport &vp, void *buf, uint y, uint pitch, uint
.width = vp.width, .width = vp.width,
.height = static_cast<int>(n), .height = static_cast<int>(n),
.pitch = static_cast<int>(pitch), .pitch = static_cast<int>(pitch),
.zoom = ZOOM_LVL_WORLD_SCREENSHOT .zoom = ZoomLevel::WorldScreenshot
}; };
/* We are no longer rendering to the screen */ /* We are no longer rendering to the screen */
@ -105,7 +105,7 @@ static void LargeWorldCallback(Viewport &vp, void *buf, uint y, uint pitch, uint
.width = static_cast<int>(pitch), .width = static_cast<int>(pitch),
.height = static_cast<int>(n), .height = static_cast<int>(n),
.pitch = static_cast<int>(pitch), .pitch = static_cast<int>(pitch),
.zoom = ZOOM_LVL_MIN .zoom = ZoomLevel::Min
}); });
AutoRestoreBackup disable_anim_backup(_screen_disable_anim, true); AutoRestoreBackup disable_anim_backup(_screen_disable_anim, true);
AutoRestoreBackup dpi_backup(_cur_dpi, &dpi); AutoRestoreBackup dpi_backup(_cur_dpi, &dpi);
@ -213,7 +213,7 @@ static Viewport SetupScreenshotViewport(ScreenshotType t, uint32_t width = 0, ui
assert(width == 0 && height == 0); assert(width == 0 && height == 0);
/* Determine world coordinates of screenshot */ /* Determine world coordinates of screenshot */
vp.zoom = ZOOM_LVL_WORLD_SCREENSHOT; vp.zoom = ZoomLevel::WorldScreenshot;
TileIndex north_tile = _settings_game.construction.freeform_edges ? TileXY(1, 1) : TileXY(0, 0); TileIndex north_tile = _settings_game.construction.freeform_edges ? TileXY(1, 1) : TileXY(0, 0);
TileIndex south_tile{Map::Size() - 1}; TileIndex south_tile{Map::Size() - 1};
@ -237,7 +237,7 @@ static Viewport SetupScreenshotViewport(ScreenshotType t, uint32_t width = 0, ui
break; break;
} }
default: { default: {
vp.zoom = (t == SC_ZOOMEDIN) ? _settings_client.gui.zoom_min : ZOOM_LVL_VIEWPORT; vp.zoom = (t == SC_ZOOMEDIN) ? _settings_client.gui.zoom_min : ZoomLevel::Viewport;
Window *w = GetMainWindow(); Window *w = GetMainWindow();
vp.virtual_left = w->viewport->virtual_left; vp.virtual_left = w->viewport->virtual_left;
@ -247,8 +247,8 @@ static Viewport SetupScreenshotViewport(ScreenshotType t, uint32_t width = 0, ui
vp.virtual_width = w->viewport->virtual_width; vp.virtual_width = w->viewport->virtual_width;
vp.virtual_height = w->viewport->virtual_height; vp.virtual_height = w->viewport->virtual_height;
} else { } else {
vp.virtual_width = width << vp.zoom; vp.virtual_width = width << to_underlying(vp.zoom);
vp.virtual_height = height << vp.zoom; vp.virtual_height = height << to_underlying(vp.zoom);
} }
/* Compute pixel coordinates */ /* Compute pixel coordinates */

View File

@ -122,7 +122,7 @@ static void StartSound(SoundID sound_id, float pan, uint volume)
static const uint8_t _vol_factor_by_zoom[] = {255, 255, 255, 190, 134, 87}; static const uint8_t _vol_factor_by_zoom[] = {255, 255, 255, 190, 134, 87};
static_assert(lengthof(_vol_factor_by_zoom) == ZOOM_LVL_END); static_assert(lengthof(_vol_factor_by_zoom) == to_underlying(ZoomLevel::End));
static const uint8_t _sound_base_vol[] = { static const uint8_t _sound_base_vol[] = {
128, 90, 128, 128, 128, 128, 128, 128, 128, 90, 128, 128, 128, 128, 128, 128,
@ -215,7 +215,7 @@ static void SndPlayScreenCoordFx(SoundID sound, int left, int right, int top, in
StartSound( StartSound(
sound, sound,
panning, panning,
_vol_factor_by_zoom[vp.zoom] _vol_factor_by_zoom[to_underlying(vp.zoom)]
); );
return; return;
} }

View File

@ -338,7 +338,7 @@ static bool PadSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels sprite
/* Get minimum top left corner coordinates. */ /* Get minimum top left corner coordinates. */
int min_xoffs = INT32_MAX; int min_xoffs = INT32_MAX;
int min_yoffs = INT32_MAX; int min_yoffs = INT32_MAX;
for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) {
if (sprite_avail.Test(zoom)) { if (sprite_avail.Test(zoom)) {
min_xoffs = std::min(min_xoffs, ScaleByZoom(sprite[zoom].x_offs, zoom)); min_xoffs = std::min(min_xoffs, ScaleByZoom(sprite[zoom].x_offs, zoom));
min_yoffs = std::min(min_yoffs, ScaleByZoom(sprite[zoom].y_offs, zoom)); min_yoffs = std::min(min_yoffs, ScaleByZoom(sprite[zoom].y_offs, zoom));
@ -348,7 +348,7 @@ static bool PadSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels sprite
/* Get maximum dimensions taking necessary padding at the top left into account. */ /* Get maximum dimensions taking necessary padding at the top left into account. */
int max_width = INT32_MIN; int max_width = INT32_MIN;
int max_height = INT32_MIN; int max_height = INT32_MIN;
for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) {
if (sprite_avail.Test(zoom)) { if (sprite_avail.Test(zoom)) {
max_width = std::max(max_width, ScaleByZoom(sprite[zoom].width + sprite[zoom].x_offs - UnScaleByZoom(min_xoffs, zoom), zoom)); max_width = std::max(max_width, ScaleByZoom(sprite[zoom].width + sprite[zoom].x_offs - UnScaleByZoom(min_xoffs, zoom), zoom));
max_height = std::max(max_height, ScaleByZoom(sprite[zoom].height + sprite[zoom].y_offs - UnScaleByZoom(min_yoffs, zoom), zoom)); max_height = std::max(max_height, ScaleByZoom(sprite[zoom].height + sprite[zoom].y_offs - UnScaleByZoom(min_yoffs, zoom), zoom));
@ -363,7 +363,7 @@ static bool PadSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels sprite
} }
/* Pad sprites where needed. */ /* Pad sprites where needed. */
for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) {
if (sprite_avail.Test(zoom)) { if (sprite_avail.Test(zoom)) {
auto &cur_sprite = sprite[zoom]; auto &cur_sprite = sprite[zoom];
/* Scaling the sprite dimensions in the blitter is done with rounding up, /* Scaling the sprite dimensions in the blitter is done with rounding up,
@ -386,12 +386,12 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels spr
{ {
/* Create a fully zoomed image if it does not exist */ /* Create a fully zoomed image if it does not exist */
ZoomLevel first_avail; ZoomLevel first_avail;
for (ZoomLevel zoom = ZOOM_LVL_MIN; zoom <= ZOOM_LVL_MAX; ++zoom) { for (ZoomLevel zoom = ZoomLevel::Min; zoom <= ZoomLevel::Max; ++zoom) {
if (!sprite_avail.Test(zoom)) continue; if (!sprite_avail.Test(zoom)) continue;
first_avail = zoom; first_avail = zoom;
if (zoom != ZOOM_LVL_MIN) { if (zoom != ZoomLevel::Min) {
if (!ResizeSpriteIn(sprite, zoom, ZOOM_LVL_MIN)) return false; if (!ResizeSpriteIn(sprite, zoom, ZoomLevel::Min)) return false;
sprite_avail.Set(ZOOM_LVL_MIN); sprite_avail.Set(ZoomLevel::Min);
} }
break; break;
} }
@ -400,12 +400,12 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels spr
if (!PadSprites(sprite, sprite_avail, encoder)) return false; if (!PadSprites(sprite, sprite_avail, encoder)) return false;
/* Create other missing zoom levels */ /* Create other missing zoom levels */
for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) {
if (zoom == ZOOM_LVL_MIN) continue; if (zoom == ZoomLevel::Min) continue;
if (sprite_avail.Test(zoom)) { if (sprite_avail.Test(zoom)) {
/* Check that size and offsets match the fully zoomed image. */ /* Check that size and offsets match the fully zoomed image. */
[[maybe_unused]] const auto &root_sprite = sprite[ZOOM_LVL_MIN]; [[maybe_unused]] const auto &root_sprite = sprite[ZoomLevel::Min];
[[maybe_unused]] const auto &dest_sprite = sprite[zoom]; [[maybe_unused]] const auto &dest_sprite = sprite[zoom];
assert(dest_sprite.width == UnScaleByZoom(root_sprite.width, zoom)); assert(dest_sprite.width == UnScaleByZoom(root_sprite.width, zoom));
assert(dest_sprite.height == UnScaleByZoom(root_sprite.height, zoom)); assert(dest_sprite.height == UnScaleByZoom(root_sprite.height, zoom));
@ -419,7 +419,7 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels spr
/* Replace sprites with higher resolution than the desired maximum source resolution with scaled up sprites, if not already done. */ /* Replace sprites with higher resolution than the desired maximum source resolution with scaled up sprites, if not already done. */
if (first_avail < _settings_client.gui.sprite_zoom_min) { if (first_avail < _settings_client.gui.sprite_zoom_min) {
for (ZoomLevel zoom = std::min(ZOOM_LVL_NORMAL, _settings_client.gui.sprite_zoom_min); zoom > ZOOM_LVL_MIN; --zoom) { for (ZoomLevel zoom = std::min(ZoomLevel::Normal, _settings_client.gui.sprite_zoom_min); zoom > ZoomLevel::Min; --zoom) {
ResizeSpriteIn(sprite, zoom, zoom - 1); ResizeSpriteIn(sprite, zoom, zoom - 1);
} }
} }
@ -546,9 +546,9 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty
return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, &allocator, encoder); return (void*)GetRawSprite(SPR_IMG_QUERY, SpriteType::Normal, &allocator, encoder);
} }
if (sprite_type == SpriteType::Font && _font_zoom != ZOOM_LVL_MIN) { if (sprite_type == SpriteType::Font && _font_zoom != ZoomLevel::Min) {
/* Make ZOOM_LVL_MIN be ZOOM_LVL_GUI */ /* Make ZoomLevel::Min be ZOOM_LVL_GUI */
sprite[ZOOM_LVL_MIN] = sprite[_font_zoom]; sprite[ZoomLevel::Min] = sprite[_font_zoom];
} }
return encoder->Encode(sprite_type, sprite, allocator); return encoder->Encode(sprite_type, sprite, allocator);
@ -605,11 +605,11 @@ void ReadGRFSpriteOffsets(SpriteFile &file)
if (length > 0) { if (length > 0) {
uint8_t zoom = file.ReadByte(); uint8_t zoom = file.ReadByte();
length--; length--;
if (colour != SpriteComponents{} && zoom == 0) { // ZOOM_LVL_NORMAL (normal zoom) if (colour != SpriteComponents{} && zoom == 0) { // ZoomLevel::Normal (normal zoom)
SetBit(offset.control_flags, (colour != SpriteComponent::Palette) ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL); SetBit(offset.control_flags, (colour != SpriteComponent::Palette) ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL);
SetBit(offset.control_flags, (colour != SpriteComponent::Palette) ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL); SetBit(offset.control_flags, (colour != SpriteComponent::Palette) ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL);
} }
if (colour != SpriteComponents{} && zoom == 2) { // ZOOM_LVL_IN_2X (2x zoomed in) if (colour != SpriteComponents{} && zoom == 2) { // ZoomLevel::In2x (2x zoomed in)
SetBit(offset.control_flags, (colour != SpriteComponent::Palette) ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL); SetBit(offset.control_flags, (colour != SpriteComponent::Palette) ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL);
} }
} }

View File

@ -230,7 +230,7 @@ static ZoomLevels LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFil
/* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here */ /* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here */
if (type == 0xFF) return {}; if (type == 0xFF) return {};
ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? ZOOM_LVL_NORMAL : ZOOM_LVL_MIN; ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? ZoomLevel::Normal : ZoomLevel::Min;
auto &dest_sprite = sprite[zoom_lvl]; auto &dest_sprite = sprite[zoom_lvl];
dest_sprite.height = file.ReadByte(); dest_sprite.height = file.ReadByte();
@ -258,7 +258,7 @@ static ZoomLevels LoadSpriteV1(SpriteLoader::SpriteCollection &sprite, SpriteFil
static ZoomLevels LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags, ZoomLevels &avail_8bpp, ZoomLevels &avail_32bpp) static ZoomLevels LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFile &file, size_t file_pos, SpriteType sprite_type, bool load_32bpp, uint8_t control_flags, ZoomLevels &avail_8bpp, ZoomLevels &avail_32bpp)
{ {
static const ZoomLevel zoom_lvl_map[6] = {ZOOM_LVL_NORMAL, ZOOM_LVL_IN_4X, ZOOM_LVL_IN_2X, ZOOM_LVL_OUT_2X, ZOOM_LVL_OUT_4X, ZOOM_LVL_OUT_8X}; static const ZoomLevel zoom_lvl_map[6] = {ZoomLevel::Normal, ZoomLevel::In4x, ZoomLevel::In2x, ZoomLevel::Out2x, ZoomLevel::Out4x, ZoomLevel::Out8x};
/* Is the sprite not present/stripped in the GRF? */ /* Is the sprite not present/stripped in the GRF? */
if (file_pos == SIZE_MAX) return {}; if (file_pos == SIZE_MAX) return {};
@ -293,13 +293,13 @@ static ZoomLevels LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFil
if (colour != SpriteComponent::Palette) avail_32bpp.Set(zoom_lvl); if (colour != SpriteComponent::Palette) avail_32bpp.Set(zoom_lvl);
is_wanted_zoom_lvl = true; is_wanted_zoom_lvl = true;
ZoomLevel zoom_min = sprite_type == SpriteType::Font ? ZOOM_LVL_MIN : _settings_client.gui.sprite_zoom_min; ZoomLevel zoom_min = sprite_type == SpriteType::Font ? ZoomLevel::Min : _settings_client.gui.sprite_zoom_min;
if (zoom_min >= ZOOM_LVL_IN_2X && if (zoom_min >= ZoomLevel::In2x &&
HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL) && zoom_lvl < ZOOM_LVL_IN_2X) { HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL) && zoom_lvl < ZoomLevel::In2x) {
is_wanted_zoom_lvl = false; is_wanted_zoom_lvl = false;
} }
if (zoom_min >= ZOOM_LVL_NORMAL && if (zoom_min >= ZoomLevel::Normal &&
HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL) && zoom_lvl < ZOOM_LVL_NORMAL) { HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL) && zoom_lvl < ZoomLevel::Normal) {
is_wanted_zoom_lvl = false; is_wanted_zoom_lvl = false;
} }
} else { } else {
@ -310,7 +310,7 @@ static ZoomLevels LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFil
} }
if (is_wanted_colour_depth && is_wanted_zoom_lvl) { if (is_wanted_colour_depth && is_wanted_zoom_lvl) {
ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? zoom_lvl_map[zoom] : ZOOM_LVL_MIN; ZoomLevel zoom_lvl = (sprite_type != SpriteType::MapGen) ? zoom_lvl_map[zoom] : ZoomLevel::Min;
if (loaded_sprites.Test(zoom_lvl)) { if (loaded_sprites.Test(zoom_lvl)) {
/* We already have this zoom level, skip sprite. */ /* We already have this zoom level, skip sprite. */

View File

@ -52,7 +52,7 @@ ZoomLevels SpriteLoaderMakeIndexed::LoadSprite(SpriteLoader::SpriteCollection &s
{ {
ZoomLevels avail = this->baseloader.LoadSprite(sprite, file, file_pos, sprite_type, true, control_flags, avail_8bpp, avail_32bpp); ZoomLevels avail = this->baseloader.LoadSprite(sprite, file, file_pos, sprite_type, true, control_flags, avail_8bpp, avail_32bpp);
for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) {
if (avail.Test(zoom)) Convert32bppTo8bpp(sprite[zoom]); if (avail.Test(zoom)) Convert32bppTo8bpp(sprite[zoom]);
} }

View File

@ -31,13 +31,13 @@ using SpriteComponents = EnumBitSet<SpriteComponent, uint8_t, SpriteComponent::E
*/ */
template <class T> template <class T>
class SpriteCollMap { class SpriteCollMap {
std::array<T, ZOOM_LVL_END> data; std::array<T, to_underlying(ZoomLevel::End)> data;
public: public:
inline constexpr T &operator[](const ZoomLevel &zoom) { return this->data[zoom]; } inline constexpr T &operator[](const ZoomLevel &zoom) { return this->data[to_underlying(zoom)]; }
inline constexpr const T &operator[](const ZoomLevel &zoom) const { return this->data[zoom]; } inline constexpr const T &operator[](const ZoomLevel &zoom) const { return this->data[to_underlying(zoom)]; }
T &Root() { return this->data[ZOOM_LVL_MIN]; } T &Root() { return this->data[to_underlying(ZoomLevel::Min)]; }
const T &Root() const { return this->data[ZOOM_LVL_MIN]; } const T &Root() const { return this->data[to_underlying(ZoomLevel::Min)]; }
}; };
/** Interface for the loader of our sprites. */ /** Interface for the loader of our sprites. */

View File

@ -260,9 +260,9 @@ cat = SC_EXPERT
var = gui.zoom_min var = gui.zoom_min
type = SLE_UINT8 type = SLE_UINT8
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = ZOOM_LVL_MIN def = to_underlying(ZoomLevel::Min)
min = ZOOM_LVL_MIN min = to_underlying(ZoomLevel::Min)
max = ZOOM_LVL_NORMAL max = to_underlying(ZoomLevel::Normal)
str = STR_CONFIG_SETTING_ZOOM_MIN str = STR_CONFIG_SETTING_ZOOM_MIN
strhelp = STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT strhelp = STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT
strval = STR_CONFIG_SETTING_ZOOM_LVL_MIN strval = STR_CONFIG_SETTING_ZOOM_LVL_MIN
@ -273,9 +273,9 @@ startup = true
var = gui.zoom_max var = gui.zoom_max
type = SLE_UINT8 type = SLE_UINT8
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = ZOOM_LVL_MAX def = to_underlying(ZoomLevel::Max)
min = ZOOM_LVL_OUT_2X min = to_underlying(ZoomLevel::Out2x)
max = ZOOM_LVL_MAX max = to_underlying(ZoomLevel::Max)
str = STR_CONFIG_SETTING_ZOOM_MAX str = STR_CONFIG_SETTING_ZOOM_MAX
strhelp = STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT strhelp = STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT
strval = STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X strval = STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X
@ -286,9 +286,9 @@ startup = true
var = gui.sprite_zoom_min var = gui.sprite_zoom_min
type = SLE_UINT8 type = SLE_UINT8
flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown
def = ZOOM_LVL_MIN def = to_underlying(ZoomLevel::Min)
min = ZOOM_LVL_MIN min = to_underlying(ZoomLevel::Min)
max = ZOOM_LVL_NORMAL max = to_underlying(ZoomLevel::Normal)
str = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN str = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN
strhelp = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT strhelp = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT
strval = STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN strval = STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN

View File

@ -101,10 +101,10 @@ IntervalTimer<TimerWindow> move_all_text_effects_interval = {std::chrono::millis
continue; continue;
} }
te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); te.MarkDirty(ZoomLevel::TextEffect);
te.duration -= count; te.duration -= count;
te.top -= count * ZOOM_BASE; te.top -= count * ZOOM_BASE;
te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); te.MarkDirty(ZoomLevel::TextEffect);
} }
}}; }};
@ -117,11 +117,11 @@ void InitTextEffects()
void DrawTextEffects(DrawPixelInfo *dpi) void DrawTextEffects(DrawPixelInfo *dpi)
{ {
/* Don't draw the text effects when zoomed out a lot */ /* Don't draw the text effects when zoomed out a lot */
if (dpi->zoom > ZOOM_LVL_TEXT_EFFECT) return; if (dpi->zoom > ZoomLevel::TextEffect) return;
if (IsTransparencySet(TO_TEXT)) return; if (IsTransparencySet(TO_TEXT)) return;
ViewportStringFlags flags{}; ViewportStringFlags flags{};
if (dpi->zoom >= ZOOM_LVL_TEXT_EFFECT) flags.Set(ViewportStringFlag::Small); if (dpi->zoom >= ZoomLevel::TextEffect) flags.Set(ViewportStringFlag::Small);
for (const TextEffect &te : _text_effects) { for (const TextEffect &te : _text_effects) {
if (!te.IsValid()) continue; if (!te.IsValid()) continue;

View File

@ -378,7 +378,7 @@ public:
this->flags.Set(WindowFlag::DisableVpScroll); this->flags.Set(WindowFlag::DisableVpScroll);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_TV_VIEWPORT); NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_TV_VIEWPORT);
nvp->InitializeViewport(this, this->town->xy, ScaleZoomGUI(ZOOM_LVL_TOWN)); nvp->InitializeViewport(this, this->town->xy, ScaleZoomGUI(ZoomLevel::Town));
/* disable renaming town in network games if you are not the server */ /* disable renaming town in network games if you are not the server */
this->SetWidgetDisabledState(WID_TV_CHANGE_NAME, _networking && !_network_server); this->SetWidgetDisabledState(WID_TV_CHANGE_NAME, _networking && !_network_server);

View File

@ -2873,10 +2873,10 @@ static_assert(VEH_AIRCRAFT == 3);
/** Zoom levels for vehicle views indexed by vehicle type. */ /** Zoom levels for vehicle views indexed by vehicle type. */
static const ZoomLevel _vehicle_view_zoom_levels[] = { static const ZoomLevel _vehicle_view_zoom_levels[] = {
ZOOM_LVL_TRAIN, ZoomLevel::Train,
ZOOM_LVL_ROADVEH, ZoomLevel::RoadVehicle,
ZOOM_LVL_SHIP, ZoomLevel::Ship,
ZOOM_LVL_AIRCRAFT, ZoomLevel::Aircraft,
}; };
/* Constants for geometry of vehicle view viewport */ /* Constants for geometry of vehicle view viewport */

View File

@ -1405,7 +1405,7 @@ OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCol
this->x_offs = root_sprite.x_offs; this->x_offs = root_sprite.x_offs;
this->y_offs = root_sprite.y_offs; this->y_offs = root_sprite.y_offs;
int levels = sprite_type == SpriteType::Font ? 1 : ZOOM_LVL_END; int levels = sprite_type == SpriteType::Font ? 1 : to_underlying(ZoomLevel::End);
assert(levels > 0); assert(levels > 0);
(void)_glGetError(); (void)_glGetError();
@ -1440,9 +1440,9 @@ OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCol
} }
/* Upload texture data. */ /* Upload texture data. */
for (ZoomLevel zoom = ZOOM_LVL_MIN; zoom <= (sprite_type == SpriteType::Font ? ZOOM_LVL_MIN : ZOOM_LVL_MAX); ++zoom) { for (ZoomLevel zoom = ZoomLevel::Min; zoom <= (sprite_type == SpriteType::Font ? ZoomLevel::Min : ZoomLevel::Max); ++zoom) {
const auto &src_sprite = sprite[zoom]; const auto &src_sprite = sprite[zoom];
this->Update(src_sprite.width, src_sprite.height, zoom, src_sprite.data); this->Update(src_sprite.width, src_sprite.height, to_underlying(zoom), src_sprite.data);
} }
assert(_glGetError() == GL_NO_ERROR); assert(_glGetError() == GL_NO_ERROR);

View File

@ -105,7 +105,7 @@ public:
/* SpriteEncoder */ /* SpriteEncoder */
bool Is32BppSupported() override { return true; } bool Is32BppSupported() override { return true; }
uint GetSpriteAlignment() override { return 1u << ZOOM_LVL_MAX; } uint GetSpriteAlignment() override { return 1u << to_underlying(ZoomLevel::Max); }
Sprite *Encode(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override; Sprite *Encode(SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override;
}; };

View File

@ -1481,7 +1481,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi)
}); });
/* Small versions of signs are used zoom level 4X and higher. */ /* Small versions of signs are used zoom level 4X and higher. */
bool small = dpi->zoom >= ZOOM_LVL_OUT_4X; bool small = dpi->zoom >= ZoomLevel::Out4x;
/* Layering order (bottom to top): Town names, signs, stations */ /* Layering order (bottom to top): Town names, signs, stations */
ViewportAddTownStrings(dpi, towns, small); ViewportAddTownStrings(dpi, towns, small);
@ -1525,17 +1525,17 @@ void ViewportSign::UpdatePosition(int center, int top, std::string_view str, std
*/ */
void ViewportSign::MarkDirty(ZoomLevel maxzoom) const void ViewportSign::MarkDirty(ZoomLevel maxzoom) const
{ {
Rect zoomlevels[ZOOM_LVL_END]; Rect zoomlevels[to_underlying(ZoomLevel::End)];
/* We don't know which size will be drawn, so mark the largest area dirty. */ /* 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 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; 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++) { for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) {
zoomlevels[zoom].left = this->center - ScaleByZoom(half_width, zoom); zoomlevels[to_underlying(zoom)].left = this->center - ScaleByZoom(half_width, zoom);
zoomlevels[zoom].top = this->top - ScaleByZoom(1, zoom); zoomlevels[to_underlying(zoom)].top = this->top - ScaleByZoom(1, zoom);
zoomlevels[zoom].right = this->center + ScaleByZoom(half_width, zoom); zoomlevels[to_underlying(zoom)].right = this->center + ScaleByZoom(half_width, zoom);
zoomlevels[zoom].bottom = this->top + ScaleByZoom(height, zoom); zoomlevels[to_underlying(zoom)].bottom = this->top + ScaleByZoom(height, zoom);
} }
for (const Window *w : Window::Iterate()) { for (const Window *w : Window::Iterate()) {
@ -1544,7 +1544,7 @@ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const
Viewport &vp = *w->viewport; Viewport &vp = *w->viewport;
if (vp.zoom <= maxzoom) { if (vp.zoom <= maxzoom) {
assert(vp.width != 0); assert(vp.width != 0);
Rect &zl = zoomlevels[vp.zoom]; Rect &zl = zoomlevels[to_underlying(vp.zoom)];
MarkViewportDirty(vp, zl.left, zl.top, zl.right, zl.bottom); MarkViewportDirty(vp, zl.left, zl.top, zl.right, zl.bottom);
} }
} }
@ -1820,7 +1820,7 @@ void ViewportDoDraw(const Viewport &vp, int left, int top, int right, int bottom
DrawPixelInfo dp = _vd.dpi; DrawPixelInfo dp = _vd.dpi;
ZoomLevel zoom = _vd.dpi.zoom; ZoomLevel zoom = _vd.dpi.zoom;
dp.zoom = ZOOM_LVL_MIN; dp.zoom = ZoomLevel::Min;
dp.width = UnScaleByZoom(dp.width, zoom); dp.width = UnScaleByZoom(dp.width, zoom);
dp.height = UnScaleByZoom(dp.height, zoom); dp.height = UnScaleByZoom(dp.height, zoom);
AutoRestoreBackup cur_dpi(_cur_dpi, &dp); AutoRestoreBackup cur_dpi(_cur_dpi, &dp);
@ -2026,8 +2026,8 @@ void UpdateViewportPosition(Window *w, uint32_t delta_ms)
static bool MarkViewportDirty(const Viewport &vp, int left, int top, int right, int bottom) static bool MarkViewportDirty(const Viewport &vp, int left, int top, int right, int bottom)
{ {
/* Rounding wrt. zoom-out level */ /* Rounding wrt. zoom-out level */
right += (1 << vp.zoom) - 1; right += (1 << to_underlying(vp.zoom)) - 1;
bottom += (1 << vp.zoom) - 1; bottom += (1 << to_underlying(vp.zoom)) - 1;
right -= vp.virtual_left; right -= vp.virtual_left;
if (right <= 0) return false; if (right <= 0) return false;
@ -2055,10 +2055,10 @@ static bool MarkViewportDirty(const Viewport &vp, int left, int top, int right,
/** /**
* Mark all viewports that display an area as dirty (in need of repaint). * Mark all viewports that display an area as dirty (in need of repaint).
* @param left Left edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) * @param left Left edge of area to repaint. (viewport coordinates, that is wrt. #ZoomLevel::Min)
* @param top Top edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) * @param top Top edge of area to repaint. (viewport coordinates, that is wrt. #ZoomLevel::Min)
* @param right Right edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) * @param right Right edge of area to repaint. (viewport coordinates, that is wrt. #ZoomLevel::Min)
* @param bottom Bottom edge of area to repaint. (viewport coordinates, that is wrt. #ZOOM_LVL_MIN) * @param bottom Bottom edge of area to repaint. (viewport coordinates, that is wrt. #ZoomLevel::Min)
* @return true if at least one viewport has a dirty block * @return true if at least one viewport has a dirty block
* @ingroup dirty * @ingroup dirty
*/ */
@ -2240,7 +2240,7 @@ void SetSelectionRed(bool b)
*/ */
static bool CheckClickOnViewportSign(const Viewport &vp, int x, int y, const ViewportSign *sign) static bool CheckClickOnViewportSign(const Viewport &vp, int x, int y, const ViewportSign *sign)
{ {
bool small = (vp.zoom >= ZOOM_LVL_OUT_4X); bool small = (vp.zoom >= ZoomLevel::Out4x);
int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp.zoom); int sign_half_width = ScaleByZoom((small ? sign->width_small : sign->width_normal) / 2, vp.zoom);
int sign_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : 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);

View File

@ -57,7 +57,7 @@ public:
this->InitNested(window_number); this->InitNested(window_number);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_EV_VIEWPORT); NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_EV_VIEWPORT);
nvp->InitializeViewport(this, tile, ScaleZoomGUI(ZOOM_LVL_VIEWPORT)); nvp->InitializeViewport(this, tile, ScaleZoomGUI(ZoomLevel::Viewport));
if (_settings_client.gui.zoom_min == viewport->zoom) this->DisableWidget(WID_EV_ZOOM_IN); if (_settings_client.gui.zoom_min == viewport->zoom) this->DisableWidget(WID_EV_ZOOM_IN);
} }

View File

@ -53,7 +53,7 @@ struct ViewportSign {
auto operator<=>(const ViewportSign &) const = default; auto operator<=>(const ViewportSign &) const = default;
void UpdatePosition(int center, int top, std::string_view str, std::string_view str_small = {}); void UpdatePosition(int center, int top, std::string_view str, std::string_view str_small = {});
void MarkDirty(ZoomLevel maxzoom = ZOOM_LVL_MAX) const; void MarkDirty(ZoomLevel maxzoom = ZoomLevel::Max) const;
}; };
/** Specialised ViewportSign that tracks whether it is valid for entering into a Kdtree */ /** Specialised ViewportSign that tracks whether it is valid for entering into a Kdtree */

View File

@ -97,7 +97,7 @@ public:
this->flags.Set(WindowFlag::DisableVpScroll); this->flags.Set(WindowFlag::DisableVpScroll);
NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_W_VIEWPORT); NWidgetViewport *nvp = this->GetWidget<NWidgetViewport>(WID_W_VIEWPORT);
nvp->InitializeViewport(this, this->GetCenterTile(), ScaleZoomGUI(ZOOM_LVL_VIEWPORT)); nvp->InitializeViewport(this, this->GetCenterTile(), ScaleZoomGUI(ZoomLevel::Viewport));
this->OnInvalidateData(0); this->OnInvalidateData(0);
} }

View File

@ -68,7 +68,7 @@ static inline Dimension ScaleGUITrad(const Dimension &dim)
Dimension GetScaledSpriteSize(SpriteID sprid) Dimension GetScaledSpriteSize(SpriteID sprid)
{ {
Point offset; Point offset;
Dimension d = GetSpriteSize(sprid, &offset, ZOOM_LVL_NORMAL); Dimension d = GetSpriteSize(sprid, &offset, ZoomLevel::Normal);
d.width -= offset.x; d.width -= offset.x;
d.height -= offset.y; d.height -= offset.y;
return ScaleGUITrad(d); return ScaleGUITrad(d);
@ -3443,7 +3443,7 @@ std::unique_ptr<NWidgetBase> MakeCompanyButtonRows(WidgetID widget_first, Widget
std::unique_ptr<NWidgetHorizontal> hor = nullptr; // Storage for buttons in one row. std::unique_ptr<NWidgetHorizontal> hor = nullptr; // Storage for buttons in one row.
int hor_length = 0; int hor_length = 0;
Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZOOM_LVL_NORMAL); Dimension sprite_size = GetSpriteSize(SPR_COMPANY_ICON, nullptr, ZoomLevel::Normal);
sprite_size.width += WidgetDimensions::unscaled.matrix.Horizontal(); sprite_size.width += WidgetDimensions::unscaled.matrix.Horizontal();
sprite_size.height += WidgetDimensions::unscaled.matrix.Vertical(); sprite_size.height += WidgetDimensions::unscaled.matrix.Vertical();

View File

@ -37,8 +37,8 @@ enum SpriteAlignerWidgets : WidgetID {
WID_SA_PICKER, ///< Sprite picker. WID_SA_PICKER, ///< Sprite picker.
WID_SA_LIST, ///< Queried sprite list. WID_SA_LIST, ///< Queried sprite list.
WID_SA_SCROLLBAR, ///< Scrollbar for sprite list. WID_SA_SCROLLBAR, ///< Scrollbar for sprite list.
WID_SA_ZOOM, ///< Zoom level buttons (from ZOOM_LVL_BEGIN to ZOOM_LVL_END). WID_SA_ZOOM, ///< Zoom level buttons (from ZoomLevel::Begin to ZoomLevel::Max).
WID_SA_ZOOM_LAST = WID_SA_ZOOM + ZOOM_LVL_END - 1, ///< Marker for last zoom level button. WID_SA_ZOOM_LAST = WID_SA_ZOOM + to_underlying(ZoomLevel::Max), ///< Marker for last zoom level button.
WID_SA_RESET_REL, ///< Reset relative sprite offset WID_SA_RESET_REL, ///< Reset relative sprite offset
WID_SA_CENTRE, ///< Toggle centre sprite. WID_SA_CENTRE, ///< Toggle centre sprite.
WID_SA_CROSSHAIR, ///< Toggle crosshair. WID_SA_CROSSHAIR, ///< Toggle crosshair.

View File

@ -913,7 +913,7 @@ static void DrawOverlappedWindow(Window *w, int left, int top, int right, int bo
dp->top = top - w->top; dp->top = top - w->top;
dp->pitch = _screen.pitch; dp->pitch = _screen.pitch;
dp->dst_ptr = BlitterFactory::GetCurrentBlitter()->MoveTo(_screen.dst_ptr, left, top); dp->dst_ptr = BlitterFactory::GetCurrentBlitter()->MoveTo(_screen.dst_ptr, left, top);
dp->zoom = ZOOM_LVL_MIN; dp->zoom = ZoomLevel::Min;
w->OnPaint(); w->OnPaint();
} }

View File

@ -13,7 +13,7 @@
#include "zoom_type.h" #include "zoom_type.h"
/** /**
* Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_MIN) * Scale by zoom level, usually shift left (when zoom > ZoomLevel::Min)
* When shifting right, value is rounded up * When shifting right, value is rounded up
* @param value value to shift * @param value value to shift
* @param zoom zoom level to shift to * @param zoom zoom level to shift to
@ -21,11 +21,11 @@
*/ */
inline int ScaleByZoom(int value, ZoomLevel zoom) inline int ScaleByZoom(int value, ZoomLevel zoom)
{ {
return value << zoom; return value << to_underlying(zoom);
} }
/** /**
* Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_MIN) * Scale by zoom level, usually shift right (when zoom > ZoomLevel::Min)
* When shifting right, value is rounded up * When shifting right, value is rounded up
* @param value value to shift * @param value value to shift
* @param zoom zoom level to shift to * @param zoom zoom level to shift to
@ -33,7 +33,7 @@ inline int ScaleByZoom(int value, ZoomLevel zoom)
*/ */
inline int UnScaleByZoom(int value, ZoomLevel zoom) inline int UnScaleByZoom(int value, ZoomLevel zoom)
{ {
return (value + (1 << zoom) - 1) >> zoom; return (value + (1 << to_underlying(zoom)) - 1) >> to_underlying(zoom);
} }
/** /**
@ -44,34 +44,34 @@ inline int UnScaleByZoom(int value, ZoomLevel zoom)
*/ */
inline int AdjustByZoom(int value, int zoom) inline int AdjustByZoom(int value, int zoom)
{ {
return zoom < 0 ? UnScaleByZoom(value, ZoomLevel(-zoom)) : ScaleByZoom(value, ZoomLevel(zoom)); return zoom < 0 ? UnScaleByZoom(value, static_cast<ZoomLevel>(-zoom)) : ScaleByZoom(value, static_cast<ZoomLevel>(zoom));
} }
/** /**
* Scale by zoom level, usually shift left (when zoom > ZOOM_LVL_MIN) * Scale by zoom level, usually shift left (when zoom > ZoomLevel::Min)
* @param value value to shift * @param value value to shift
* @param zoom zoom level to shift to * @param zoom zoom level to shift to
* @return shifted value * @return shifted value
*/ */
inline int ScaleByZoomLower(int value, ZoomLevel zoom) inline int ScaleByZoomLower(int value, ZoomLevel zoom)
{ {
return value << zoom; return value << to_underlying(zoom);
} }
/** /**
* Scale by zoom level, usually shift right (when zoom > ZOOM_LVL_MIN) * Scale by zoom level, usually shift right (when zoom > ZoomLevel::Min)
* @param value value to shift * @param value value to shift
* @param zoom zoom level to shift to * @param zoom zoom level to shift to
* @return shifted value * @return shifted value
*/ */
inline int UnScaleByZoomLower(int value, ZoomLevel zoom) inline int UnScaleByZoomLower(int value, ZoomLevel zoom)
{ {
return value >> zoom; return value >> to_underlying(zoom);
} }
/** /**
* Short-hand to apply GUI zoom level. * Short-hand to apply GUI zoom level.
* @param value Pixel amount at #ZOOM_LVL_MIN (full zoom in). * @param value Pixel amount at #ZoomLevel::Min (full zoom in).
* @return Pixel amount at #ZOOM_LVL_GUI (current interface size). * @return Pixel amount at #ZOOM_LVL_GUI (current interface size).
*/ */
inline int UnScaleGUI(int value) inline int UnScaleGUI(int value)
@ -86,7 +86,7 @@ inline int UnScaleGUI(int value)
*/ */
inline ZoomLevel ScaleZoomGUI(ZoomLevel value) inline ZoomLevel ScaleZoomGUI(ZoomLevel value)
{ {
return std::clamp(value + (ZOOM_LVL_GUI - ZOOM_LVL_NORMAL), ZOOM_LVL_MIN, ZOOM_LVL_MAX); return std::clamp(value + (ZOOM_LVL_GUI - ZoomLevel::Normal), ZoomLevel::Min, ZoomLevel::Max);
} }
/** /**
@ -96,7 +96,7 @@ inline ZoomLevel ScaleZoomGUI(ZoomLevel value)
*/ */
inline ZoomLevel UnScaleZoomGUI(ZoomLevel value) inline ZoomLevel UnScaleZoomGUI(ZoomLevel value)
{ {
return std::clamp(value - (ZOOM_LVL_GUI - ZOOM_LVL_NORMAL), ZOOM_LVL_MIN, ZOOM_LVL_MAX); return std::clamp(value - (ZOOM_LVL_GUI - ZoomLevel::Normal), ZoomLevel::Min, ZoomLevel::Max);
} }
/** /**

View File

@ -13,39 +13,38 @@
#include "core/enum_type.hpp" #include "core/enum_type.hpp"
/** All zoom levels we know. */ /** All zoom levels we know. */
enum ZoomLevel : uint8_t { enum class ZoomLevel : uint8_t {
/* Our possible zoom-levels */ /* Our possible zoom-levels */
ZOOM_LVL_BEGIN = 0, ///< Begin for iteration. Begin = 0, ///< Begin for iteration.
ZOOM_LVL_IN_4X = 0, ///< Zoomed 4 times in. Min = Begin, ///< Minimum zoom level.
ZOOM_LVL_IN_2X, ///< Zoomed 2 times in. In4x = Begin, ///< Zoomed 4 times in.
ZOOM_LVL_NORMAL, ///< The normal zoom level. In2x, ///< Zoomed 2 times in.
ZOOM_LVL_OUT_2X, ///< Zoomed 2 times out. Normal, ///< The normal zoom level.
ZOOM_LVL_OUT_4X, ///< Zoomed 4 times out. Out2x, ///< Zoomed 2 times out.
ZOOM_LVL_OUT_8X, ///< Zoomed 8 times out. Out4x, ///< Zoomed 4 times out.
ZOOM_LVL_END, ///< End for iteration. Out8x, ///< Zoomed 8 times out.
Max = Out8x, ///< Maximum zoom level.
End, ///< End for iteration.
/* Here we define in which zoom viewports are */ /* Here we define in which zoom viewports are */
ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL, ///< Default zoom level for viewports. Viewport = Normal, ///< Default zoom level for viewports.
ZOOM_LVL_NEWS = ZOOM_LVL_NORMAL, ///< Default zoom level for the news messages. News = Normal, ///< Default zoom level for the news messages.
ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X, ///< Default zoom level for the industry view. Industry = Out2x, ///< Default zoom level for the industry view.
ZOOM_LVL_TOWN = ZOOM_LVL_NORMAL, ///< Default zoom level for the town view. Town = Normal, ///< Default zoom level for the town view.
ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL, ///< Default zoom level for the aircraft view. Aircraft = Normal, ///< Default zoom level for the aircraft view.
ZOOM_LVL_SHIP = ZOOM_LVL_NORMAL, ///< Default zoom level for the ship view. Ship = Normal, ///< Default zoom level for the ship view.
ZOOM_LVL_TRAIN = ZOOM_LVL_NORMAL, ///< Default zoom level for the train view. Train = Normal, ///< Default zoom level for the train view.
ZOOM_LVL_ROADVEH = ZOOM_LVL_NORMAL, ///< Default zoom level for the road vehicle view. RoadVehicle = Normal, ///< Default zoom level for the road vehicle view.
ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL, ///< Default zoom level for the world screen shot. WorldScreenshot = Normal, ///< Default zoom level for the world screen shot.
ZOOM_LVL_DETAIL = ZOOM_LVL_OUT_2X, ///< All zoom levels below or equal to this will result in details on the screen, like road-work, ... Detail = Out2x, ///< All zoom levels below or equal to this will result in details on the screen, like road-work, ...
ZOOM_LVL_TEXT_EFFECT = ZOOM_LVL_OUT_2X, ///< All zoom levels above this will not show text effects. TextEffect = Out2x, ///< All zoom levels above this will not show text effects.
ZOOM_LVL_MIN = ZOOM_LVL_IN_4X, ///< Minimum zoom level.
ZOOM_LVL_MAX = ZOOM_LVL_OUT_8X, ///< Maximum zoom level.
}; };
DECLARE_INCREMENT_DECREMENT_OPERATORS(ZoomLevel) DECLARE_INCREMENT_DECREMENT_OPERATORS(ZoomLevel)
DECLARE_ENUM_AS_SEQUENTIAL(ZoomLevel) DECLARE_ENUM_AS_SEQUENTIAL(ZoomLevel)
using ZoomLevels = EnumBitSet<ZoomLevel, uint8_t>; using ZoomLevels = EnumBitSet<ZoomLevel, uint8_t>;
static uint const ZOOM_BASE_SHIFT = static_cast<uint>(ZOOM_LVL_NORMAL); static const uint ZOOM_BASE_SHIFT = to_underlying(ZoomLevel::Normal);
static uint const ZOOM_BASE = 1U << ZOOM_BASE_SHIFT; static uint const ZOOM_BASE = 1U << ZOOM_BASE_SHIFT;
extern int _gui_scale; extern int _gui_scale;