diff --git a/src/modules/graphics/opengl/Font.cpp b/src/modules/graphics/opengl/Font.cpp index 044073aeb..60c21e8fa 100644 --- a/src/modules/graphics/opengl/Font.cpp +++ b/src/modules/graphics/opengl/Font.cpp @@ -234,36 +234,45 @@ void Font::print(char character, float x, float y) } } -int Font::getWidth(const std::string &line) +int Font::getWidth(const std::string &str) { - if (line.size() == 0) return 0; - int temp = 0; + if (str.size() == 0) return 0; + std::istringstream iss(str); + std::string line; Glyph *g; + int max_width = 0; - try + while (getline(iss, line, '\n')) { - utf8::iterator i(line.begin(), line.begin(), line.end()); - utf8::iterator end(line.end(), line.begin(), line.end()); - while (i != end) + int width = 0; + try { - int c = *i++; - g = glyphs[c]; - if (!g) g = addGlyph(c); - temp += static_cast(g->spacing * mSpacing); + utf8::iterator i(line.begin(), line.begin(), line.end()); + utf8::iterator end(line.end(), line.begin(), line.end()); + while (i != end) + { + int c = *i++; + g = glyphs[c]; + if (!g) g = addGlyph(c); + width += static_cast(g->spacing * mSpacing); + } } - } - catch(utf8::exception &e) - { - throw love::Exception("%s", e.what()); + catch(utf8::exception &e) + { + throw love::Exception("%s", e.what()); + } + + if (width > max_width) + max_width = width; } - return temp; + return max_width; } -int Font::getWidth(const char *line) +int Font::getWidth(const char *str) { - return this->getWidth(std::string(line)); + return this->getWidth(std::string(str)); } int Font::getWidth(const char character)