diff --git a/include/Nazara/Utility/Font.hpp b/include/Nazara/Utility/Font.hpp index babe7d5ce..bf904347b 100644 --- a/include/Nazara/Utility/Font.hpp +++ b/include/Nazara/Utility/Font.hpp @@ -113,7 +113,7 @@ class NAZARA_UTILITY_API NzFont : public NzRefCounted, public NzResource, NzNonC }; NazaraSignal(OnFontAtlasChanged, const NzFont*); //< Args: me - NazaraSignal(OnFontAtlasLayerChanged, const NzFont*); //< Args: me + NazaraSignal(OnFontAtlasLayerChanged, const NzFont*, NzAbstractImage*, NzAbstractImage*); //< Args: me, old layer, new layer NazaraSignal(OnFontDestroy, const NzFont*); //< Args: me NazaraSignal(OnFontGlyphCacheCleared, const NzFont*); //< Args: me NazaraSignal(OnFontKerningCacheCleared, const NzFont*); //< Args: me diff --git a/include/Nazara/Utility/SimpleTextDrawer.hpp b/include/Nazara/Utility/SimpleTextDrawer.hpp index ae2da4bf7..c69cc1a25 100644 --- a/include/Nazara/Utility/SimpleTextDrawer.hpp +++ b/include/Nazara/Utility/SimpleTextDrawer.hpp @@ -43,6 +43,7 @@ class NAZARA_UTILITY_API NzSimpleTextDrawer : public NzAbstractTextDrawer static NzSimpleTextDrawer Draw(NzFont* font, const NzString& str, unsigned int characterSize, nzUInt32 style = nzTextStyle_Regular, const NzColor& color = NzColor::White); private: + void OnFontAtlasLayerChanged(const NzFont* font, NzAbstractImage* oldLayer, NzAbstractImage* newLayer); void OnFontInvalidated(const NzFont* font); void OnFontRelease(const NzFont* object); void UpdateGlyphs() const; diff --git a/src/Nazara/Utility/Font.cpp b/src/Nazara/Utility/Font.cpp index e723cf03c..5aad86245 100644 --- a/src/Nazara/Utility/Font.cpp +++ b/src/Nazara/Utility/Font.cpp @@ -454,7 +454,7 @@ void NzFont::OnAtlasLayerChange(const NzAbstractAtlas* atlas, NzAbstractImage* o #endif // Pour faciliter le travail des ressources qui nous écoutent - OnFontAtlasLayerChanged(this); + OnFontAtlasLayerChanged(this, oldLayer, newLayer); } void NzFont::OnAtlasRelease(const NzAbstractAtlas* atlas) diff --git a/src/Nazara/Utility/SimpleTextDrawer.cpp b/src/Nazara/Utility/SimpleTextDrawer.cpp index 2c0ceb889..2373f722a 100644 --- a/src/Nazara/Utility/SimpleTextDrawer.cpp +++ b/src/Nazara/Utility/SimpleTextDrawer.cpp @@ -115,9 +115,9 @@ void NzSimpleTextDrawer::SetFont(NzFont* font) if (m_font) { m_atlasChangedSlot.Connect(m_font->OnFontAtlasChanged, this, &NzSimpleTextDrawer::OnFontInvalidated); - m_atlasLayerChangedSlot.Connect(m_font->OnFontAtlasLayerChanged, this, &NzSimpleTextDrawer::OnFontInvalidated); + m_atlasLayerChangedSlot.Connect(m_font->OnFontAtlasLayerChanged, this, &NzSimpleTextDrawer::OnFontAtlasLayerChanged); m_fontReleaseSlot.Connect(m_font->OnFontRelease, this, &NzSimpleTextDrawer::OnFontRelease); - m_glyphCacheClearedSlot.Connect(m_font->OnFontAtlasChanged, this, &NzSimpleTextDrawer::OnFontInvalidated); + m_glyphCacheClearedSlot.Connect(m_font->OnFontGlyphCacheCleared, this, &NzSimpleTextDrawer::OnFontInvalidated); } else { @@ -168,6 +168,27 @@ NzSimpleTextDrawer NzSimpleTextDrawer::Draw(NzFont* font, const NzString& str, u return drawer; } +void NzSimpleTextDrawer::OnFontAtlasLayerChanged(const NzFont* font, NzAbstractImage* oldLayer, NzAbstractImage* newLayer) +{ + NazaraUnused(font); + + #ifdef NAZARA_DEBUG + if (m_font != font) + { + NazaraInternalError("Not listening to " + NzString::Pointer(font)); + return; + } + #endif + + // Update atlas layer pointer + // Note: This can happend while updating + for (Glyph& glyph : m_glyphs) + { + if (glyph.atlas == oldLayer) + glyph.atlas = newLayer; + } +} + void NzSimpleTextDrawer::OnFontInvalidated(const NzFont* font) { NazaraUnused(font);