]> git.tdb.fi Git - libs/gl.git/blob - source/font.h
Add files
[libs/gl.git] / source / font.h
1 #ifndef FONT_H_
2 #define FONT_H_
3
4 #include <map>
5 #include <string>
6 #include <msp/parser/loader.h>
7
8 namespace Msp {
9 namespace GL {
10
11 class Texture2D;
12
13 class Font
14 {
15 public:
16         class Loader: public Msp::Parser::Loader
17         {
18         public:
19                 Loader(Font &);
20         private:
21                 Font &font;
22
23                 void texture(const std::string &);
24                 void glyph(unsigned);
25         };
26
27         Font();
28         void  set_texture(const Texture2D &);
29         void  add_glyph(wchar_t, float, float, float, float, float, float, float, float);
30         float get_string_width(const std::string &) const;
31         void  draw_glyph(wchar_t);
32         void  draw_string(const std::string &) const;
33         void  draw_multiline(const std::string &) const;
34         ~Font();
35 private:
36         struct Glyph
37         {
38                 class Loader: public Msp::Parser::Loader
39                 {
40                 public:
41                         Loader(Glyph &);
42                         Glyph &get_object() { return glyph; }
43                 private:
44                         Glyph &glyph;
45
46                         void texcoords(float, float, float, float);
47                         void size(float, float);
48                 };
49
50                 wchar_t code;
51                 float x1,y1;
52                 float x2,y2;
53                 float w,h;
54                 float descent;
55                 float advance;
56         };
57         typedef std::map<wchar_t, Glyph> GlyphMap;
58
59         const Texture2D *tex;
60         bool     own_tex;
61         GlyphMap glyphs;
62
63         void prepare(float *) const;
64         void draw_glyph(wchar_t, float *, float &) const;
65 };
66
67 } // namespace GL
68 } // namespace Msp
69
70 #endif