From 91c7588aa6bb993e29abee1d374363c3ba7bc566 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Thu, 10 Nov 2016 00:30:57 +0100 Subject: [PATCH] CTextBox: add static function to get largest line of passed text This could be useful eg. for size calculations. --- src/gui/widget/textbox.cpp | 18 ++++++++++++++++++ src/gui/widget/textbox.h | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) 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;};