2019-12-23 17:43:10 -05:00
|
|
|
#pragma once
|
|
|
|
|
|
2021-03-27 02:08:03 -04:00
|
|
|
#include "FontFamilyID.h"
|
2019-12-23 17:43:10 -05:00
|
|
|
#include "FontHacks.h"
|
2021-04-15 20:56:31 -04:00
|
|
|
#include "VirtualDirectory.h"
|
2021-03-27 02:08:03 -04:00
|
|
|
|
2019-12-23 17:43:10 -05:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
|
|
class PLPasStr;
|
2020-09-12 14:01:51 -04:00
|
|
|
struct IGpFont;
|
2019-12-23 17:43:10 -05:00
|
|
|
|
|
|
|
|
namespace PortabilityLayer
|
|
|
|
|
{
|
|
|
|
|
enum FontFamilyFlags
|
|
|
|
|
{
|
|
|
|
|
FontFamilyFlag_None = 0,
|
|
|
|
|
|
|
|
|
|
FontFamilyFlag_Bold = 1,
|
2021-04-18 18:11:38 -04:00
|
|
|
FontFamilyFlag_SyntheticBold = 2,
|
2019-12-23 17:43:10 -05:00
|
|
|
|
2021-04-18 18:11:38 -04:00
|
|
|
FontFamilyFlag_All = (FontFamilyFlag_Bold | FontFamilyFlag_SyntheticBold),
|
2019-12-23 17:43:10 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class FontFamily final
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
static const unsigned int kNumVariations = FontFamilyFlag_All + 1;
|
|
|
|
|
|
2021-04-15 20:56:31 -04:00
|
|
|
void AddFont(int flags, VirtualDirectory_t vDir, const char *path, int typeFaceIndex, FontHacks fontHacks);
|
2019-12-23 17:43:10 -05:00
|
|
|
void SetDefaultVariation(int defaultVariation);
|
2021-04-15 20:56:31 -04:00
|
|
|
bool GetFontSpec(int variation, FontHacks &outHacks, VirtualDirectory_t &outVDir, const char *&outPath, int &outTypeFaceIndex);
|
2019-12-23 17:43:10 -05:00
|
|
|
|
2021-03-27 02:08:03 -04:00
|
|
|
int GetVariationForFlags(int flags) const;
|
2020-11-30 18:43:17 -05:00
|
|
|
IGpFont *GetFontForVariation(int variation);
|
2021-04-15 19:32:15 -04:00
|
|
|
void UnloadVariation(int variation);
|
2020-09-12 14:01:51 -04:00
|
|
|
FontHacks GetHacksForVariation(int variation) const;
|
2019-12-23 17:43:10 -05:00
|
|
|
|
2021-03-27 02:08:03 -04:00
|
|
|
FontFamilyID_t GetFamilyID() const;
|
2020-10-24 11:41:39 -04:00
|
|
|
|
2020-11-30 18:43:17 -05:00
|
|
|
void PurgeCache();
|
|
|
|
|
|
2021-03-27 02:08:03 -04:00
|
|
|
static FontFamily *Create(FontFamilyID_t familyID);
|
2019-12-23 17:43:10 -05:00
|
|
|
void Destroy();
|
|
|
|
|
|
|
|
|
|
private:
|
2020-11-30 18:43:17 -05:00
|
|
|
struct FontSpec
|
|
|
|
|
{
|
|
|
|
|
FontSpec();
|
|
|
|
|
|
|
|
|
|
IGpFont *m_font;
|
|
|
|
|
FontHacks m_hacks;
|
2021-04-15 20:56:31 -04:00
|
|
|
VirtualDirectory_t m_fontVDir;
|
2020-11-30 18:43:17 -05:00
|
|
|
const char *m_fontPath;
|
2021-04-15 20:56:31 -04:00
|
|
|
int m_typeFaceIndex;
|
2020-11-30 18:43:17 -05:00
|
|
|
bool m_isRegistered;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
FontSpec m_fontSpecs[kNumVariations];
|
2019-12-23 17:43:10 -05:00
|
|
|
uint8_t m_defaultVariation;
|
2021-03-27 02:08:03 -04:00
|
|
|
FontFamilyID_t m_familyID;
|
2019-12-23 17:43:10 -05:00
|
|
|
|
2021-03-27 02:08:03 -04:00
|
|
|
explicit FontFamily(FontFamilyID_t familyID);
|
2019-12-23 17:43:10 -05:00
|
|
|
~FontFamily();
|
|
|
|
|
};
|
|
|
|
|
}
|