(Font) Added notification on atlas layer change

Fixed irrelevant error message when a font destroy an atlas


Former-commit-id: ddbd04e9172f2d35a8e0cf8a37fe48724aeb5c64
This commit is contained in:
Lynix 2015-01-16 23:34:56 +01:00
parent 77347c8582
commit 48ecb058f0
2 changed files with 25 additions and 0 deletions

View File

@ -80,6 +80,7 @@ class NAZARA_API NzFont : public NzResource, NzAbstractAtlas::Listener, NzNonCop
enum ModicationCode
{
ModificationCode_AtlasChanged,
ModificationCode_AtlasLayerChanged,
ModificationCode_GlyphCacheCleared,
ModificationCode_KerningCacheCleared,
ModificationCode_SizeInfoCacheCleared
@ -110,6 +111,7 @@ class NAZARA_API NzFont : public NzResource, NzAbstractAtlas::Listener, NzNonCop
nzUInt64 ComputeKey(unsigned int characterSize, nzUInt32 style) const;
bool OnAtlasCleared(const NzAbstractAtlas* atlas, void* userdata) override;
bool OnAtlasLayerChange(const NzAbstractAtlas* atlas, NzAbstractImage* oldLayer, NzAbstractImage* newLayer, void* userdata) override;
void OnAtlasReleased(const NzAbstractAtlas* atlas, void* userdata) override;
const Glyph& PrecacheGlyph(GlyphMap& glyphMap, unsigned int characterSize, nzUInt32 style, char32_t character) const;

View File

@ -22,6 +22,7 @@ m_minimumSizeStep(1)
NzFont::~NzFont()
{
Destroy();
SetAtlas(nullptr); // On libère l'atlas par la même occasion
}
void NzFont::ClearGlyphCache()
@ -355,6 +356,28 @@ bool NzFont::OnAtlasCleared(const NzAbstractAtlas* atlas, void* userdata)
return true;
}
bool NzFont::OnAtlasLayerChange(const NzAbstractAtlas* atlas, NzAbstractImage* oldLayer, NzAbstractImage* newLayer, void* userdata)
{
NazaraUnused(atlas);
NazaraUnused(oldLayer);
NazaraUnused(newLayer);
NazaraUnused(userdata);
#ifdef NAZARA_DEBUG
// Est-ce qu'il s'agit bien de notre atlas ?
if (m_atlas.get() != atlas)
{
NazaraInternalError("Notified by a non-listening-to resource");
return false; // On ne veut plus être notifié par cette ressource, évidemment
}
#endif
// Pour faciliter le travail des ressources qui nous écoutent
NotifyModified(ModificationCode_AtlasLayerChanged);
return true;
}
void NzFont::OnAtlasReleased(const NzAbstractAtlas* atlas, void* userdata)
{
NazaraUnused(atlas);