Make freetype usage configureable by a setting
authorPilzAdam <pilzadam@minetest.net>
Sun, 4 Aug 2013 18:18:56 +0000 (20:18 +0200)
committerPilzAdam <pilzadam@minetest.net>
Sun, 4 Aug 2013 18:35:14 +0000 (20:35 +0200)
fonts/fontdejavusansmono.png [new file with mode: 0644]
fonts/fontlucida.png [new file with mode: 0644]
minetest.conf.example
src/defaultsettings.cpp
src/guiChatConsole.cpp
src/guiChatConsole.h
src/guiTextInputMenu.cpp
src/main.cpp
textures/base/pack/fontdejavusansmono.png [deleted file]
textures/base/pack/fontlucida.png [deleted file]

diff --git a/fonts/fontdejavusansmono.png b/fonts/fontdejavusansmono.png
new file mode 100644 (file)
index 0000000..02ad413
Binary files /dev/null and b/fonts/fontdejavusansmono.png differ
diff --git a/fonts/fontlucida.png b/fonts/fontlucida.png
new file mode 100644 (file)
index 0000000..ab7bb70
Binary files /dev/null and b/fonts/fontlucida.png differ
index 29900b900f6c6cff727168921217b56f82e82a32..1d32bac8bb4a9446ce7cc2f58fff45401a8086fe 100644 (file)
 # 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
index 33adf102f5389d49bcfe900f439ee432a2197c7c..aac2516b5b41a772f57cd185b350738626ead361 100644 (file)
@@ -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.
index daec18efc91901ec57b0585682effcc8bd8debf8..d8881dbd1a77304ab257a73ef7afe486338ca4a4 100644 (file)
@@ -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
 }
 
index 5991157b276bc06003f8c5b4c6bbc622655fd2bd..2bf45fdf4704becfb955e56be09db2da8c8a5e9c 100644 (file)
@@ -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
 };
 
 
index d5229f4157fb1760de885dd2834bbc8717607261..9285aaa817d3ab7c6c3ce819fac619fd17cc33f1 100644 (file)
@@ -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 <string>
 #include <IGUICheckBox.h>
 #include <IGUIEditBox.h>
@@ -109,11 +111,16 @@ void GUITextInputMenu::regenerateGui(v2u32 screensize)
        {
                core::rect<s32> 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);
 
index b3aa9c92f7a826be5fcab7793b593fa573a19e0c..f495a6ba253f5780e6953b9de3552d1a469f3e91 100644 (file)
@@ -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
diff --git a/textures/base/pack/fontdejavusansmono.png b/textures/base/pack/fontdejavusansmono.png
deleted file mode 100644 (file)
index 02ad413..0000000
Binary files a/textures/base/pack/fontdejavusansmono.png and /dev/null differ
diff --git a/textures/base/pack/fontlucida.png b/textures/base/pack/fontlucida.png
deleted file mode 100644 (file)
index ab7bb70..0000000
Binary files a/textures/base/pack/fontlucida.png and /dev/null differ