diff --git a/src/blitter/32bpp_optimized.cpp b/src/blitter/32bpp_optimized.cpp index 3a0c592c68..b80fb7914f 100644 --- a/src/blitter/32bpp_optimized.cpp +++ b/src/blitter/32bpp_optimized.cpp @@ -308,12 +308,12 @@ Sprite *Blitter_32bppOptimized::EncodeInternal(SpriteType sprite_type, const Spr ZoomLevel zoom_max; if (sprite_type == SpriteType::Font) { - zoom_min = ZOOM_LVL_MIN; - zoom_max = ZOOM_LVL_MIN; + zoom_min = ZoomLevel::Min; + zoom_max = ZoomLevel::Min; } else { zoom_min = _settings_client.gui.zoom_min; 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++) { diff --git a/src/blitter/32bpp_sse2.cpp b/src/blitter/32bpp_sse2.cpp index 3cf7279eea..7d0b4c9edc 100644 --- a/src/blitter/32bpp_sse2.cpp +++ b/src/blitter/32bpp_sse2.cpp @@ -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. * Then all RGBA then all MV. */ - ZoomLevel zoom_min = ZOOM_LVL_MIN; - ZoomLevel zoom_max = ZOOM_LVL_MIN; + ZoomLevel zoom_min = ZoomLevel::Min; + ZoomLevel zoom_max = ZoomLevel::Min; if (sprite_type != SpriteType::Font) { zoom_min = _settings_client.gui.zoom_min; 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. */ diff --git a/src/blitter/32bpp_sse_type.h b/src/blitter/32bpp_sse_type.h index 4f5f558ae6..78d05e67e3 100644 --- a/src/blitter/32bpp_sse_type.h +++ b/src/blitter/32bpp_sse_type.h @@ -28,7 +28,7 @@ #endif #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. typedef union alignas(16) um128i { diff --git a/src/blitter/8bpp_optimized.cpp b/src/blitter/8bpp_optimized.cpp index c4a1b223ac..576b4ce579 100644 --- a/src/blitter/8bpp_optimized.cpp +++ b/src/blitter/8bpp_optimized.cpp @@ -129,12 +129,12 @@ Sprite *Blitter_8bppOptimized::Encode(SpriteType sprite_type, const SpriteLoader ZoomLevel zoom_max; if (sprite_type == SpriteType::Font) { - zoom_min = ZOOM_LVL_MIN; - zoom_max = ZOOM_LVL_MIN; + zoom_min = ZoomLevel::Min; + zoom_max = ZoomLevel::Min; } else { zoom_min = _settings_client.gui.zoom_min; 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++) { diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index 8b5d9ae554..8003394e3a 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -313,16 +313,16 @@ static bool ConZoomToLevel(std::span argv) IConsolePrint(CC_HELP, "Set the current zoom level of the main viewport."); IConsolePrint(CC_HELP, "Usage: 'zoomto '."); - if (ZOOM_LVL_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)); + if (ZoomLevel::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 { - 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) { - IConsolePrint(CC_HELP, "The highest zoom-out level allowed by current client settings is {}.", std::min(_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, ZoomLevel::Max)); } 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; @@ -330,8 +330,8 @@ static bool ConZoomToLevel(std::span argv) auto level = ParseInteger>(argv[1]); if (level.has_value()) { auto zoom_lvl = static_cast(*level); - if (!IsInsideMM(zoom_lvl, ZOOM_LVL_BEGIN, ZOOM_LVL_END)) { - IConsolePrint(CC_ERROR, "Invalid zoom level. Valid range is {} to {}.", ZOOM_LVL_MIN, ZOOM_LVL_MAX); + if (!IsInsideMM(zoom_lvl, ZoomLevel::Begin, ZoomLevel::End)) { + 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)) { IConsolePrint(CC_ERROR, "Current client settings limit zoom levels to range {} to {}.", _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); } else { diff --git a/src/fontcache/freetypefontcache.cpp b/src/fontcache/freetypefontcache.cpp index f6496249f4..80bb2cda6d 100644 --- a/src/fontcache/freetypefontcache.cpp +++ b/src/fontcache/freetypefontcache.cpp @@ -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 */ SpriteLoader::SpriteCollection spritecollection; - SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; - sprite.AllocateData(ZOOM_LVL_MIN, static_cast(width) * height); + SpriteLoader::Sprite &sprite = spritecollection[ZoomLevel::Min]; + sprite.AllocateData(ZoomLevel::Min, static_cast(width) * height); sprite.colours = SpriteComponent::Palette; if (aa) sprite.colours.Set(SpriteComponent::Alpha); sprite.width = width; diff --git a/src/gfx.cpp b/src/gfx.cpp index c781b8b8d7..9ba1ab9de3 100644 --- a/src/gfx.cpp +++ b/src/gfx.cpp @@ -54,11 +54,11 @@ static uint8_t _stringwidth_table[FS_END][224]; ///< Cache containing width of o 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 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 _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) int _gui_scale = MIN_INTERFACE_SCALE; ///< GUI scale, 100 is 100%. 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. * - * @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 top Minimum Y (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 oleft = left; - if (dpi->zoom != ZOOM_LVL_MIN) return; + if (dpi->zoom != ZoomLevel::Min) return; if (left > right || top > bottom) return; if (right < dpi->left || left >= dpi->left + dpi->width) return; if (bottom < dpi->top || top >= dpi->top + dpi->height) return; @@ -200,7 +200,7 @@ static std::vector MakePolygonSegments(std::span shape * 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. * @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 colour An 8 bit palette index (FILLRECT_OPAQUE and FILLRECT_CHECKER) or a recolour spritenumber (FILLRECT_RECOLOUR). * @param mode @@ -212,7 +212,7 @@ void GfxFillPolygon(std::span shape, int colour, FillRectMode mode) { Blitter *blitter = BlitterFactory::GetCurrentBlitter(); const DrawPixelInfo *dpi = _cur_dpi; - if (dpi->zoom != ZOOM_LVL_MIN) return; + if (dpi->zoom != ZoomLevel::Min) return; std::vector 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(); const DrawPixelInfo *o = _cur_dpi; - n->zoom = ZOOM_LVL_MIN; + n->zoom = ZoomLevel::Min; assert(width > 0); assert(height > 0); @@ -1782,12 +1782,12 @@ void UpdateGUIZoom() _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_zoom = static_cast(new_zoom); + _font_zoom = new_zoom; /* Ensure the gui_zoom is clamped between min/max. */ new_zoom = Clamp(new_zoom, _settings_client.gui.zoom_min, _settings_client.gui.zoom_max); - _gui_zoom = static_cast(new_zoom); + _gui_zoom = new_zoom; } /** diff --git a/src/graph_gui.cpp b/src/graph_gui.cpp index 38d1876301..cf3bf7d7de 100644 --- a/src/graph_gui.cpp +++ b/src/graph_gui.cpp @@ -116,7 +116,7 @@ static std::unique_ptr MakeNWidgetCompanyLines() { auto vert = std::make_unique(NWidContainerFlag::EqualSize); 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++) { auto panel = std::make_unique(WWT_PANEL, COLOUR_BROWN, widnum); diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp index d4bcdce7f9..9186aa0a8d 100644 --- a/src/industry_gui.cpp +++ b/src/industry_gui.cpp @@ -825,7 +825,7 @@ public: this->InitNested(window_number); NWidgetViewport *nvp = this->GetWidget(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); if (!i->IsCargoProduced()) this->DisableWidget(WID_IV_GRAPH); diff --git a/src/main_gui.cpp b/src/main_gui.cpp index 0444f84c6c..11432809a5 100644 --- a/src/main_gui.cpp +++ b/src/main_gui.cpp @@ -219,7 +219,7 @@ struct MainWindow : Window ResizeWindow(this, _screen.width, _screen.height); NWidgetViewport *nvp = this->GetWidget(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(this, WID_M_VIEWPORT, 0, CompanyMask{}, 2); this->refresh_timeout.Reset(); diff --git a/src/newgrf_badge_gui.cpp b/src/newgrf_badge_gui.cpp index dfe288219c..a65b06ff11 100644 --- a/src/newgrf_badge_gui.cpp +++ b/src/newgrf_badge_gui.cpp @@ -44,7 +44,7 @@ static Dimension GetBadgeMaximalDimension(BadgeClassID class_index, GrfSpecFeatu PalSpriteID ps = GetBadgeSprite(badge, feature, std::nullopt, PAL_NONE); 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; } diff --git a/src/newgrf_debug_gui.cpp b/src/newgrf_debug_gui.cpp index cf2fcb7b07..aed301a430 100644 --- a/src/newgrf_debug_gui.cpp +++ b/src/newgrf_debug_gui.cpp @@ -822,7 +822,7 @@ struct SpriteAlignerWindow : Window { Scrollbar *vscroll = nullptr; std::map 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 crosshair; 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) { /* 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); /* Oh yes, we assume there is at least one normal sprite! */ @@ -1071,8 +1071,8 @@ struct SpriteAlignerWindow : Window { break; default: - if (IsInsideBS(widget, WID_SA_ZOOM, ZOOM_LVL_END)) { - SpriteAlignerWindow::zoom = ZoomLevel(widget - WID_SA_ZOOM); + if (IsInsideBS(widget, WID_SA_ZOOM, to_underlying(ZoomLevel::End))) { + SpriteAlignerWindow::zoom = static_cast(widget - WID_SA_ZOOM); this->InvalidateData(0, true); } break; @@ -1109,7 +1109,7 @@ struct SpriteAlignerWindow : Window { } 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->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), EndContainer(), 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(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(ZOOM_LVL_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(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(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::In4x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_MIN), 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(ZoomLevel::Normal)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_NORMAL), 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(ZoomLevel::Out4x)), SetStringTip(STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X), 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(), diff --git a/src/news_gui.cpp b/src/news_gui.cpp index 0e85c551c1..bfc3dee3be 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -395,9 +395,9 @@ struct NewsWindow : Window { NWidgetViewport *nvp = this->GetWidget(WID_N_VIEWPORT); if (nvp != nullptr) { if (std::holds_alternative(ni->ref1)) { - nvp->InitializeViewport(this, std::get(ni->ref1), ScaleZoomGUI(ZOOM_LVL_NEWS)); + nvp->InitializeViewport(this, std::get(ni->ref1), ScaleZoomGUI(ZoomLevel::News)); } 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::InColour)) { diff --git a/src/openttd.cpp b/src/openttd.cpp index 7e1e086239..a07b6b95c5 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -760,7 +760,7 @@ int openttd_main(std::span arguments) InitializeSpriteSorter(); /* 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 */ UpdateGUIZoom(); diff --git a/src/os/macosx/font_osx.cpp b/src/os/macosx/font_osx.cpp index 39dca55194..6588eb7507 100644 --- a/src/os/macosx/font_osx.cpp +++ b/src/os/macosx/font_osx.cpp @@ -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"); SpriteLoader::SpriteCollection spritecollection; - SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; - sprite.AllocateData(ZOOM_LVL_MIN, width * height); + SpriteLoader::Sprite &sprite = spritecollection[ZoomLevel::Min]; + sprite.AllocateData(ZoomLevel::Min, width * height); sprite.colours = SpriteComponent::Palette; if (use_aa) sprite.colours.Set(SpriteComponent::Alpha); sprite.width = width; diff --git a/src/os/windows/font_win32.cpp b/src/os/windows/font_win32.cpp index 7bda89fb36..9db5797654 100644 --- a/src/os/windows/font_win32.cpp +++ b/src/os/windows/font_win32.cpp @@ -225,8 +225,8 @@ void Win32FontCache::ClearFontCache() /* GDI has rendered the glyph, now we allocate a sprite and copy the image into it. */ SpriteLoader::SpriteCollection spritecollection; - SpriteLoader::Sprite &sprite = spritecollection[ZOOM_LVL_MIN]; - sprite.AllocateData(ZOOM_LVL_MIN, width * height); + SpriteLoader::Sprite &sprite = spritecollection[ZoomLevel::Min]; + sprite.AllocateData(ZoomLevel::Min, width * height); sprite.colours = SpriteComponent::Palette; if (aa) sprite.colours.Set(SpriteComponent::Alpha); sprite.width = width; diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index b685e37ef0..35da2d5217 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -1658,7 +1658,7 @@ static void DrawRoadBits(TileInfo *ti) DrawRoadCatenary(ti); /* 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 */ Roadside roadside = GetRoadside(ti->tile); diff --git a/src/saveload/misc_sl.cpp b/src/saveload/misc_sl.cpp index 78b160314f..4094211f88 100644 --- a/src/saveload/misc_sl.cpp +++ b/src/saveload/misc_sl.cpp @@ -43,7 +43,7 @@ void SaveViewportBeforeSaveGame() /* Ensure saved position is clearly invalid. */ _saved_scrollpos_x = INT_MAX; _saved_scrollpos_y = INT_MAX; - _saved_scrollpos_zoom = ZOOM_LVL_END; + _saved_scrollpos_zoom = ZoomLevel::End; } else { _saved_scrollpos_x = w->viewport->scrollpos_x; _saved_scrollpos_y = w->viewport->scrollpos_y; @@ -61,12 +61,12 @@ void ResetViewportAfterLoadGame() w->viewport->dest_scrollpos_y = _saved_scrollpos_y; 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_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 (_settings_client.gui.zoom_max != ZOOM_LVL_MIN) { + /* 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 != ZoomLevel::Min) { /* Ensure zoom level is allowed */ while (vp.zoom < _settings_client.gui.zoom_min) DoZoomInOutWindow(ZOOM_OUT, w); while (vp.zoom > _settings_client.gui.zoom_max) DoZoomInOutWindow(ZOOM_IN, w); diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 967d065e21..a2779fa58a 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -94,7 +94,7 @@ static void LargeWorldCallback(Viewport &vp, void *buf, uint y, uint pitch, uint .width = vp.width, .height = static_cast(n), .pitch = static_cast(pitch), - .zoom = ZOOM_LVL_WORLD_SCREENSHOT + .zoom = ZoomLevel::WorldScreenshot }; /* 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(pitch), .height = static_cast(n), .pitch = static_cast(pitch), - .zoom = ZOOM_LVL_MIN + .zoom = ZoomLevel::Min }); AutoRestoreBackup disable_anim_backup(_screen_disable_anim, true); 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); /* 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 south_tile{Map::Size() - 1}; @@ -237,7 +237,7 @@ static Viewport SetupScreenshotViewport(ScreenshotType t, uint32_t width = 0, ui break; } 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(); 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_height = w->viewport->virtual_height; } else { - vp.virtual_width = width << vp.zoom; - vp.virtual_height = height << vp.zoom; + vp.virtual_width = width << to_underlying(vp.zoom); + vp.virtual_height = height << to_underlying(vp.zoom); } /* Compute pixel coordinates */ diff --git a/src/sound.cpp b/src/sound.cpp index a079c43e47..a9bc44c0f3 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -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_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[] = { 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( sound, panning, - _vol_factor_by_zoom[vp.zoom] + _vol_factor_by_zoom[to_underlying(vp.zoom)] ); return; } diff --git a/src/spritecache.cpp b/src/spritecache.cpp index d272ccf2eb..744c0304e5 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -338,7 +338,7 @@ static bool PadSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels sprite /* Get minimum top left corner coordinates. */ int min_xoffs = 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)) { min_xoffs = std::min(min_xoffs, ScaleByZoom(sprite[zoom].x_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. */ int max_width = 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)) { 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)); @@ -363,7 +363,7 @@ static bool PadSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels sprite } /* 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)) { auto &cur_sprite = sprite[zoom]; /* 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 */ 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; first_avail = zoom; - if (zoom != ZOOM_LVL_MIN) { - if (!ResizeSpriteIn(sprite, zoom, ZOOM_LVL_MIN)) return false; - sprite_avail.Set(ZOOM_LVL_MIN); + if (zoom != ZoomLevel::Min) { + if (!ResizeSpriteIn(sprite, zoom, ZoomLevel::Min)) return false; + sprite_avail.Set(ZoomLevel::Min); } break; } @@ -400,12 +400,12 @@ static bool ResizeSprites(SpriteLoader::SpriteCollection &sprite, ZoomLevels spr if (!PadSprites(sprite, sprite_avail, encoder)) return false; /* Create other missing zoom levels */ - for (ZoomLevel zoom = ZOOM_LVL_BEGIN; zoom != ZOOM_LVL_END; zoom++) { - if (zoom == ZOOM_LVL_MIN) continue; + for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) { + if (zoom == ZoomLevel::Min) continue; if (sprite_avail.Test(zoom)) { /* 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]; assert(dest_sprite.width == UnScaleByZoom(root_sprite.width, 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. */ 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); } } @@ -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); } - if (sprite_type == SpriteType::Font && _font_zoom != ZOOM_LVL_MIN) { - /* Make ZOOM_LVL_MIN be ZOOM_LVL_GUI */ - sprite[ZOOM_LVL_MIN] = sprite[_font_zoom]; + if (sprite_type == SpriteType::Font && _font_zoom != ZoomLevel::Min) { + /* Make ZoomLevel::Min be ZOOM_LVL_GUI */ + sprite[ZoomLevel::Min] = sprite[_font_zoom]; } return encoder->Encode(sprite_type, sprite, allocator); @@ -605,11 +605,11 @@ void ReadGRFSpriteOffsets(SpriteFile &file) if (length > 0) { uint8_t zoom = file.ReadByte(); 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_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); } } diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp index db9ee7299c..ed69e63b79 100644 --- a/src/spriteloader/grf.cpp +++ b/src/spriteloader/grf.cpp @@ -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 */ 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]; 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 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? */ 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); is_wanted_zoom_lvl = true; - ZoomLevel zoom_min = sprite_type == SpriteType::Font ? ZOOM_LVL_MIN : _settings_client.gui.sprite_zoom_min; - if (zoom_min >= ZOOM_LVL_IN_2X && - HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_2X_32BPP : SCCF_ALLOW_ZOOM_MIN_2X_PAL) && zoom_lvl < ZOOM_LVL_IN_2X) { + ZoomLevel zoom_min = sprite_type == SpriteType::Font ? ZoomLevel::Min : _settings_client.gui.sprite_zoom_min; + if (zoom_min >= ZoomLevel::In2x && + 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; } - if (zoom_min >= ZOOM_LVL_NORMAL && - HasBit(control_flags, load_32bpp ? SCCF_ALLOW_ZOOM_MIN_1X_32BPP : SCCF_ALLOW_ZOOM_MIN_1X_PAL) && zoom_lvl < 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 < ZoomLevel::Normal) { is_wanted_zoom_lvl = false; } } else { @@ -310,7 +310,7 @@ static ZoomLevels LoadSpriteV2(SpriteLoader::SpriteCollection &sprite, SpriteFil } 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)) { /* We already have this zoom level, skip sprite. */ diff --git a/src/spriteloader/makeindexed.cpp b/src/spriteloader/makeindexed.cpp index 89a0bade2f..fd5cb2c631 100644 --- a/src/spriteloader/makeindexed.cpp +++ b/src/spriteloader/makeindexed.cpp @@ -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); - 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]); } diff --git a/src/spriteloader/spriteloader.hpp b/src/spriteloader/spriteloader.hpp index 2803f37869..8b8da72384 100644 --- a/src/spriteloader/spriteloader.hpp +++ b/src/spriteloader/spriteloader.hpp @@ -31,13 +31,13 @@ using SpriteComponents = EnumBitSet class SpriteCollMap { - std::array data; + std::array data; public: - inline constexpr T &operator[](const ZoomLevel &zoom) { return this->data[zoom]; } - inline constexpr const T &operator[](const ZoomLevel &zoom) const { 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[to_underlying(zoom)]; } - T &Root() { return this->data[ZOOM_LVL_MIN]; } - const T &Root() const { return this->data[ZOOM_LVL_MIN]; } + T &Root() { return this->data[to_underlying(ZoomLevel::Min)]; } + const T &Root() const { return this->data[to_underlying(ZoomLevel::Min)]; } }; /** Interface for the loader of our sprites. */ diff --git a/src/table/settings/gui_settings.ini b/src/table/settings/gui_settings.ini index 7bf3453334..3d9ee1b75b 100644 --- a/src/table/settings/gui_settings.ini +++ b/src/table/settings/gui_settings.ini @@ -260,9 +260,9 @@ cat = SC_EXPERT var = gui.zoom_min type = SLE_UINT8 flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown -def = ZOOM_LVL_MIN -min = ZOOM_LVL_MIN -max = ZOOM_LVL_NORMAL +def = to_underlying(ZoomLevel::Min) +min = to_underlying(ZoomLevel::Min) +max = to_underlying(ZoomLevel::Normal) str = STR_CONFIG_SETTING_ZOOM_MIN strhelp = STR_CONFIG_SETTING_ZOOM_MIN_HELPTEXT strval = STR_CONFIG_SETTING_ZOOM_LVL_MIN @@ -273,9 +273,9 @@ startup = true var = gui.zoom_max type = SLE_UINT8 flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown -def = ZOOM_LVL_MAX -min = ZOOM_LVL_OUT_2X -max = ZOOM_LVL_MAX +def = to_underlying(ZoomLevel::Max) +min = to_underlying(ZoomLevel::Out2x) +max = to_underlying(ZoomLevel::Max) str = STR_CONFIG_SETTING_ZOOM_MAX strhelp = STR_CONFIG_SETTING_ZOOM_MAX_HELPTEXT strval = STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X @@ -286,9 +286,9 @@ startup = true var = gui.sprite_zoom_min type = SLE_UINT8 flags = SettingFlag::NotInSave, SettingFlag::NoNetworkSync, SettingFlag::GuiDropdown -def = ZOOM_LVL_MIN -min = ZOOM_LVL_MIN -max = ZOOM_LVL_NORMAL +def = to_underlying(ZoomLevel::Min) +min = to_underlying(ZoomLevel::Min) +max = to_underlying(ZoomLevel::Normal) str = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN strhelp = STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT strval = STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN diff --git a/src/texteff.cpp b/src/texteff.cpp index 152ab89181..8855e3a4f6 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -101,10 +101,10 @@ IntervalTimer move_all_text_effects_interval = {std::chrono::millis continue; } - te.MarkDirty(ZOOM_LVL_TEXT_EFFECT); + te.MarkDirty(ZoomLevel::TextEffect); te.duration -= count; 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) { /* 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; 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) { if (!te.IsValid()) continue; diff --git a/src/town_gui.cpp b/src/town_gui.cpp index b0bcfed5d1..bb1d25b9ae 100644 --- a/src/town_gui.cpp +++ b/src/town_gui.cpp @@ -378,7 +378,7 @@ public: this->flags.Set(WindowFlag::DisableVpScroll); NWidgetViewport *nvp = this->GetWidget(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 */ this->SetWidgetDisabledState(WID_TV_CHANGE_NAME, _networking && !_network_server); diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 844f94c98d..8313be7a18 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2873,10 +2873,10 @@ static_assert(VEH_AIRCRAFT == 3); /** Zoom levels for vehicle views indexed by vehicle type. */ static const ZoomLevel _vehicle_view_zoom_levels[] = { - ZOOM_LVL_TRAIN, - ZOOM_LVL_ROADVEH, - ZOOM_LVL_SHIP, - ZOOM_LVL_AIRCRAFT, + ZoomLevel::Train, + ZoomLevel::RoadVehicle, + ZoomLevel::Ship, + ZoomLevel::Aircraft, }; /* Constants for geometry of vehicle view viewport */ diff --git a/src/video/opengl.cpp b/src/video/opengl.cpp index 8acfa5e7a0..dec8b118dc 100644 --- a/src/video/opengl.cpp +++ b/src/video/opengl.cpp @@ -1405,7 +1405,7 @@ OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCol this->x_offs = root_sprite.x_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); (void)_glGetError(); @@ -1440,9 +1440,9 @@ OpenGLSprite::OpenGLSprite(SpriteType sprite_type, const SpriteLoader::SpriteCol } /* 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]; - 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); diff --git a/src/video/opengl.h b/src/video/opengl.h index 0b0532683d..7d3b59db75 100644 --- a/src/video/opengl.h +++ b/src/video/opengl.h @@ -105,7 +105,7 @@ public: /* SpriteEncoder */ 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; }; diff --git a/src/viewport.cpp b/src/viewport.cpp index 879339ba0e..015f52dc7c 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1481,7 +1481,7 @@ static void ViewportAddKdtreeSigns(DrawPixelInfo *dpi) }); /* 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 */ 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 { - 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. */ 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++) { - zoomlevels[zoom].left = this->center - ScaleByZoom(half_width, zoom); - zoomlevels[zoom].top = this->top - ScaleByZoom(1, zoom); - zoomlevels[zoom].right = this->center + ScaleByZoom(half_width, zoom); - zoomlevels[zoom].bottom = this->top + ScaleByZoom(height, zoom); + for (ZoomLevel zoom = ZoomLevel::Begin; zoom != ZoomLevel::End; zoom++) { + zoomlevels[to_underlying(zoom)].left = this->center - ScaleByZoom(half_width, zoom); + zoomlevels[to_underlying(zoom)].top = this->top - ScaleByZoom(1, zoom); + zoomlevels[to_underlying(zoom)].right = this->center + ScaleByZoom(half_width, zoom); + zoomlevels[to_underlying(zoom)].bottom = this->top + ScaleByZoom(height, zoom); } for (const Window *w : Window::Iterate()) { @@ -1544,7 +1544,7 @@ void ViewportSign::MarkDirty(ZoomLevel maxzoom) const Viewport &vp = *w->viewport; if (vp.zoom <= maxzoom) { 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); } } @@ -1820,7 +1820,7 @@ void ViewportDoDraw(const Viewport &vp, int left, int top, int right, int bottom DrawPixelInfo dp = _vd.dpi; ZoomLevel zoom = _vd.dpi.zoom; - dp.zoom = ZOOM_LVL_MIN; + dp.zoom = ZoomLevel::Min; dp.width = UnScaleByZoom(dp.width, zoom); dp.height = UnScaleByZoom(dp.height, zoom); 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) { /* Rounding wrt. zoom-out level */ - right += (1 << vp.zoom) - 1; - bottom += (1 << vp.zoom) - 1; + right += (1 << to_underlying(vp.zoom)) - 1; + bottom += (1 << to_underlying(vp.zoom)) - 1; right -= vp.virtual_left; 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). - * @param left Left 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. #ZOOM_LVL_MIN) - * @param right Right 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. #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. #ZoomLevel::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. #ZoomLevel::Min) * @return true if at least one viewport has a dirty block * @ingroup dirty */ @@ -2240,7 +2240,7 @@ void SetSelectionRed(bool b) */ 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_height = ScaleByZoom(WidgetDimensions::scaled.fullbevel.top + GetCharacterHeight(small ? FS_SMALL : FS_NORMAL) + WidgetDimensions::scaled.fullbevel.bottom, vp.zoom); diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index 3d4271e08d..635be527cc 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -57,7 +57,7 @@ public: this->InitNested(window_number); NWidgetViewport *nvp = this->GetWidget(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); } diff --git a/src/viewport_type.h b/src/viewport_type.h index 6a3c7cbd35..6e7f8b2dc7 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -53,7 +53,7 @@ struct ViewportSign { auto operator<=>(const ViewportSign &) const = default; 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 */ diff --git a/src/waypoint_gui.cpp b/src/waypoint_gui.cpp index c8165f64c4..7d61c1af01 100644 --- a/src/waypoint_gui.cpp +++ b/src/waypoint_gui.cpp @@ -97,7 +97,7 @@ public: this->flags.Set(WindowFlag::DisableVpScroll); NWidgetViewport *nvp = this->GetWidget(WID_W_VIEWPORT); - nvp->InitializeViewport(this, this->GetCenterTile(), ScaleZoomGUI(ZOOM_LVL_VIEWPORT)); + nvp->InitializeViewport(this, this->GetCenterTile(), ScaleZoomGUI(ZoomLevel::Viewport)); this->OnInvalidateData(0); } diff --git a/src/widget.cpp b/src/widget.cpp index eddbc807b6..7bb3842059 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -68,7 +68,7 @@ static inline Dimension ScaleGUITrad(const Dimension &dim) Dimension GetScaledSpriteSize(SpriteID sprid) { Point offset; - Dimension d = GetSpriteSize(sprid, &offset, ZOOM_LVL_NORMAL); + Dimension d = GetSpriteSize(sprid, &offset, ZoomLevel::Normal); d.width -= offset.x; d.height -= offset.y; return ScaleGUITrad(d); @@ -3443,7 +3443,7 @@ std::unique_ptr MakeCompanyButtonRows(WidgetID widget_first, Widget std::unique_ptr hor = nullptr; // Storage for buttons in one row. 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.height += WidgetDimensions::unscaled.matrix.Vertical(); diff --git a/src/widgets/newgrf_debug_widget.h b/src/widgets/newgrf_debug_widget.h index b4dffcaad2..1ba6524281 100644 --- a/src/widgets/newgrf_debug_widget.h +++ b/src/widgets/newgrf_debug_widget.h @@ -37,8 +37,8 @@ enum SpriteAlignerWidgets : WidgetID { WID_SA_PICKER, ///< Sprite picker. WID_SA_LIST, ///< Queried 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_LAST = WID_SA_ZOOM + ZOOM_LVL_END - 1, ///< Marker for last zoom level button. + WID_SA_ZOOM, ///< Zoom level buttons (from ZoomLevel::Begin to ZoomLevel::Max). + 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_CENTRE, ///< Toggle centre sprite. WID_SA_CROSSHAIR, ///< Toggle crosshair. diff --git a/src/window.cpp b/src/window.cpp index c1cd7f30cd..650ab1591a 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -913,7 +913,7 @@ static void DrawOverlappedWindow(Window *w, int left, int top, int right, int bo dp->top = top - w->top; dp->pitch = _screen.pitch; dp->dst_ptr = BlitterFactory::GetCurrentBlitter()->MoveTo(_screen.dst_ptr, left, top); - dp->zoom = ZOOM_LVL_MIN; + dp->zoom = ZoomLevel::Min; w->OnPaint(); } diff --git a/src/zoom_func.h b/src/zoom_func.h index 2bc4eb3ac2..5c0ba18bcf 100644 --- a/src/zoom_func.h +++ b/src/zoom_func.h @@ -13,7 +13,7 @@ #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 * @param value value to shift * @param zoom zoom level to shift to @@ -21,11 +21,11 @@ */ 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 * @param value value to shift * @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) { - 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) { - return zoom < 0 ? UnScaleByZoom(value, ZoomLevel(-zoom)) : ScaleByZoom(value, ZoomLevel(zoom)); + return zoom < 0 ? UnScaleByZoom(value, static_cast(-zoom)) : ScaleByZoom(value, static_cast(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 zoom zoom level to shift to * @return shifted value */ 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 zoom zoom level to shift to * @return shifted value */ inline int UnScaleByZoomLower(int value, ZoomLevel zoom) { - return value >> zoom; + return value >> to_underlying(zoom); } /** * 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). */ inline int UnScaleGUI(int value) @@ -86,7 +86,7 @@ inline int UnScaleGUI(int 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) { - 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); } /** diff --git a/src/zoom_type.h b/src/zoom_type.h index 8ee8a8f99e..4a026c29c1 100644 --- a/src/zoom_type.h +++ b/src/zoom_type.h @@ -13,39 +13,38 @@ #include "core/enum_type.hpp" /** All zoom levels we know. */ -enum ZoomLevel : uint8_t { +enum class ZoomLevel : uint8_t { /* Our possible zoom-levels */ - ZOOM_LVL_BEGIN = 0, ///< Begin for iteration. - ZOOM_LVL_IN_4X = 0, ///< Zoomed 4 times in. - ZOOM_LVL_IN_2X, ///< Zoomed 2 times in. - ZOOM_LVL_NORMAL, ///< The normal zoom level. - ZOOM_LVL_OUT_2X, ///< Zoomed 2 times out. - ZOOM_LVL_OUT_4X, ///< Zoomed 4 times out. - ZOOM_LVL_OUT_8X, ///< Zoomed 8 times out. - ZOOM_LVL_END, ///< End for iteration. + Begin = 0, ///< Begin for iteration. + Min = Begin, ///< Minimum zoom level. + In4x = Begin, ///< Zoomed 4 times in. + In2x, ///< Zoomed 2 times in. + Normal, ///< The normal zoom level. + Out2x, ///< Zoomed 2 times out. + Out4x, ///< Zoomed 4 times out. + Out8x, ///< Zoomed 8 times out. + Max = Out8x, ///< Maximum zoom level. + End, ///< End for iteration. /* Here we define in which zoom viewports are */ - ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL, ///< Default zoom level for viewports. - ZOOM_LVL_NEWS = ZOOM_LVL_NORMAL, ///< Default zoom level for the news messages. - ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X, ///< Default zoom level for the industry view. - ZOOM_LVL_TOWN = ZOOM_LVL_NORMAL, ///< Default zoom level for the town view. - ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL, ///< Default zoom level for the aircraft view. - ZOOM_LVL_SHIP = ZOOM_LVL_NORMAL, ///< Default zoom level for the ship view. - ZOOM_LVL_TRAIN = ZOOM_LVL_NORMAL, ///< Default zoom level for the train view. - ZOOM_LVL_ROADVEH = ZOOM_LVL_NORMAL, ///< Default zoom level for the road vehicle view. - ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL, ///< Default zoom level for the world screen shot. + Viewport = Normal, ///< Default zoom level for viewports. + News = Normal, ///< Default zoom level for the news messages. + Industry = Out2x, ///< Default zoom level for the industry view. + Town = Normal, ///< Default zoom level for the town view. + Aircraft = Normal, ///< Default zoom level for the aircraft view. + Ship = Normal, ///< Default zoom level for the ship view. + Train = Normal, ///< Default zoom level for the train view. + RoadVehicle = Normal, ///< Default zoom level for the road vehicle view. + 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, ... - ZOOM_LVL_TEXT_EFFECT = ZOOM_LVL_OUT_2X, ///< 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. + Detail = Out2x, ///< All zoom levels below or equal to this will result in details on the screen, like road-work, ... + TextEffect = Out2x, ///< All zoom levels above this will not show text effects. }; DECLARE_INCREMENT_DECREMENT_OPERATORS(ZoomLevel) DECLARE_ENUM_AS_SEQUENTIAL(ZoomLevel) using ZoomLevels = EnumBitSet; -static uint const ZOOM_BASE_SHIFT = static_cast(ZOOM_LVL_NORMAL); +static const uint ZOOM_BASE_SHIFT = to_underlying(ZoomLevel::Normal); static uint const ZOOM_BASE = 1U << ZOOM_BASE_SHIFT; extern int _gui_scale;