Added default font
Former-commit-id: 84fc15f2c6d46bcfb55236863611f2fb96961a6d
This commit is contained in:
parent
c02fe6c8ff
commit
e30c447bd5
|
|
@ -75,6 +75,7 @@ class NAZARA_API NzFont : public NzResource, NzAbstractAtlas::Listener, NzNonCop
|
|||
void SetMinimumStepSize(unsigned int minimumStepSize);
|
||||
|
||||
static std::shared_ptr<NzAbstractAtlas> GetDefaultAtlas();
|
||||
static NzFont* GetDefault();
|
||||
static unsigned int GetDefaultGlyphBorder();
|
||||
static unsigned int GetDefaultMinimumStepSize();
|
||||
|
||||
|
|
@ -133,6 +134,7 @@ class NAZARA_API NzFont : public NzResource, NzAbstractAtlas::Listener, NzNonCop
|
|||
unsigned int m_minimumStepSize;
|
||||
|
||||
static std::shared_ptr<NzAbstractAtlas> s_defaultAtlas;
|
||||
static NzFont* s_defaultFont;
|
||||
static NzFontLoader::LoaderList s_loaders;
|
||||
static unsigned int s_defaultGlyphBorder;
|
||||
static unsigned int s_defaultMinimumStepSize;
|
||||
|
|
|
|||
|
|
@ -96,9 +96,30 @@ void NzGraphics::Uninitialize()
|
|||
s_moduleReferenceCounter = 0;
|
||||
|
||||
// Libération de l'atlas s'il vient de nous
|
||||
if (NzFont::GetDefaultAtlas()->GetStorage() & nzDataStorage_Hardware)
|
||||
std::shared_ptr<NzAbstractAtlas> defaultAtlas = NzFont::GetDefaultAtlas();
|
||||
if (defaultAtlas && defaultAtlas->GetStorage() & nzDataStorage_Hardware)
|
||||
{
|
||||
NzFont::SetDefaultAtlas(nullptr);
|
||||
|
||||
// La police par défaut peut faire vivre un atlas hardware après la libération du module (ce qui va être problématique)
|
||||
// du coup, si la police par défaut utilise un atlas hardware, on lui enlève.
|
||||
// Je n'aime pas cette solution mais je n'en ai pas de meilleure sous la main pour l'instant
|
||||
if (!defaultAtlas.unique())
|
||||
{
|
||||
// Encore au moins une police utilise l'atlas
|
||||
NzFont* defaultFont = NzFont::GetDefault();
|
||||
defaultFont->SetAtlas(nullptr);
|
||||
|
||||
if (!defaultAtlas.unique())
|
||||
{
|
||||
// Toujours pas seuls propriétaires ? Ah ben zut.
|
||||
NazaraWarning("Default font atlas uses hardware storage and is still used");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultAtlas.reset();
|
||||
|
||||
// Loaders
|
||||
NzLoaders_Mesh_Unregister();
|
||||
NzLoaders_OBJ_Unregister();
|
||||
|
|
|
|||
|
|
@ -9,6 +9,13 @@
|
|||
#include <Nazara/Utility/GuillotineImageAtlas.hpp>
|
||||
#include <Nazara/Utility/Debug.hpp>
|
||||
|
||||
namespace
|
||||
{
|
||||
const nzUInt8 r_cabinRegular[] = {
|
||||
#include <Nazara/Utility/Resources/Fonts/Cabin-Regular.ttf.h>
|
||||
};
|
||||
}
|
||||
|
||||
bool NzFontParams::IsValid() const
|
||||
{
|
||||
return true; // Rien à tester
|
||||
|
|
@ -325,6 +332,29 @@ std::shared_ptr<NzAbstractAtlas> NzFont::GetDefaultAtlas()
|
|||
return s_defaultAtlas;
|
||||
}
|
||||
|
||||
NzFont* NzFont::GetDefault()
|
||||
{
|
||||
// Nous n'initialisons la police par défaut qu'à la demande pour qu'elle prenne
|
||||
// les paramètres par défaut (qui peuvent avoir étés changés par l'utilisateur),
|
||||
// et pour ne pas consommer de la mémoire vive inutilement (si elle n'est jamais utilisée, elle n'est jamais ouverte).
|
||||
|
||||
if (!s_defaultFont)
|
||||
{
|
||||
std::unique_ptr<NzFont> cabin(new NzFont);
|
||||
cabin->SetPersistent(true);
|
||||
|
||||
if (!cabin->OpenFromMemory(r_cabinRegular, sizeof(r_cabinRegular)))
|
||||
{
|
||||
NazaraError("Failed to open default font");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
s_defaultFont = cabin.release();
|
||||
}
|
||||
|
||||
return s_defaultFont;
|
||||
}
|
||||
|
||||
unsigned int NzFont::GetDefaultGlyphBorder()
|
||||
{
|
||||
return s_defaultGlyphBorder;
|
||||
|
|
@ -370,6 +400,10 @@ void NzFont::SetDefaultMinimumStepSize(unsigned int minimumStepSize)
|
|||
void NzFont::Uninitialize()
|
||||
{
|
||||
s_defaultAtlas.reset();
|
||||
|
||||
// On rend la police non-persistente et on demande la vérification du compteur (pouvant entraîner la libération de la ressource)
|
||||
s_defaultFont->SetPersistent(false, true);
|
||||
s_defaultFont = nullptr;
|
||||
}
|
||||
|
||||
nzUInt64 NzFont::ComputeKey(unsigned int characterSize, nzUInt32 style) const
|
||||
|
|
@ -545,6 +579,7 @@ const NzFont::Glyph& NzFont::PrecacheGlyph(GlyphMap& glyphMap, unsigned int char
|
|||
}
|
||||
|
||||
std::shared_ptr<NzAbstractAtlas> NzFont::s_defaultAtlas;
|
||||
NzFont* NzFont::s_defaultFont;
|
||||
NzFontLoader::LoaderList NzFont::s_loaders;
|
||||
unsigned int NzFont::s_defaultGlyphBorder;
|
||||
unsigned int NzFont::s_defaultMinimumStepSize;
|
||||
|
|
|
|||
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -6,13 +6,11 @@
|
|||
#include <memory>
|
||||
#include <Nazara/Utility/Debug.hpp>
|
||||
|
||||
///TODO: Listener de font (cas où l'atlas a changé)
|
||||
|
||||
NzSimpleTextDrawer::NzSimpleTextDrawer() :
|
||||
m_color(NzColor::White),
|
||||
m_style(nzTextStyle_Regular)
|
||||
{
|
||||
// SetFont(NzFont::GetDefault());
|
||||
SetFont(NzFont::GetDefault());
|
||||
}
|
||||
|
||||
NzSimpleTextDrawer::~NzSimpleTextDrawer()
|
||||
|
|
@ -91,7 +89,6 @@ void NzSimpleTextDrawer::SetText(const NzString& str)
|
|||
|
||||
NzSimpleTextDrawer NzSimpleTextDrawer::Draw(const NzString& str, unsigned int characterSize, nzUInt32 style, const NzColor& color)
|
||||
{
|
||||
///FIXME: Sans default font ça n'a aucun intérêt
|
||||
NzSimpleTextDrawer drawer;
|
||||
drawer.SetCharacterSize(characterSize);
|
||||
drawer.SetColor(color);
|
||||
|
|
|
|||
Loading…
Reference in New Issue