Core/Utility: Fix font crash
Happened when the atlas was resizing while updating the text drawer, the old invalid pointer was kept (now a dangling pointer). Former-commit-id: d50153f81f1f2bdd80cfdac9dcee85eb7c28c35e
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user