diff options
Diffstat (limited to 'libjin/Graphics/Font.h')
-rw-r--r-- | libjin/Graphics/Font.h | 99 |
1 files changed, 11 insertions, 88 deletions
diff --git a/libjin/Graphics/Font.h b/libjin/Graphics/Font.h index 4525e8f..adb8c38 100644 --- a/libjin/Graphics/Font.h +++ b/libjin/Graphics/Font.h @@ -1,105 +1,28 @@ #ifndef __LIBJIN_FONT_H #define __LIBJIN_FONT_H -#include "../jin_configuration.h" -#if LIBJIN_MODULES_RENDER - -#include <vector> -#include <map> -#include "drawable.h" -#include "FontData.h" -#include "../math/quad.h" namespace jin { namespace graphics -{ - - struct GlyphVertex - { - int x, y; // screen coordinates - float u, v; // texture uv - }; - - struct GlyphArrayDrawInfo - { - GLuint texture; // atlas - unsigned int start; // glyph vertex indecies - unsigned int count; // glyph vertex count - }; +{ - struct Glyph - { - GLuint atlas; - /* normalized coordinates */ - struct Bbox - { - float x, y; - float width, height; - } bbox; - /* glyph size in pixel */ - unsigned int width, height; - }; + typedef unsigned int Codepoint; - struct Page - { - std::vector<GlyphArrayDrawInfo> glyphinfolist; - std::vector<GlyphVertex> glyphvertices; - int width, height; - }; + struct Page; class Font { public: - typedef unsigned int Codepoint; - - static Font* createFont(FontData* fontData, unsigned int fontSzie); - static void destroyFont(Font* font); - - Page* typeset(const char* text, int lineheight, int spacing); - void print(const char* text, int x, int y, int lineheight, int spacing = 0); - void print(const Page* page, int x, int y); - //Bitmap* bake(const char* text); -#if defined(font_debug) - void drawAtlas(); -#endif - - private: - 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]; - - Font(FontData* font, Codepoint fontSize); - ~Font(); - - void estimateSize(); - GLuint createAtlas(); - Glyph* bakeGlyph(Codepoint character); - Glyph* findGlyph(Codepoint character); - - int getCharWidth(int c); - int getCharHeight(int c); - int getTextWidth(const char* text, int spacing = 0); - int getTextHeight(const char* text, int lineheight); - void getTextBox(const char* text, int* w, int* h, int lineheight, int spacing = 0); - - int textureWidth; - int textureHeight; - std::vector<GLuint> atlases; - /* map unicode codepoint to glyph */ - std::map<Codepoint, Glyph*> glyphs; - FontData* font; - const unsigned int fontsize; - int baseline; - int descent; + Font() {} + virtual ~Font() {}; - /* cursor helped render to texture */ - math::Vector2<float> cursor; + virtual void print(const Page* page, int x, int y) = 0; + virtual void print(const std::vector<Codepoint>& text, int x, int y, int lineheight, int spacing = 0) = 0; + virtual Page* typeset(const std::vector<Codepoint>& text, int lineheight, int spacing = 0) = 0; }; -} // graphics -} // jin +} +} -#endif // LIBJIN_MODULES_RENDER -#endif // __LIBJIN_FONT_H
\ No newline at end of file +#endif
\ No newline at end of file |