X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fvideo%2Ffont.hpp;h=bfde8742586d1b4f2dd11b7daf83915a6267e5ce;hb=101b0a78b682a8b6b87407edc625adaf7c51da40;hp=5625be1851c60b56cc48d2587be1479f9c0243e1;hpb=fea3446f05e1e7673607b835c269d3e8d1929ab3;p=supertux.git diff --git a/src/video/font.hpp b/src/video/font.hpp index 5625be185..bfde87425 100644 --- a/src/video/font.hpp +++ b/src/video/font.hpp @@ -1,13 +1,11 @@ -// $Id$ -// // SuperTux // Copyright (C) 2006 Matthias Braun , -// Ingo Ruhnke +// Ingo Ruhnke // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,18 +13,19 @@ // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// along with this program. If not, see . -#ifndef SUPERTUX_FONT_H -#define SUPERTUX_FONT_H +#ifndef HEADER_SUPERTUX_VIDEO_FONT_HPP +#define HEADER_SUPERTUX_VIDEO_FONT_HPP -#include #include +#include -#include "video/surface.hpp" +#include "math/rectf.hpp" #include "math/vector.hpp" -#include "math/rect.hpp" +#include "video/color.hpp" +#include "video/surface.hpp" +#include "video/texture.hpp" class Renderer; @@ -44,17 +43,14 @@ public: VARIABLE }; +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 @@ -76,20 +72,21 @@ 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 (preferrably at whitespace) to be at most "width" pixels wide + * 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(Renderer *renderer, const std::string& text, const Vector& pos, - FontAlignment allignment = ALIGN_LEFT, + FontAlignment alignment = ALIGN_LEFT, DrawingEffect drawing_effect = NO_EFFECT, + Color color = Color(1.0,1.0,1.0), float alpha = 1.0f) const; private: @@ -97,26 +94,20 @@ private: 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(Renderer *renderer, 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; - 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; - + 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); +private: struct Glyph { /** How many pixels should the cursor advance after printing the glyph */ @@ -125,13 +116,34 @@ 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; + Rectf rect; + + Glyph() : + advance(), + offset(), + surface_idx(), + rect() + {} }; - /** Location of the characters inside the surface */ +private: + GlyphWidth glyph_width; + + std::vector glyph_surfaces; + std::vector shadow_surfaces; + int char_height; + int shadowsize; + int border; + bool rtl; + + /** 65536 of glyphs */ std::vector glyphs; - std::vector shadow_glyphs; }; #endif + +/* EOF */