diff options
Diffstat (limited to 'src/libjin/Graphics/Font/TTF.h')
-rw-r--r-- | src/libjin/Graphics/Font/TTF.h | 214 |
1 files changed, 107 insertions, 107 deletions
diff --git a/src/libjin/Graphics/Font/TTF.h b/src/libjin/Graphics/Font/TTF.h index 804cd9d..fc2eca3 100644 --- a/src/libjin/Graphics/Font/TTF.h +++ b/src/libjin/Graphics/Font/TTF.h @@ -17,115 +17,115 @@ namespace jin { -namespace graphics -{ + namespace graphics + { - class TTF; + class TTF; - /** - * TTFData - * |- TTF(14px) - * |- TTF(15px) - * . - * . - * . - */ - 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; - - }; - - class TTF : public Font - { - 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; - /* normalized coordinates */ - struct Bbox - { - float x, y; - float w, h; - } bbox; - /* glyph size in pixel */ - 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; - - }; - -} // graphics + /** + * TTFData + * |- TTF(14px) + * |- TTF(15px) + * . + * . + * . + */ + 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; + + }; + + class TTF : public Font + { + 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; + /* normalized coordinates */ + struct Bbox + { + float x, y; + float w, h; + } bbox; + /* glyph size in pixel */ + 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; + + }; + + } // graphics } // jin #endif // LIBJIN_MODULES_RENDER |