diff --git a/include/eepp/graphics/fonttruetype.hpp b/include/eepp/graphics/fonttruetype.hpp index ed3adc4d7..bb18b05d8 100644 --- a/include/eepp/graphics/fonttruetype.hpp +++ b/include/eepp/graphics/fonttruetype.hpp @@ -89,6 +89,10 @@ class EE_API FontTrueType : public Font { void setEnableFallbackFont( bool enableFallbackFont ); + bool getEnableDynamicMonospace() const; + + void setEnableDynamicMonospace( bool enableDynamicMonospace ); + protected: explicit FontTrueType( const std::string& FontName ); @@ -158,9 +162,10 @@ class EE_API FontTrueType : public Font { bool mBoldAdvanceSameAsRegular; bool mIsColorEmojiFont{ false }; bool mIsEmojiFont{ false }; - bool mIsMonospace{ false }; + mutable bool mIsMonospace{ false }; bool mEnableEmojiFallback{ true }; bool mEnableFallbackFont{ true }; + bool mEnableDynamicMonospace{ false }; mutable std::map mClosestCharacterSize; mutable std::map mCodePointIndexCache; diff --git a/src/eepp/graphics/fonttruetype.cpp b/src/eepp/graphics/fonttruetype.cpp index cfb38dc8e..8318295dd 100644 --- a/src/eepp/graphics/fonttruetype.cpp +++ b/src/eepp/graphics/fonttruetype.cpp @@ -417,6 +417,8 @@ const Glyph& FontTrueType::getGlyph( Uint32 codePoint, unsigned int characterSiz FontManager::instance()->getFallbackFont()->getType() == FontType::TTF ) { FontTrueType* fallbackFont = static_cast( FontManager::instance()->getFallbackFont() ); + if ( mIsMonospace && mEnableDynamicMonospace ) + mIsMonospace = false; return fallbackFont->getGlyph( codePoint, characterSize, bold, outlineThickness, getPage( characterSize ), maxWidth ); } @@ -509,6 +511,8 @@ GlyphDrawable* FontTrueType::getGlyphDrawable( Uint32 codePoint, unsigned int ch if ( 0 != tGlyphIndex ) { glyphIndex = tGlyphIndex; fontInternalId = fontFallback->getFontInternalId(); + if ( mIsMonospace && mEnableDynamicMonospace ) + mIsMonospace = false; } else { glyphIndex = getGlyphIndex( codePoint ); } @@ -1100,6 +1104,14 @@ FontTrueType::Page& FontTrueType::getPage( unsigned int characterSize ) const { return *pageIt->second; } +bool FontTrueType::getEnableDynamicMonospace() const { + return mEnableDynamicMonospace; +} + +void FontTrueType::setEnableDynamicMonospace( bool enableDynamicMonospace ) { + mEnableDynamicMonospace = enableDynamicMonospace; +} + bool FontTrueType::getEnableFallbackFont() const { return mEnableFallbackFont; } diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index daae8d567..08a292ad5 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -256,7 +256,7 @@ void App::openFontDialog( std::string& fontPath, bool loadingMonoFont ) { auto loadMonoFont = [&, newPath]( FontTrueType* fontMono ) { fontPath = newPath; mFontMono = fontMono; - mFontMono->setEnableFallbackFont( false ); + mFontMono->setEnableDynamicMonospace( true ); mFontMono->setBoldAdvanceSameAsRegular( true ); if ( mSplitter ) { mSplitter->forEachEditor( @@ -2391,7 +2391,7 @@ void App::init( const LogLevel& logLevel, std::string file, const Float& pidelDe mFont = loadFont( "sans-serif", mConfig.ui.serifFont, "fonts/NotoSans-Regular.ttf" ); mFontMono = loadFont( "monospace", mConfig.ui.monospaceFont, "fonts/DejaVuSansMono.ttf" ); if ( mFontMono ) { - mFontMono->setEnableFallbackFont( false ); + mFontMono->setEnableDynamicMonospace( true ); mFontMono->setBoldAdvanceSameAsRegular( true ); }