forked from Mirrorlandia_minetest/minetest
Improve TTF support for pixel-style fonts (#11848)
This commit is contained in:
parent
14c7fae378
commit
4a16ab3585
@ -900,9 +900,15 @@ font_shadow (Font shadow) int 1
|
|||||||
# Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.
|
# Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.
|
||||||
font_shadow_alpha (Font shadow alpha) int 127 0 255
|
font_shadow_alpha (Font shadow alpha) int 127 0 255
|
||||||
|
|
||||||
# Font size of the default font in point (pt).
|
# Font size of the default font where 1 unit = 1 pixel at 96 DPI
|
||||||
font_size (Font size) int 16 1
|
font_size (Font size) int 16 1
|
||||||
|
|
||||||
|
# For pixel-style fonts that do not scale well, this ensures that font sizes used
|
||||||
|
# with this font will always be divisible by this value, in pixels. For instance,
|
||||||
|
# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
|
||||||
|
# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
|
||||||
|
font_size_divisible_by (Font size divisible by) int 1 1
|
||||||
|
|
||||||
# Path to the default font.
|
# Path to the default font.
|
||||||
# If “freetype” setting is enabled: Must be a TrueType font.
|
# If “freetype” setting is enabled: Must be a TrueType font.
|
||||||
# If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
|
# If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
|
||||||
@ -913,8 +919,14 @@ font_path_bold (Bold font path) filepath fonts/Arimo-Bold.ttf
|
|||||||
font_path_italic (Italic font path) filepath fonts/Arimo-Italic.ttf
|
font_path_italic (Italic font path) filepath fonts/Arimo-Italic.ttf
|
||||||
font_path_bold_italic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf
|
font_path_bold_italic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf
|
||||||
|
|
||||||
# Font size of the monospace font in point (pt).
|
# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI
|
||||||
mono_font_size (Monospace font size) int 15 1
|
mono_font_size (Monospace font size) int 16 1
|
||||||
|
|
||||||
|
# For pixel-style fonts that do not scale well, this ensures that font sizes used
|
||||||
|
# with this font will always be divisible by this value, in pixels. For instance,
|
||||||
|
# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
|
||||||
|
# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
|
||||||
|
mono_font_size_divisible_by (Monospace font size divisible by) int 1 1
|
||||||
|
|
||||||
# Path to the monospace font.
|
# Path to the monospace font.
|
||||||
# If “freetype” setting is enabled: Must be a TrueType font.
|
# If “freetype” setting is enabled: Must be a TrueType font.
|
||||||
|
@ -1055,6 +1055,12 @@
|
|||||||
# type: int min: 1
|
# type: int min: 1
|
||||||
# font_size = 16
|
# font_size = 16
|
||||||
|
|
||||||
|
# For pixel-style fonts that do not scale well, this ensures that font sizes used
|
||||||
|
# with this font will always be divisible by this value, in pixels. For instance,
|
||||||
|
# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
|
||||||
|
# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
|
||||||
|
# font_size_divisible_by = 1
|
||||||
|
|
||||||
# Path to the default font.
|
# Path to the default font.
|
||||||
# If “freetype” setting is enabled: Must be a TrueType font.
|
# If “freetype” setting is enabled: Must be a TrueType font.
|
||||||
# If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
|
# If “freetype” setting is disabled: Must be a bitmap or XML vectors font.
|
||||||
@ -1073,7 +1079,13 @@
|
|||||||
|
|
||||||
# Font size of the monospace font in point (pt).
|
# Font size of the monospace font in point (pt).
|
||||||
# type: int min: 1
|
# type: int min: 1
|
||||||
# mono_font_size = 15
|
# mono_font_size = 16
|
||||||
|
|
||||||
|
# For pixel-style fonts that do not scale well, this ensures that font sizes used
|
||||||
|
# with this font will always be divisible by this value, in pixels. For instance,
|
||||||
|
# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
|
||||||
|
# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
|
||||||
|
# mono_font_size_divisible_by = 1
|
||||||
|
|
||||||
# Path to the monospace font.
|
# Path to the monospace font.
|
||||||
# If “freetype” setting is enabled: Must be a TrueType font.
|
# If “freetype” setting is enabled: Must be a TrueType font.
|
||||||
|
@ -66,11 +66,13 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) :
|
|||||||
g_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL);
|
||||||
g_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL);
|
||||||
g_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL);
|
||||||
|
g_settings->registerChangedCallback("font_size_divisible_by", font_setting_changed, NULL);
|
||||||
g_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL);
|
||||||
g_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL);
|
||||||
|
g_settings->registerChangedCallback("mono_font_size_divisible_by", font_setting_changed, NULL);
|
||||||
g_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL);
|
||||||
g_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL);
|
g_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL);
|
||||||
}
|
}
|
||||||
@ -252,15 +254,18 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
|
|||||||
if (spec.italic)
|
if (spec.italic)
|
||||||
setting_suffix.append("_italic");
|
setting_suffix.append("_italic");
|
||||||
|
|
||||||
u32 size = std::floor(RenderingEngine::getDisplayDensity() *
|
u32 size = std::max<u32>(spec.size * RenderingEngine::getDisplayDensity() *
|
||||||
g_settings->getFloat("gui_scaling") * spec.size);
|
g_settings->getFloat("gui_scaling"), 1);
|
||||||
|
|
||||||
if (size == 0) {
|
// Constrain the font size to a certain multiple, if necessary
|
||||||
errorstream << "FontEngine: attempt to use font size 0" << std::endl;
|
u16 divisible_by = g_settings->getU16(setting_prefix + "font_size_divisible_by");
|
||||||
errorstream << " display density: " << RenderingEngine::getDisplayDensity() << std::endl;
|
if (divisible_by > 1) {
|
||||||
abort();
|
size = std::max<u32>(
|
||||||
|
std::round((double)size / divisible_by) * divisible_by, divisible_by);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sanity_check(size != 0);
|
||||||
|
|
||||||
u16 font_shadow = 0;
|
u16 font_shadow = 0;
|
||||||
u16 font_shadow_alpha = 0;
|
u16 font_shadow_alpha = 0;
|
||||||
g_settings->getU16NoEx(setting_prefix + "font_shadow", font_shadow);
|
g_settings->getU16NoEx(setting_prefix + "font_shadow", font_shadow);
|
||||||
|
@ -313,10 +313,12 @@ void set_default_settings()
|
|||||||
settings->setDefault("font_italic", "false");
|
settings->setDefault("font_italic", "false");
|
||||||
settings->setDefault("font_shadow", "1");
|
settings->setDefault("font_shadow", "1");
|
||||||
settings->setDefault("font_shadow_alpha", "127");
|
settings->setDefault("font_shadow_alpha", "127");
|
||||||
|
settings->setDefault("font_size_divisible_by", "1");
|
||||||
settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "Cousine-Regular.ttf"));
|
settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "Cousine-Regular.ttf"));
|
||||||
settings->setDefault("mono_font_path_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-Italic.ttf"));
|
settings->setDefault("mono_font_path_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-Italic.ttf"));
|
||||||
settings->setDefault("mono_font_path_bold", porting::getDataPath("fonts" DIR_DELIM "Cousine-Bold.ttf"));
|
settings->setDefault("mono_font_path_bold", porting::getDataPath("fonts" DIR_DELIM "Cousine-Bold.ttf"));
|
||||||
settings->setDefault("mono_font_path_bold_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-BoldItalic.ttf"));
|
settings->setDefault("mono_font_path_bold_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-BoldItalic.ttf"));
|
||||||
|
settings->setDefault("mono_font_size_divisible_by", "1");
|
||||||
settings->setDefault("fallback_font_path", porting::getDataPath("fonts" DIR_DELIM "DroidSansFallbackFull.ttf"));
|
settings->setDefault("fallback_font_path", porting::getDataPath("fonts" DIR_DELIM "DroidSansFallbackFull.ttf"));
|
||||||
|
|
||||||
std::string font_size_str = std::to_string(TTF_DEFAULT_FONT_SIZE);
|
std::string font_size_str = std::to_string(TTF_DEFAULT_FONT_SIZE);
|
||||||
|
Loading…
Reference in New Issue
Block a user