diff options
author | Ixtli <cg@325i.org> | 2010-03-14 20:40:54 +0900 |
---|---|---|
committer | Enne Walker <ennewalker@users.sourceforge.net> | 2010-04-24 10:19:45 -0400 |
commit | 149c76283904371235ea6d564037900edb8b07af (patch) | |
tree | 6bcde02f7acf2485f7e557bb4c64f74d3abefa9d /crawl-ref/source/fontwrapper-ft.h | |
parent | bab61331e9e1287ae14afe2644b68f4c49ff09d8 (diff) | |
download | crawl-ref-149c76283904371235ea6d564037900edb8b07af.tar.gz crawl-ref-149c76283904371235ea6d564037900edb8b07af.zip |
Created FontWrapper, and made FT flag in makefile.
Diffstat (limited to 'crawl-ref/source/fontwrapper-ft.h')
-rw-r--r-- | crawl-ref/source/fontwrapper-ft.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/crawl-ref/source/fontwrapper-ft.h b/crawl-ref/source/fontwrapper-ft.h new file mode 100644 index 0000000000..e4302c73cf --- /dev/null +++ b/crawl-ref/source/fontwrapper-ft.h @@ -0,0 +1,100 @@ +#ifndef FT_FONTWRAPPER_H +#define FT_FONTWRAPPER_H + +#ifdef USE_TILE +#include "tilefont.h" + +#ifdef USE_FT + +// This class handles loading FreeType2 fonts and rendering them via OpenGL. + +// TODO enne - Fonts could be made better by: +// +// * handling kerning +// * using SDL_font (maybe?) + +class FTFontWrapper : public FontWrapper +{ +public: + FTFontWrapper(); + virtual ~FTFontWrapper(); + + // font loading + virtual bool load_font( const char *font_name, unsigned int font_size, + bool outline); + + // render just text + virtual void render_textblock( unsigned int x, unsigned int y, + unsigned char *chars, unsigned char *colours, + unsigned int width, unsigned int height, + bool drop_shadow = false); + + // render text + background box + virtual void render_string( unsigned int x, unsigned int y, + const char *text, const coord_def &min_pos, + const coord_def &max_pos, + unsigned char font_colour, + bool drop_shadow = false, + unsigned char box_alpha = 0, + unsigned char box_colour = 0, + unsigned int outline = 0, + bool tooltip = false); + + // FontBuffer helper functions + virtual void store(FontBuffer &buf, float &x, float &y, + const std::string &s, const VColour &c); + virtual void store(FontBuffer &buf, float &x, float &y, + const formatted_string &fs); + virtual void store(FontBuffer &buf, float &x, float &y, unsigned char c, + const VColour &col); + + virtual unsigned int char_width(); + virtual unsigned int char_height(); + + virtual unsigned int string_width(const char *text); + virtual unsigned int string_width(const formatted_string &str); + virtual unsigned int string_height(const char *text); + virtual unsigned int string_height(const formatted_string &str); + + // Try to split this string to fit in w x h pixel area. + virtual formatted_string split( const formatted_string &str, + unsigned int max_width, + unsigned int max_height); + + virtual const GenericTexture *font_tex(); + +protected: + void store(FontBuffer &buf, float &x, float &y, + const std::string &s, const VColour &c, float orig_x); + void store(FontBuffer &buf, float &x, float &y, const formatted_string &fs, + float orig_x); + + int find_index_before_width(const char *str, int max_width); + + struct GlyphInfo + { + // offset before drawing glyph; can be negative + char offset; + + // per-glyph horizontal advance + char advance; + + // per-glyph width + char width; + + bool renderable; + }; + GlyphInfo *m_glyphs; + + // cached value of the maximum advance from m_advance + coord_def m_max_advance; + + // minimum offset (likely negative) + int m_min_offset; + + GenericTexture m_tex; +}; + +#endif // USE_FT +#endif // USE_TILE +#endif // include guard
\ No newline at end of file |