+public:
+ Font();
+
+ void set_texture(const Texture2D &);
+ const Texture2D &get_texture() const;
+ void add_glyph(unsigned, float, float, float, float, float, float, float, float, float);
+ float get_native_size() const { return native_size; }
+ float get_default_size() const { return native_size; } // Deprecated
+ float get_ascent() const { return ascent; }
+ float get_descent() const { return descent; }
+
+ float get_string_width(const std::string &, StringCodec::Decoder &) const;
+
+ template<class C>
+ float get_string_width(const std::string &str) const
+ {
+ typename C::Decoder dec;
+ return get_string_width(str, dec);
+ }
+
+ float get_string_width(const std::string &str) const
+ { return get_string_width<StringCodec::Utf8>(str); }
+
+ void draw_string(const std::string &, StringCodec::Decoder &) const;
+ void draw_string(const std::string &, StringCodec::Decoder &, PrimitiveBuilder &) const;
+
+ template<class C>
+ void draw_string(const std::string &str) const
+ {
+ typename C::Decoder dec;
+ draw_string(str, dec);
+ }
+
+ void draw_string(const std::string &str) const
+ { draw_string<StringCodec::Utf8>(str); }
+
+ template<class C>
+ void draw_string(const std::string &str, PrimitiveBuilder &pb) const
+ {
+ typename C::Decoder dec;
+ draw_string(str, dec, pb);
+ }
+
+ void draw_string(const std::string &str, PrimitiveBuilder &pb) const
+ { return draw_string<StringCodec::Utf8>(str, pb); }
+
+private:
+ void create_glyph_vertices(const Glyph &, VertexBuilder &) const;
+ float get_glyph_advance(unsigned) const;