From: Ricardo Cruz Date: Thu, 29 Jul 2004 11:24:41 +0000 (+0000) Subject: Added support for break lines for get_text_width() - returns the size of the largest... X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=ac9cb63a143a7c95d5b1526d3c8b5af7edbfc58a;p=supertux.git Added support for break lines for get_text_width() - returns the size of the largest paragraph. Also added a get_text_height() that also supports break lines - returns the size of all the paragraphs. SVN-Revision: 1667 --- diff --git a/lib/video/font.cpp b/lib/video/font.cpp index f0bdaffc6..f6a3254bc 100644 --- a/lib/video/font.cpp +++ b/lib/video/font.cpp @@ -71,15 +71,46 @@ Font::~Font() } float -Font::get_height() const +Font::get_text_width(const std::string& text) const { - return h; + /** Let's calculate the size of the biggest paragraph */ + int l, hl; + hl = 0; l = -1; + while(true) + { + l = text.find("\n", l+1); + if(l == (int)std::string::npos) + break; + if(hl < l) + hl = l; + } + if(hl == 0) + hl = text.size(); + + return hl * w; } float -Font::get_text_width(const std::string& text) const +Font::get_text_height(const std::string& text) const +{ + /** Let's calculate height of the text */ + int l, hh; + hh = h; l = -1; + while(true) + { + l = text.find("\n", l+1); + if(l == (int)std::string::npos) + break; + hh += h + 2; + } + + return hh; +} + +float +Font::get_height() const { - return text.size() * w; + return h; } void diff --git a/lib/video/font.h b/lib/video/font.h index dd6de7771..bf4ebd586 100644 --- a/lib/video/font.h +++ b/lib/video/font.h @@ -42,14 +42,24 @@ namespace SuperTux Font(const std::string& file, FontType type, int w, int h, int shadowsize=2); ~Font(); - /// returns the height of the font. - float get_height() const; /** 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. + * future.) + * Supports breaklines. */ float get_text_width(const std::string& text) const; + /** returns the height 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. + * In case, you are positive that your text doesn't use break lines, you can + * just use get_height(). + */ + float get_text_height(const std::string& text) const; + /// returns the height of the font. + float get_height() const; + private: friend class DrawingContext;