Add configurable font shadow.
authorIlya Zhuravlev <zhuravlevilya@ya.ru>
Thu, 12 Dec 2013 17:47:54 +0000 (21:47 +0400)
committerIlya Zhuravlev <zhuravlevilya@ya.ru>
Thu, 12 Dec 2013 17:47:54 +0000 (21:47 +0400)
minetest.conf.example
src/cguittfont/CGUITTFont.cpp
src/cguittfont/CGUITTFont.h
src/defaultsettings.cpp
src/main.cpp

index 4d6b76c846522ea9fb98d077035de4aea7965952..3dbbd773ebc51980ac90c81234372dc25902da55 100644 (file)
 # Path to TrueTypeFont or bitmap
 #font_path = fonts/liberationsans.ttf
 #font_size = 13
+# Font shadow offset, if 0 then shadow will not be drawn.
+#font_shadow = 1
 #mono_font_path = fonts/liberationmono.ttf
 #mono_font_size = 13
 
 # This font will be used for certain languages
 #fallback_font_path = fonts/DroidSansFallbackFull.ttf
 #fallback_font_size = 13
+#fallback_font_shadow = 1
 
 #
 # Server stuff
index fb8199e2104791f7644a4cdddf9b6073015f0eba..b9c979090b64cce974faddced142cb92b6016598 100644 (file)
@@ -199,7 +199,7 @@ void SGUITTGlyph::unload()
 
 //////////////////////
 
-CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias, const bool transparency)
+CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias, const bool transparency, const u32 shadow)
 {
        if (!c_libraryLoaded)
        {
@@ -216,6 +216,8 @@ CGUITTFont* CGUITTFont::createTTFont(IGUIEnvironment *env, const io::path& filen
                return 0;
        }
 
+       font->shadow_offset = shadow;
+
        return font;
 }
 
@@ -625,6 +627,14 @@ void CGUITTFont::draw(const core::stringw& text, const core::rect<s32>& position
                CGUITTGlyphPage* page = n->getValue();
 
                if (!use_transparency) color.color |= 0xff000000;
+
+               if (shadow_offset) {
+                       for (size_t i = 0; i < page->render_positions.size(); ++i)
+                               page->render_positions[i] += core::vector2di(shadow_offset, shadow_offset);
+                       Driver->draw2DImageBatch(page->texture, page->render_positions, page->render_source_rects, clip, video::SColor(255, 0, 0, 0), true);
+                       for (size_t i = 0; i < page->render_positions.size(); ++i)
+                               page->render_positions[i] -= core::vector2di(shadow_offset, shadow_offset);
+               }
                Driver->draw2DImageBatch(page->texture, page->render_positions, page->render_source_rects, clip, color, true);
        }
 }
index 12e25e0f3fa3c9983ab96619d3bd3f0c95eedac0..a58873da6804e0c0d663d244309bacd4e736e579 100644 (file)
@@ -207,7 +207,7 @@ namespace gui
                        //! \param antialias set the use_monochrome (opposite to antialias) flag
                        //! \param transparency set the use_transparency flag
                        //! \return Returns a pointer to a CGUITTFont.  Will return 0 if the font failed to load.
-                       static CGUITTFont* createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
+                       static CGUITTFont* createTTFont(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true, const u32 shadow = 0);
                        static CGUITTFont* createTTFont(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
                        static CGUITTFont* create(IGUIEnvironment *env, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
                        static CGUITTFont* create(IrrlichtDevice *device, const io::path& filename, const u32 size, const bool antialias = true, const bool transparency = true);
@@ -369,6 +369,7 @@ namespace gui
                        s32 GlobalKerningWidth;
                        s32 GlobalKerningHeight;
                        core::ustring Invisible;
+                       u32 shadow_offset;
        };
 
 } // end namespace gui
index 106e5d9c27a7b7c160203b46abe619f4388a228a..9b407b1c36326207f3fe58ad20807f10f80d2d0e 100644 (file)
@@ -153,10 +153,12 @@ void set_default_settings(Settings *settings)
        settings->setDefault("freetype", "true");
        settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "liberationsans.ttf"));
        settings->setDefault("font_size", "13");
+       settings->setDefault("font_shadow", "1");
        settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "liberationmono.ttf"));
        settings->setDefault("mono_font_size", "13");
        settings->setDefault("fallback_font_path", porting::getDataPath("fonts" DIR_DELIM "DroidSansFallbackFull.ttf"));
        settings->setDefault("fallback_font_size", "13");
+       settings->setDefault("fallback_font_shadow", "1");
 #else
        settings->setDefault("freetype", "false");
        settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "fontlucida.png"));
index d5a121e79fda6ead0405ac54903e1b0eed553bb4..57c2f06a545fc5f487cc7f5e4e84a227c224a282 100644 (file)
@@ -1481,7 +1481,8 @@ int main(int argc, char *argv[])
                        fallback = "fallback_";
                u16 font_size = g_settings->getU16(fallback + "font_size");
                font_path = g_settings->get(fallback + "font_path");
-               font = gui::CGUITTFont::createTTFont(guienv, font_path.c_str(), font_size);
+               u32 font_shadow = g_settings->getU16(fallback + "font_shadow");
+               font = gui::CGUITTFont::createTTFont(guienv, font_path.c_str(), font_size, true, true, font_shadow);
        } else {
                font = guienv->getFont(font_path.c_str());
        }