diff --git a/src/font/font_settings.hpp b/src/font/font_settings.hpp index cae11caf8..b84433980 100644 --- a/src/font/font_settings.hpp +++ b/src/font/font_settings.hpp @@ -40,6 +40,9 @@ private: * the colored border will take priority. */ bool m_colored_border; + /* True if the border to draw should be thin */ + bool m_thin_border; + /** If true, characters will have right alignment when rendering, for RTL * language. */ bool m_rtl; @@ -62,12 +65,14 @@ public: /** Constructor. It will initialize all members with default values if no * parameter is given. */ FontSettings(bool black_border = false, bool colored_border = false, + bool thin_border = false, bool rtl = false, float scale = 1.0f, bool shadow = false, const video::SColor& shadow_color = video::SColor(0, 0, 0, 0), const video::SColor& border_color = video::SColor(0, 0, 0, 0)) { m_black_border = black_border; m_colored_border = colored_border; + m_thin_border = thin_border; m_rtl = rtl; m_scale = scale; m_shadow = shadow; @@ -104,6 +109,9 @@ public: * \param border If it's enabled. */ void setColoredBorder(bool border ) { m_colored_border = border; } // ------------------------------------------------------------------------ + /** Set whether the text outline should be thin or not. */ + void setThinBorder(bool thin) { m_thin_border = thin; } + // ------------------------------------------------------------------------ /** Set the color of border (used when a non-black border is requested). * \param col The color of border to be set. */ void setBorderColor(const video::SColor &col) { m_border_color = col; } @@ -117,6 +125,9 @@ public: /** Return if black border is enabled. */ bool useColoredBorder() const { return m_colored_border; } // ------------------------------------------------------------------------ + /** Return if the border should be thin or not. */ + bool useThinBorder() const { return m_thin_border; } + // ------------------------------------------------------------------------ /** Set right text alignment for RTL language. * \param rtl If it's enabled. */ void setRTL(bool rtl) { m_rtl = rtl; } diff --git a/src/font/font_with_face.cpp b/src/font/font_with_face.cpp index bdb484d2a..8ef8c52f8 100644 --- a/src/font/font_with_face.cpp +++ b/src/font/font_with_face.cpp @@ -676,9 +676,14 @@ void FontWithFace::render(const core::stringw& text, m_fallback_font->m_spritebank->getTexture(tex_id) : m_spritebank->getTexture(tex_id)); - for (int x_delta = -2; x_delta <= 2; x_delta++) + const bool thin_border = font_settings ? + font_settings->useThinBorder() : false; + + int thickness = (thin_border) ? 1 : 2; + + for (int x_delta = -thickness; x_delta <= thickness; x_delta++) { - for (int y_delta = -2; y_delta <= 2; y_delta++) + for (int y_delta = -thickness; y_delta <= thickness; y_delta++) { if (x_delta == 0 || y_delta == 0) continue; draw2DImage(texture, dest + core::position2d diff --git a/src/guiengine/scalable_font.cpp b/src/guiengine/scalable_font.cpp index 58f7049f6..5dd81eea1 100644 --- a/src/guiengine/scalable_font.cpp +++ b/src/guiengine/scalable_font.cpp @@ -69,6 +69,11 @@ void ScalableFont::setColoredBorder(const irr::video::SColor &col) m_font_settings->setBorderColor(col); } // setColoredBorder // ---------------------------------------------------------------------------- +void ScalableFont::setThinBorder(bool thin) +{ + m_font_settings->setThinBorder(thin); +} // setThinBorder +// ---------------------------------------------------------------------------- void ScalableFont::disableColoredBorder() { m_font_settings->setColoredBorder(false); diff --git a/src/guiengine/scalable_font.hpp b/src/guiengine/scalable_font.hpp index 1e76a849b..56fcbc1a8 100644 --- a/src/guiengine/scalable_font.hpp +++ b/src/guiengine/scalable_font.hpp @@ -61,6 +61,8 @@ public: // ------------------------------------------------------------------------ void setColoredBorder(const irr::video::SColor &col); // ------------------------------------------------------------------------ + void setThinBorder(bool thin); + // ------------------------------------------------------------------------ void disableColoredBorder(); // ------------------------------------------------------------------------ void updateRTL(); diff --git a/src/states_screens/race_gui_base.cpp b/src/states_screens/race_gui_base.cpp index e13e91f48..5830ce528 100644 --- a/src/states_screens/race_gui_base.cpp +++ b/src/states_screens/race_gui_base.cpp @@ -683,7 +683,7 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin) return; int x_base = 10; - int y_base = 20; + int y_base = 25; unsigned int y_space = irr_driver->getActualScreenSize().Height - bottom_margin - y_base; // Special case : when 3 players play, use 4th window to display such stuff if (race_manager->getIfEmptyScreenSpaceExists()) @@ -835,7 +835,11 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin) pos_top.LowerRightCorner = pos_top.UpperLeftCorner; //I18N: When some GlobalPlayerIcons are hidden, write "Top 10" to show it + font->setBlackBorder(true); + font->setThinBorder(true); font->draw(_("Top %i", position-1 ), pos_top, color); + font->setThinBorder(false); + font->setBlackBorder(false); break; } @@ -851,8 +855,12 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin) } else { + font->setBlackBorder(true); + font->setThinBorder(true); font->draw(info.m_text, pos, info.m_color, false, false, NULL, true/*ignore RTL*/); + font->setThinBorder(false); + font->setBlackBorder(false); } } @@ -861,8 +869,12 @@ void RaceGUIBase::drawGlobalPlayerIcons(int bottom_margin) core::rect pos(x+ICON_PLAYER_WIDTH, y+5, x+ICON_PLAYER_WIDTH, y+5); core::stringw s(info.special_title.c_str()); + font->setBlackBorder(true); + font->setThinBorder(true); font->draw(s.c_str(), pos, info.m_color, false, false, NULL, true /* ignore RTL */); + font->setThinBorder(false); + font->setBlackBorder(false); } int w = kart->getController()