diff --git a/src/gui/widget/textbox.cpp b/src/gui/widget/textbox.cpp index d337a89b2..bbf678e33 100644 --- a/src/gui/widget/textbox.cpp +++ b/src/gui/widget/textbox.cpp @@ -887,3 +887,21 @@ int CTextBox::getLines(const std::string& text) return count; } + +int CTextBox::getMaxLineWidth(const std::string& text, Font* font) +{ + // if found no linebreak, return pure size only + if (text.find('\n', 0) == std::string::npos) + return font->getRenderWidth(text.c_str()); + + std::stringstream in (text); + if (!in) + return 0; + + int len = 0; + std::string line; + while(getline(in, line)) + len = std::max(len, font->getRenderWidth(line.c_str())); + + return len; +} diff --git a/src/gui/widget/textbox.h b/src/gui/widget/textbox.h index e2604063b..5df0762a7 100644 --- a/src/gui/widget/textbox.h +++ b/src/gui/widget/textbox.h @@ -200,7 +200,6 @@ class CTextBox : public sigc::trackable inline bool isPainted(void) {if( frameBuffer == NULL) return (false); else return (true);}; inline CBox getWindowsPos(void) {return(m_cFrame);}; - inline int getMaxLineWidth(void) {return(m_nMaxTextWidth);}; inline int getLinesPerPage(void) {return m_nLinesPerPage;}; inline int getPages(void) {return(m_nNrOfPages);}; @@ -222,6 +221,24 @@ class CTextBox : public sigc::trackable */ int getLines(){return(m_nNrOfLines);} + /** + * Returns maximal width of passed text + * @param[in] text + * @li exepts type std::string + * @param[in] font + * @li exepts font type object + * @return width of largest line as int + * @see getMaxLineWidth(void) + */ + static int getMaxLineWidth(const std::string& text, Font* font); + + /** + * Returns internal defined maximal line width of an existent CTextBox instance. + * @return width of largest line as int + * @see static version getMaxLineWidth() + */ + int getMaxLineWidth() {return(m_nMaxTextWidth);} + inline void movePosition(int x, int y) {m_cFrame.iX = x; m_cFrame.iY = y;}; int getFontTextHeight(); inline int getTextMode() {return m_nMode;};