From 48772bc6d34b85a74841dd05ded18f85ed52c807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Fri, 27 Dec 2024 01:03:49 -0300 Subject: [PATCH] Minor fixes. --- include/eepp/graphics/fonttruetype.hpp | 5 +++-- src/eepp/graphics/fonttruetype.cpp | 9 +++++++-- src/tools/ecode/ecode.cpp | 5 ----- src/tools/ecode/plugins/lsp/lspdocumentclient.cpp | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/include/eepp/graphics/fonttruetype.hpp b/include/eepp/graphics/fonttruetype.hpp index db22f3aa8..c60d7e59c 100644 --- a/include/eepp/graphics/fonttruetype.hpp +++ b/include/eepp/graphics/fonttruetype.hpp @@ -146,8 +146,6 @@ class EE_API FontTrueType : public Font { void clearCache(); - void updateMonospaceState(); - protected: friend class Text; @@ -229,6 +227,7 @@ class EE_API FontTrueType : public Font { bool mEnableDynamicMonospace{ false }; bool mIsBold{ false }; bool mIsItalic{ false }; + mutable bool mIsMonospaceCompletePending{ false }; mutable UnorderedMap mClosestCharacterSize; mutable UnorderedMap mCodePointIndexCache; mutable UnorderedMap> mKeyCache; @@ -244,6 +243,8 @@ class EE_API FontTrueType : public Font { void updateFontInternalId(); bool setFontFace( void* face ); + + void updateMonospaceState() const; }; }} // namespace EE::Graphics diff --git a/src/eepp/graphics/fonttruetype.cpp b/src/eepp/graphics/fonttruetype.cpp index aabcbc0f5..0da21e790 100644 --- a/src/eepp/graphics/fonttruetype.cpp +++ b/src/eepp/graphics/fonttruetype.cpp @@ -1403,6 +1403,8 @@ bool FontTrueType::isColorEmojiFont() const { } bool FontTrueType::isMonospace() const { + if ( mIsMonospaceCompletePending ) + updateMonospaceState(); return mIsMonospaceComplete; } @@ -1422,10 +1424,13 @@ void FontTrueType::setBoldAdvanceSameAsRegular( bool boldAdvanceSameAsRegular ) mBoldAdvanceSameAsRegular = boldAdvanceSameAsRegular; } -void FontTrueType::updateMonospaceState() { +void FontTrueType::updateMonospaceState() const { mIsMonospaceComplete = mIsMonospace && !mUsingFallback; - if ( !Engine::isEngineRunning() ) + if ( !Engine::isEngineRunning() || !Engine::instance()->isMainThread() ) { + mIsMonospaceCompletePending = true; return; + } + mIsMonospaceCompletePending = false; if ( mIsMonospaceComplete && mFontBold != nullptr ) { mIsMonospaceComplete = mIsMonospaceComplete && mFontBold->isMonospace() && getGlyph( ' ', 10, false, false ).advance == diff --git a/src/tools/ecode/ecode.cpp b/src/tools/ecode/ecode.cpp index 71f6a2179..9f0c7310e 100644 --- a/src/tools/ecode/ecode.cpp +++ b/src/tools/ecode/ecode.cpp @@ -3661,11 +3661,6 @@ void App::init( const LogLevel& logLevel, std::string file, const Float& pidelDe return; } - FontManager::instance()->each( []( auto& font ) { - if ( font.second->getType() == FontType::TTF ) - static_cast( font.second )->updateMonospaceState(); - } ); - SceneManager::instance()->add( mUISceneNode ); setTheme( getThemePath() ); diff --git a/src/tools/ecode/plugins/lsp/lspdocumentclient.cpp b/src/tools/ecode/plugins/lsp/lspdocumentclient.cpp index 0159c77cc..e5522b2c2 100644 --- a/src/tools/ecode/plugins/lsp/lspdocumentclient.cpp +++ b/src/tools/ecode/plugins/lsp/lspdocumentclient.cpp @@ -378,7 +378,7 @@ void LSPDocumentClient::highlight() { [this, firstLine, lastLine]( UICodeEditor* editor ) { if ( editor->isVisible() && &editor->getDocument() == mDoc && editor->getVisibleRange().intersectsLineRange( firstLine, lastLine ) ) { - editor->invalidateDraw(); + editor->runOnMainThread( [editor] { editor->invalidateDraw(); } ); } } ); }