From: Ricardo Cruz Date: Sat, 16 Oct 2004 11:20:28 +0000 (+0000) Subject: get_text_width() was broken. Fixed. X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=9da8c0c2d567d993abd71e5f31df0dcecf086d18;p=supertux.git get_text_width() was broken. Fixed. Also, made all text being alligned in draw_text(), instead of a floated alligned text. Might be good to allow a setup of this. SVN-Revision: 2018 --- diff --git a/lib/video/font.cpp b/lib/video/font.cpp index 6c19b8bfb..8f3499135 100644 --- a/lib/video/font.cpp +++ b/lib/video/font.cpp @@ -74,15 +74,16 @@ float Font::get_text_width(const std::string& text) const { /** Let's calculate the size of the biggest paragraph */ - std::string::size_type l, hl; + std::string::size_type l, hl, ol; hl = 0; l = 0; while(true) { + ol = l; l = text.find("\n", l+1); if(l == std::string::npos) break; - if(hl < l) - hl = l; + if(hl < l-ol) + hl = l-ol; } if(hl == 0) hl = text.size(); @@ -99,7 +100,7 @@ Font::get_text_height(const std::string& text) const while(true) { l = text.find("\n", l+1); - if(l == (int)std::string::npos) + if(l == std::string::npos) break; hh += h + 2; } @@ -116,31 +117,33 @@ Font::get_height() const void Font::draw(const std::string& text, const Vector& pos_, int allignment, Uint32 drawing_effect, int alpha) { - // calculate X positions based on the allignment type - Vector pos = Vector(pos_); - if(allignment == CENTER_ALLIGN) - pos.x -= get_text_width(text) / 2; - else if(allignment == RIGHT_ALLIGN) - pos.x -= get_text_width(text); - /* Cut lines changes into seperate strings, needed to support center/right text allignments with break lines. Feel free to replace this hack with a more elegant solution */ char temp[1024]; std::string::size_type l, i, y; + bool done = false; i = y = 0; - while(true) + while(!done) { l = text.find("\n", i); if(l == std::string::npos) { - temp[text.copy(temp, text.size() - i, i)] = '\0'; - draw_text(temp, pos + Vector(0,y), drawing_effect, alpha); - break; + l = text.size(); + done = true; } + temp[text.copy(temp, l - i, i)] = '\0'; + + // calculate X positions based on the allignment type + Vector pos = Vector(pos_); + if(allignment == CENTER_ALLIGN) + pos.x -= get_text_width(temp) / 2; + else if(allignment == RIGHT_ALLIGN) + pos.x -= get_text_width(temp); + draw_text(temp, pos + Vector(0,y), drawing_effect, alpha); i = l+1;