X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fvideo%2Ffont.hpp;h=fffcc1fa42bb3972f5958163fb52148f2a1e757f;hb=394afb555fd97f21a5d7bb473c749535e01df085;hp=af6cd0b3c5b9176d71a7fefe49296361c693939d;hpb=5b7f9214cb929399f1a855ef5807018a9447d510;p=supertux.git diff --git a/src/video/font.hpp b/src/video/font.hpp index af6cd0b3c..fffcc1fa4 100644 --- a/src/video/font.hpp +++ b/src/video/font.hpp @@ -1,7 +1,7 @@ -// $Id: font.h 2298 2005-03-30 12:01:02Z matzebraun $ -// +// $Id$ +// // SuperTux -// Copyright (C) 2004 Tobias Glaesser +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -12,11 +12,11 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // 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. +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + #ifndef SUPERTUX_FONT_H #define SUPERTUX_FONT_H @@ -35,22 +35,17 @@ enum FontAlignment { class Font { public: - enum FontType { - TEXT, // images for all characters - NUM // only images for numbers - }; - - Font(const std::string& file, FontType type, int w, int h, - int shadowsize=2); + Font(const std::string& file, const std::string& shadowfile, + int w, int h, int shadowsize = 2); ~Font(); - + /** returns the width of a given text. (Note that I won't add a normal * get_width function here, as we might switch to variable width fonts in the * future.) * Supports breaklines. */ float get_text_width(const std::string& text) const; - + /** returns the height of a given text. This function supports breaklines. * In case, you are positive that your text doesn't use break lines, you can * just use get_height(). @@ -58,29 +53,41 @@ public: float get_text_height(const std::string& text) const; /// returns the height of the font. float get_height() const; - + + /** + * returns the given string, truncated (preferrably at whitespace) to be at most max_width pixels long + */ + std::string wrap_to_width(const std::string& text, int max_width, std::string* overflow) const; + + /** + * returns the given string, truncated (preferrably 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); + /** 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 = LEFT_ALLIGN, - uint32_t drawing_effect = NONE_EFFECT, uint8_t alpha = 255) const; - + DrawingEffect drawing_effect = NO_EFFECT, + float alpha = 1.0f) const; + private: friend class DrawingContext; - + void draw_text(const std::string& text, const Vector& pos, - uint32_t drawing_effect = NONE_EFFECT, uint8_t alpha = 255) const; - + DrawingEffect drawing_effect = NO_EFFECT, + float alpha = 1.0f) const; + void draw_chars(Surface* pchars, const std::string& text, - const Vector& position, uint32_t drawing_effect, uint8_t alpha) const; - + const Vector& position, DrawingEffect drawing_effect, + float alpha) const; + Surface* chars; Surface* shadow_chars; - FontType type; int w; int h; 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