From 76036abdb0d9cb2c971e5a69331c77872d38c56f Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 12 Dec 2013 21:47:54 +0400 Subject: [PATCH] Add configurable font shadow. --- minetest.conf.example | 3 +++ src/cguittfont/CGUITTFont.cpp | 12 +++++++++++- src/cguittfont/CGUITTFont.h | 3 ++- src/defaultsettings.cpp | 2 ++ src/main.cpp | 3 ++- 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index 4d6b76c84..3dbbd773e 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -205,12 +205,15 @@ # 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 diff --git a/src/cguittfont/CGUITTFont.cpp b/src/cguittfont/CGUITTFont.cpp index fb8199e21..b9c979090 100644 --- a/src/cguittfont/CGUITTFont.cpp +++ b/src/cguittfont/CGUITTFont.cpp @@ -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& 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); } } diff --git a/src/cguittfont/CGUITTFont.h b/src/cguittfont/CGUITTFont.h index 12e25e0f3..a58873da6 100644 --- a/src/cguittfont/CGUITTFont.h +++ b/src/cguittfont/CGUITTFont.h @@ -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 diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 106e5d9c2..9b407b1c3 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -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")); diff --git a/src/main.cpp b/src/main.cpp index d5a121e79..57c2f06a5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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()); }