prime/include/Kyoto/Text/CRasterFont.hpp

126 lines
2.9 KiB
C++

#ifndef _CRASTERFONT
#define _CRASTERFONT
#include "types.h"
#include "Kyoto/TToken.hpp"
#include "rstl/optional_object.hpp"
#include "rstl/pair.hpp"
#include "rstl/vector.hpp"
#include "string.h"
class CTexture;
class CDrawStringOptions;
class IObjectStore;
class CFontInfo {
public:
CFontInfo(bool a, bool b, int c, int fontSize, const char* name)
: x0_(a), x1_(b), x4_(c), x8_fontSize(fontSize) {
strcpy(xc_name, name);
}
private:
bool x0_;
bool x1_;
int x4_;
int x8_fontSize;
char xc_name[64];
};
class CKernPair {
public:
CKernPair(wchar_t first, wchar_t second, int howMuch)
: x0_first(first), x2_second(second), x4_howMuch(howMuch) {}
wchar_t GetFirst() const { return x0_first; }
wchar_t GetSecond() const { return x2_second; }
int GetHowMuch() const { return x4_howMuch; }
private:
wchar_t x0_first;
wchar_t x2_second;
int x4_howMuch;
};
class CGlyph {
public:
CGlyph(int a, int b, int c, float startU, float startV, float endU, float endV, int cellWidth,
int cellHeight, int baseline, int kernStart)
: x0_a(a)
, x2_b(b)
, x4_c(c)
, x8_startU(startU)
, xc_startV(startV)
, x10_endU(endU)
, x14_endV(endV)
, x18_cellWidth(cellWidth)
, x1a_cellHeight(cellHeight)
, x1c_baseline(baseline)
, x1e_kernStart(kernStart)
{}
short GetA() const { return x0_a; }
short GetB() const { return x2_b; }
short GetC() const { return x4_c; }
float GetStartU() const { return x8_startU; }
float GetStartV() const { return xc_startV; }
float GetEndU() const { return x10_endU; }
float GetEndV() const { return x14_endV; }
short GetCellWidth() const { return x18_cellWidth; }
short GetCellHeight() const { return x1a_cellHeight; }
short GetBaseline() const { return x1c_baseline; }
short GetKernStart() const { return x1e_kernStart; }
//short GetLayer() const { return x20_layer; }
private:
short x0_a;
short x2_b;
short x4_c;
float x8_startU;
float xc_startV;
float x10_endU;
float x14_endV;
short x18_cellWidth;
short x1a_cellHeight;
short x1c_baseline;
short x1e_kernStart;
//short x20_layer;
};
enum EFontMode {
kFM_None = -1,
kFM_OneLayer,
kFM_OneLayerOutline,
kFM_FourLayers,
kFM_TwoLayersOutline,
kFM_TwoLayers,
};
class CRasterFont {
public:
CRasterFont(CInputStream& in, IObjectStore* store);
~CRasterFont();
EFontMode GetMode() const;
void GetSize(const CDrawStringOptions&, int&, int&, const wchar_t*, int) const;
void SetTexture(TToken< CTexture > token) { x80_texture = token; }
bool IsFinishedLoading();
private:
bool x0_initialized;
int x4_monoWidth;
int x8_monoHeight;
rstl::vector< rstl::pair< wchar_t, CGlyph > > xc_glyphs;
rstl::vector< CKernPair > x1c_kerning;
EFontMode x2c_mode;
rstl::optional_object< CFontInfo > x30_fontInfo;
rstl::optional_object< TToken< CTexture > > x80_texture;
int x8c_baseline;
int x90_lineMargin;
};
CHECK_SIZEOF(CRasterFont, 0x94)
#endif // _CRASTERFONT