X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fvideo%2Ffont.hpp;h=6810d47d9785e2e34df8996ea4334d33079a14bb;hb=86e5914510fc29f4decbb66a7d602872b6c8555e;hp=e3b8875f637109bfb9cfd9114e7ce7caa04612cd;hpb=94f5f77ebdecb14317c610a2a8c686c576e4722a;p=supertux.git diff --git a/src/video/font.hpp b/src/video/font.hpp index e3b8875f6..6810d47d9 100644 --- a/src/video/font.hpp +++ b/src/video/font.hpp @@ -25,9 +25,12 @@ #include #include "video/surface.hpp" +#include "video/color.hpp" #include "math/vector.hpp" #include "math/rect.hpp" +class Renderer; + enum FontAlignment { ALIGN_LEFT, ALIGN_CENTER, @@ -45,14 +48,10 @@ public: /** Construct a fixed-width font * * @param glyph_width VARIABLE for proportional fonts, VARIABLE for monospace ones - * @param filename image file containing the characters - * @param shadowfile image file containing the characters shadows - * @param char_width width of a character - * @param char_height height of a character + * @param fontfile file in format supertux-font + * @param sgadowsize offset of shadow */ - Font(GlyphWidth glyph_width, - const std::string& filename, const std::string& shadowfile, - int char_width, int char_height, int shadowsize = 2); + Font(GlyphWidth glyph_width, const std::string& fontfile, int shadowsize = 2); ~Font(); /** returns the width of a given text. (Note that I won't add a normal @@ -74,42 +73,42 @@ public: float get_height() const; /** - * returns the given string, truncated (preferrably at whitespace) to be at most max_chars characters long + * returns the given string, truncated (preferably at whitespace) to be at most max_chars characters long */ static std::string wrap_to_chars(const std::string& text, int max_chars, std::string* overflow); + /** + * returns the given string, truncated (preferably at whitespace) to be at most "width" pixels wide + */ + std::string wrap_to_width(const std::string& text, float width, std::string* overflow); + /** Draws the given text to the screen. Also needs the position. * Type of alignment, drawing effect and alpha are optional. */ - void draw(const std::string& text, const Vector& pos, - FontAlignment allignment = ALIGN_LEFT, + void draw(Renderer *renderer, const std::string& text, const Vector& pos, + FontAlignment alignment = ALIGN_LEFT, DrawingEffect drawing_effect = NO_EFFECT, + Color color = Color(1.0,1.0,1.0), float alpha = 1.0f) const; private: friend class DrawingContext; - void draw_text(const std::string& text, const Vector& pos, + void draw_text(Renderer *renderer, const std::string& text, const Vector& pos, DrawingEffect drawing_effect = NO_EFFECT, + Color color = Color(1.0,1.0,1.0), float alpha = 1.0f) const; - void draw_chars(Surface* pchars, const std::string& text, - const Vector& position, DrawingEffect drawing_effect, + void draw_chars(Renderer *renderer, bool nonshadow, const std::string& text, + const Vector& position, DrawingEffect drawing_effect, Color color, float alpha) const; - /** Convert a Unicode character code to the index of its glyph */ - int chr2glyph(uint32_t chr) const; - GlyphWidth glyph_width; - Surface* glyph_surface; - Surface* shadow_glyph_surface; + + std::vector glyph_surfaces; + std::vector shadow_surfaces; int char_height; int shadowsize; - /// the number of the first character that is represented in the font - uint32_t first_char; - /// the number of the last character that is represented in the font - uint32_t char_count; - struct Glyph { /** How many pixels should the cursor advance after printing the glyph */ @@ -118,13 +117,22 @@ private: /** Offset that is used when drawing the glyph */ Vector offset; + /** index of containing surface */ + int surface_idx; + /** Position of the glyph inside the surface */ Rect rect; }; - /** Location of the characters inside the surface */ + /** 65536 of glyphs */ std::vector glyphs; - std::vector shadow_glyphs; + + void loadFontFile(const std::string &filename); + void loadFontSurface(const std::string &glyphimage, + const std::string &shadowimage, + const std::vector &chars, + GlyphWidth glyph_width, + int char_width); }; #endif