#ifndef TILEFONT_H
#define TILEFONT_H
#include "AppHdr.h"
#include "externs.h"
#include "tiletex.h"
class FontBuffer;
class VColour;
class formatted_string;
class FTFont
{
public:
FTFont();
virtual ~FTFont();
bool load_font(const char *font_name, unsigned int font_size, bool outline);
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);
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);
void store(FontBuffer &buf, float &x, float &y,
const std::string &s, const VColour &c);
void store(FontBuffer &buf, float &x, float &y, const formatted_string &fs);
void store(FontBuffer &buf, float &x, float &y, unsigned char c, const VColour &col);
unsigned int char_width() const { return m_max_advance.x; }
unsigned int char_height() const { return m_max_advance.y; }
unsigned int string_width(const char *text);
unsigned int string_width(const formatted_string &str);
unsigned int string_height(const char *text);
unsigned int string_height(const formatted_string &str);
formatted_string split(const formatted_string &str, unsigned int max_width,
unsigned int max_height);
const GenericTexture *font_tex() const { return &m_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
{
char offset;
char advance;
char width;
bool renderable;
};
GlyphInfo *m_glyphs;
coord_def m_max_advance;
int m_min_offset;
GenericTexture m_tex;
};
#endif