aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Graphics/Font/je_ttf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Graphics/Font/je_ttf.h')
-rw-r--r--src/libjin/Graphics/Font/je_ttf.h156
1 files changed, 155 insertions, 1 deletions
diff --git a/src/libjin/Graphics/Font/je_ttf.h b/src/libjin/Graphics/Font/je_ttf.h
index e4314fe..9acb07e 100644
--- a/src/libjin/Graphics/Font/je_ttf.h
+++ b/src/libjin/Graphics/Font/je_ttf.h
@@ -34,32 +34,81 @@ namespace JinEngine
class TTFData
{
public:
+
+ ///
+ ///
+ ///
static TTFData* createTTFData(const unsigned char* data, unsigned int size);
+ ///
+ ///
+ ///
~TTFData();
+ ///
+ ///
+ ///
TTF* createTTF(unsigned ttfsize);
+ ///
+ ///
+ ///
void pushTTFsize(unsigned ttfsize);
+
+ ///
+ ///
+ ///
void popTTFsize();
+ ///
+ ///
+ ///
Channel* getCodepointBitmapAlpha(unsigned int codepoint, int* width, int* height, int* xoff, int* yoff) const;
+
+ ///
+ ///
+ ///
Color* getCodepointBitmap(unsigned int codepoint, int* width, int* height, int* xoff, int* yoff) const;
+ ///
+ ///
+ ///
void getVMetrics(int* baseline, int* descent);
+
+ ///
+ ///
+ ///
void getHMetrics(unsigned int codepoint, int* advanceWidth, int* leftSideBearing);
private:
+
+ ///
+ ///
+ ///
static const unsigned int FONT_SIZE = 12;
+ ///
+ ///
+ ///
TTFData(const unsigned char* data, unsigned int size);
+ ///
+ ///
+ ///
stbtt_fontinfo info;
+
+ ///
+ ///
+ ///
struct
{
unsigned char* data;
unsigned int size;
} raw;
+
+ ///
+ ///
+ ///
std::vector<float> scales;
};
@@ -69,18 +118,43 @@ namespace JinEngine
public:
//static TTF* createTTF(TTFData* ttfData, unsigned ttfSzie);
+ ///
+ ///
+ ///
Page* typeset(const Text& text, int lineheight, int spacing = 0) override;
+
+ ///
+ ///
+ ///
Page* typeset(const Content& text, int lineheight, int spacing = 0) override;
+ ///
+ ///
+ ///
void print(const Text& text, int x, int y, int lineheight, int spacing = 0) override;
+
+ ///
+ ///
+ ///
void print(const Content& text, int x, int y, int lineheight, int spacing = 0) override;
+
+ ///
+ ///
+ ///
void print(const Page* page, int x, int y) override;
+ ///
+ ///
+ ///
~TTF();
private:
+
friend class TTFData;
+ ///
+ ///
+ ///
struct TTFGlyph
{
GLuint atlas;
@@ -94,34 +168,114 @@ namespace JinEngine
unsigned int width, height;
};
+ ///
+ ///
+ ///
static const int TEXTURE_SIZE_LEVELS_COUNT = 7;
+
+ ///
+ ///
+ ///
static const int TEXTURE_SIZE_LEVEL_MAX = TEXTURE_SIZE_LEVELS_COUNT - 1;
+
+ ///
+ ///
+ ///
static const int TEXTURE_WIDTHS[TEXTURE_SIZE_LEVELS_COUNT];
+
+ ///
+ ///
+ ///
static const int TEXTURE_HEIGHTS[TEXTURE_SIZE_LEVELS_COUNT];
+ ///
+ ///
+ ///
TTF(TTFData* ttf, Codepoint ttfSize);
+ ///
+ ///
+ ///
void estimateSize();
+
+ ///
+ ///
+ ///
GLuint createAtlas();
+
+ ///
+ ///
+ ///
TTFGlyph& bakeGlyph(Codepoint character);
+
+ ///
+ ///
+ ///
TTFGlyph& findGlyph(Codepoint character);
+ ///
+ ///
+ ///
int getCharWidth(int c);
+
+ ///
+ ///
+ ///
int getCharHeight(int c);
+ ///
+ ///
+ ///
int getTextWidth(const Content& text, int spacing = 0);
+
+ ///
+ ///
+ ///
int getTextHeight(const Content& text, int lineheight);
+
+ ///
+ ///
+ ///
void getTextBox(const Content& text, int* w, int* h, int lineheight, int spacing = 0);
+ ///
+ ///
+ ///
int textureWidth;
+
+ ///
+ ///
+ ///
int textureHeight;
+
+ ///
+ ///
+ ///
std::vector<GLuint> atlases;
+
+ ///
+ ///
+ ///
std::map<Codepoint, TTFGlyph> glyphs;
+
+ ///
+ ///
+ ///
TTFData* ttf;
+
+ ///
+ ///
+ ///
int baseline;
+
+ ///
+ ///
+ ///
int descent;
- /* cursor helped render to texture */
+ ///
+ ///
+ ///
Math::Vector2<float> cursor;
};