diff --git a/textures/base/pack/fontdejavusansmono.png b/fonts/fontdejavusansmono.png similarity index 100% rename from textures/base/pack/fontdejavusansmono.png rename to fonts/fontdejavusansmono.png diff --git a/textures/base/pack/fontlucida.png b/fonts/fontlucida.png similarity index 100% rename from textures/base/pack/fontlucida.png rename to fonts/fontlucida.png diff --git a/minetest.conf.example b/minetest.conf.example index 29900b900..1d32bac8b 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -189,6 +189,9 @@ # File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab #serverlist_file = favoriteservers.txt +# Whether freetype fonts are used, requires freetype support to be compiled in +#freetype = true +# Path to TrueTypeFont or bitmap #font_path = fonts/liberationsans.ttf #font_size = 13 #mono_font_path = fonts/liberationmono.ttf diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 33adf102f..aac2516b5 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "filesys.h" +#include "config.h" void set_default_settings(Settings *settings) { @@ -141,10 +142,17 @@ void set_default_settings(Settings *settings) settings->setDefault("server_name", ""); settings->setDefault("server_description", ""); +#if USE_FREETYPE + settings->setDefault("freetype", "true"); settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "liberationsans.ttf")); settings->setDefault("font_size", "13"); settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "liberationmono.ttf")); settings->setDefault("mono_font_size", "13"); +#else + settings->setDefault("freetype", "false"); + settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "fontlucida.png")); + settings->setDefault("mono_font_path", porting::getDataPath("textures" DIR_DELIM "fontdejavusansmono.png")); +#endif // Server stuff // "map-dir" doesn't exist by default. diff --git a/src/guiChatConsole.cpp b/src/guiChatConsole.cpp index daec18efc..d8881dbd1 100644 --- a/src/guiChatConsole.cpp +++ b/src/guiChatConsole.cpp @@ -94,13 +94,17 @@ GUIChatConsole::GUIChatConsole( // load the font // FIXME should a custom texture_path be searched too? - #if USE_FREETYPE std::string font_name = g_settings->get("mono_font_path"); - u16 font_size = g_settings->getU16("mono_font_size"); - m_font = gui::CGUITTFont::createTTFont(env, font_name.c_str(), font_size); + #if USE_FREETYPE + m_use_freetype = g_settings->getBool("freetype"); + if (m_use_freetype) { + u16 font_size = g_settings->getU16("mono_font_size"); + m_font = gui::CGUITTFont::createTTFont(env, font_name.c_str(), font_size); + } else { + m_font = env->getFont(font_name.c_str()); + } #else - std::string font_name = "fontdejavusansmono.png"; - m_font = env->getFont(getTexturePath(font_name).c_str()); + m_font = env->getFont(font_name.c_str()); #endif if (m_font == NULL) { @@ -122,7 +126,8 @@ GUIChatConsole::GUIChatConsole( GUIChatConsole::~GUIChatConsole() { #if USE_FREETYPE - m_font->drop(); + if (m_use_freetype) + m_font->drop(); #endif } diff --git a/src/guiChatConsole.h b/src/guiChatConsole.h index 5991157b2..2bf45fdf4 100644 --- a/src/guiChatConsole.h +++ b/src/guiChatConsole.h @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_extrabloated.h" #include "chat.h" +#include "config.h" class Client; @@ -121,6 +122,9 @@ private: // font gui::IGUIFont* m_font; v2u32 m_fontsize; +#if USE_FREETYPE + bool m_use_freetype; +#endif }; diff --git a/src/guiTextInputMenu.cpp b/src/guiTextInputMenu.cpp index d5229f415..9285aaa81 100644 --- a/src/guiTextInputMenu.cpp +++ b/src/guiTextInputMenu.cpp @@ -20,6 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiTextInputMenu.h" #include "debug.h" #include "serialization.h" +#include "main.h" // for g_settings +#include "settings.h" #include #include #include @@ -109,11 +111,16 @@ void GUITextInputMenu::regenerateGui(v2u32 screensize) { core::rect rect(0, 0, 300, 30); rect = rect + v2s32(size.X/2-300/2, size.Y/2-30/2-25); + gui::IGUIElement *e; #if USE_FREETYPE - gui::IGUIElement *e = (gui::IGUIElement *) new gui::intlGUIEditBox(text.c_str(), true, Environment, this, 256, rect); - e->drop(); + if (g_settings->getBool("freetype")) { + e = (gui::IGUIElement *) new gui::intlGUIEditBox(text.c_str(), true, Environment, this, 256, rect); + e->drop(); + } else { + e = Environment->addEditBox(text.c_str(), rect, true, this, 256); + } #else - gui::IGUIElement *e = Environment->addEditBox(text.c_str(), rect, true, this, 256); + e = Environment->addEditBox(text.c_str(), rect, true, this, 256); #endif Environment->setFocus(e); diff --git a/src/main.cpp b/src/main.cpp index b3aa9c92f..f495a6ba2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1388,12 +1388,18 @@ int main(int argc, char *argv[]) guienv = device->getGUIEnvironment(); gui::IGUISkin* skin = guienv->getSkin(); - #if USE_FREETYPE std::string font_path = g_settings->get("font_path"); - u16 font_size = g_settings->getU16("font_size"); - gui::IGUIFont *font = gui::CGUITTFont::createTTFont(guienv, font_path.c_str(), font_size); + gui::IGUIFont *font; + bool use_freetype = g_settings->getBool("freetype"); + #if USE_FREETYPE + if (use_freetype) { + u16 font_size = g_settings->getU16("font_size"); + font = gui::CGUITTFont::createTTFont(guienv, font_path.c_str(), font_size); + } else { + font = guienv->getFont(font_path.c_str()); + } #else - gui::IGUIFont* font = guienv->getFont(getTexturePath("fontlucida.png").c_str()); + font = guienv->getFont(font_path.c_str()); #endif if(font) skin->setFont(font); @@ -1736,7 +1742,8 @@ int main(int argc, char *argv[]) device->drop(); #if USE_FREETYPE - font->drop(); + if (use_freetype) + font->drop(); #endif #endif // !SERVER