From 77347c8582ad3d7a63f4367730aa425ffcec1d71 Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 16 Jan 2015 18:57:09 +0100 Subject: [PATCH] (Font) Added notification on atlas change Will only clear glyphes when setting differents parameters Former-commit-id: b16a289742c0f23fa5066d3c52ce35b4abc626c6 --- include/Nazara/Utility/Font.hpp | 1 + src/Nazara/Utility/Font.cpp | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/Nazara/Utility/Font.hpp b/include/Nazara/Utility/Font.hpp index 4605fe975..30b5e385c 100644 --- a/include/Nazara/Utility/Font.hpp +++ b/include/Nazara/Utility/Font.hpp @@ -79,6 +79,7 @@ class NAZARA_API NzFont : public NzResource, NzAbstractAtlas::Listener, NzNonCop enum ModicationCode { + ModificationCode_AtlasChanged, ModificationCode_GlyphCacheCleared, ModificationCode_KerningCacheCleared, ModificationCode_SizeInfoCacheCleared diff --git a/src/Nazara/Utility/Font.cpp b/src/Nazara/Utility/Font.cpp index 495e0dc7f..e164d57c3 100644 --- a/src/Nazara/Utility/Font.cpp +++ b/src/Nazara/Utility/Font.cpp @@ -276,20 +276,28 @@ bool NzFont::OpenFromStream(NzInputStream& stream, const NzFontParams& params) void NzFont::SetAtlas(std::shared_ptr atlas) { - ClearGlyphCache(); + if (m_atlas != atlas) + { + ClearGlyphCache(); - if (m_atlas) - m_atlas->RemoveListener(this); + if (m_atlas) + m_atlas->RemoveListener(this); - m_atlas = atlas; - if (m_atlas) - m_atlas->AddListener(this); + m_atlas = atlas; + if (m_atlas) + m_atlas->AddListener(this); + + NotifyModified(ModificationCode_AtlasChanged); + } } void NzFont::SetGlyphBorder(unsigned int borderSize) { - m_glyphBorder = borderSize; - ClearGlyphCache(); + if (m_glyphBorder != borderSize) + { + m_glyphBorder = borderSize; + ClearGlyphCache(); + } } void NzFont::SetMinimumStepSize(unsigned int minimumStepSize) @@ -302,8 +310,11 @@ void NzFont::SetMinimumStepSize(unsigned int minimumStepSize) } #endif - m_minimumSizeStep = minimumStepSize; - ClearGlyphCache(); + if (m_minimumSizeStep != minimumStepSize) + { + m_minimumSizeStep = minimumStepSize; + ClearGlyphCache(); + } } nzUInt64 NzFont::ComputeKey(unsigned int characterSize, nzUInt32 style) const