CTextBox: add static function to get largest line of passed text

This could be useful eg. for size calculations.
This commit is contained in:
2016-11-10 00:30:57 +01:00
parent e3f51f2c91
commit 91c7588aa6
2 changed files with 36 additions and 1 deletions

View File

@@ -887,3 +887,21 @@ int CTextBox::getLines(const std::string& text)
return count; 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;
}

View File

@@ -200,7 +200,6 @@ class CTextBox : public sigc::trackable
inline bool isPainted(void) {if( frameBuffer == NULL) return (false); else return (true);}; inline bool isPainted(void) {if( frameBuffer == NULL) return (false); else return (true);};
inline CBox getWindowsPos(void) {return(m_cFrame);}; inline CBox getWindowsPos(void) {return(m_cFrame);};
inline int getMaxLineWidth(void) {return(m_nMaxTextWidth);};
inline int getLinesPerPage(void) {return m_nLinesPerPage;}; inline int getLinesPerPage(void) {return m_nLinesPerPage;};
inline int getPages(void) {return(m_nNrOfPages);}; inline int getPages(void) {return(m_nNrOfPages);};
@@ -222,6 +221,24 @@ class CTextBox : public sigc::trackable
*/ */
int getLines(){return(m_nNrOfLines);} 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;}; inline void movePosition(int x, int y) {m_cFrame.iX = x; m_cFrame.iY = y;};
int getFontTextHeight(); int getFontTextHeight();
inline int getTextMode() {return m_nMode;}; inline int getTextMode() {return m_nMode;};