summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/fontcache.cpp7
-rw-r--r--src/fontcache.h2
-rw-r--r--src/gfx.cpp1
-rw-r--r--src/settings.cpp6
-rw-r--r--src/settings_gui.cpp3
-rw-r--r--src/spritecache.cpp18
-rw-r--r--src/spriteloader/grf.cpp6
7 files changed, 30 insertions, 13 deletions
diff --git a/src/fontcache.cpp b/src/fontcache.cpp
index 45a1b28dc..c8aca9852 100644
--- a/src/fontcache.cpp
+++ b/src/fontcache.cpp
@@ -18,6 +18,7 @@
#include "strings_func.h"
#include "zoom_type.h"
#include "gfx_layout.h"
+#include "zoom_func.h"
#include "table/sprites.h"
#include "table/control_codes.h"
@@ -80,6 +81,7 @@ public:
virtual void ClearFontCache();
virtual const Sprite *GetGlyph(GlyphID key);
virtual uint GetGlyphWidth(GlyphID key);
+ virtual int GetHeight() const;
virtual bool GetDrawGlyphShadow();
virtual GlyphID MapCharToGlyph(WChar key) { assert(IsPrintable(key)); return SPRITE_GLYPH | key; }
virtual const void *GetFontTable(uint32 tag, size_t &length) { length = 0; return NULL; }
@@ -184,6 +186,11 @@ uint SpriteFontCache::GetGlyphWidth(GlyphID key)
return SpriteExists(sprite) ? GetSprite(sprite, ST_FONT)->width + (this->fs != FS_NORMAL) : 0;
}
+int SpriteFontCache::GetHeight() const
+{
+ return UnScaleByZoom(4 * this->height, ZOOM_LVL_GUI);
+}
+
bool SpriteFontCache::GetDrawGlyphShadow()
{
return false;
diff --git a/src/fontcache.h b/src/fontcache.h
index 804ad2c4b..8caf4f1bd 100644
--- a/src/fontcache.h
+++ b/src/fontcache.h
@@ -44,7 +44,7 @@ public:
* Get the height of the font.
* @return The height of the font.
*/
- inline int GetHeight() const { return this->height; }
+ virtual int GetHeight() const { return this->height; }
/**
* Get the ascender value of the font.
diff --git a/src/gfx.cpp b/src/gfx.cpp
index cd14fdcfd..6db886dda 100644
--- a/src/gfx.cpp
+++ b/src/gfx.cpp
@@ -1139,6 +1139,7 @@ void LoadStringWidthTable(bool monospace)
}
}
+ ClearFontCache();
ReInitAllWindows();
}
diff --git a/src/settings.cpp b/src/settings.cpp
index 58b2000d1..e2baed5ba 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1066,14 +1066,14 @@ static bool InvalidateVehTimetableWindow(int32 p1)
static bool ZoomMinMaxChanged(int32 p1)
{
extern void ConstrainAllViewportsZoom();
+ ConstrainAllViewportsZoom();
+ GfxClearSpriteCache();
if (_settings_client.gui.zoom_min > _gui_zoom) {
/* Restrict GUI zoom if it is no longer available. */
_gui_zoom = _settings_client.gui.zoom_min;
UpdateCursorSize();
- ReInitAllWindows();
+ LoadStringWidthTable();
}
- ConstrainAllViewportsZoom();
- GfxClearSpriteCache();
return true;
}
diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp
index 03dc618b9..5bfcb04ce 100644
--- a/src/settings_gui.cpp
+++ b/src/settings_gui.cpp
@@ -528,9 +528,10 @@ struct GameOptionsWindow : Window {
break;
case WID_GO_GUI_ZOOM_DROPDOWN:
+ GfxClearSpriteCache();
_gui_zoom = (ZoomLevel)(ZOOM_LVL_OUT_4X - index);
UpdateCursorSize();
- ReInitAllWindows();
+ LoadStringWidthTable();
break;
case WID_GO_BASE_GRF_DROPDOWN:
diff --git a/src/spritecache.cpp b/src/spritecache.cpp
index c41b8f51c..764616e8f 100644
--- a/src/spritecache.cpp
+++ b/src/spritecache.cpp
@@ -438,12 +438,20 @@ static void *ReadSprite(const SpriteCache *sc, SpriteID id, SpriteType sprite_ty
return s;
}
- if (sprite_type == ST_NORMAL) {
- if (!ResizeSprites(sprite, sprite_avail, file_slot, sc->id)) {
- if (id == SPR_IMG_QUERY) usererror("Okay... something went horribly wrong. I couldn't resize the fallback sprite. What should I do?");
- return (void*)GetRawSprite(SPR_IMG_QUERY, ST_NORMAL, allocator);
- }
+ if (!ResizeSprites(sprite, sprite_avail, file_slot, sc->id)) {
+ if (id == SPR_IMG_QUERY) usererror("Okay... something went horribly wrong. I couldn't resize the fallback sprite. What should I do?");
+ return (void*)GetRawSprite(SPR_IMG_QUERY, ST_NORMAL, allocator);
}
+
+ if (sprite->type == ST_FONT && ZOOM_LVL_GUI != ZOOM_LVL_NORMAL) {
+ /* Make ZOOM_LVL_GUI be ZOOM_LVL_NORMAL */
+ sprite[ZOOM_LVL_NORMAL] = sprite[ZOOM_LVL_GUI];
+ sprite->width = sprite[ZOOM_LVL_NORMAL].width;
+ sprite->height = sprite[ZOOM_LVL_NORMAL].height;
+ sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
+ sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
+ }
+
return BlitterFactory::GetCurrentBlitter()->Encode(sprite, allocator);
}
diff --git a/src/spriteloader/grf.cpp b/src/spriteloader/grf.cpp
index a45bd0fa8..b21e70b1d 100644
--- a/src/spriteloader/grf.cpp
+++ b/src/spriteloader/grf.cpp
@@ -230,7 +230,7 @@ uint8 LoadSpriteV1(SpriteLoader::Sprite *sprite, uint8 file_slot, size_t file_po
/* Type 0xFF indicates either a colourmap or some other non-sprite info; we do not handle them here */
if (type == 0xFF) return 0;
- ZoomLevel zoom_lvl = (sprite_type == ST_NORMAL) ? ZOOM_LVL_OUT_4X : ZOOM_LVL_NORMAL;
+ ZoomLevel zoom_lvl = (sprite_type != ST_MAPGEN) ? ZOOM_LVL_OUT_4X : ZOOM_LVL_NORMAL;
sprite[zoom_lvl].height = FioReadByte();
sprite[zoom_lvl].width = FioReadWord();
@@ -275,8 +275,8 @@ uint8 LoadSpriteV2(SpriteLoader::Sprite *sprite, uint8 file_slot, size_t file_po
byte colour = type & SCC_MASK;
byte zoom = FioReadByte();
- if (colour != 0 && (load_32bpp ? colour != SCC_PAL : colour == SCC_PAL) && (sprite_type == ST_NORMAL ? zoom < lengthof(zoom_lvl_map) : zoom == 0)) {
- ZoomLevel zoom_lvl = (sprite_type == ST_NORMAL) ? zoom_lvl_map[zoom] : ZOOM_LVL_NORMAL;
+ if (colour != 0 && (load_32bpp ? colour != SCC_PAL : colour == SCC_PAL) && (sprite_type != ST_MAPGEN ? zoom < lengthof(zoom_lvl_map) : zoom == 0)) {
+ ZoomLevel zoom_lvl = (sprite_type != ST_MAPGEN) ? zoom_lvl_map[zoom] : ZOOM_LVL_NORMAL;
if (HasBit(loaded_sprites, zoom_lvl)) {
/* We already have this zoom level, skip sprite. */