mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-29 16:31:11 +02:00
CTextBox: modified AUTO_WIDTH, add some printfs and comments
If is set m_nMaxWidth, then use this to calculate m_cFrameTextRel.iWidth. To set m_nMaxWidth use setWindowMaxDimensions(width) and setText(maxwidth). This should help, to paint text with clean linebreaks into defined textboxes.
This commit is contained in:
@@ -95,15 +95,6 @@ CTextBox::CTextBox(const char * text, Font* font_text, const int pmode,
|
||||
if( !(pmode & NO_AUTO_LINEBREAK))
|
||||
m_nMode = m_nMode & ~AUTO_WIDTH; /* delete any AUTO_WIDTH*/
|
||||
|
||||
#if 0
|
||||
TRACE(" Mode: ");
|
||||
if(pmode & SCROLL) TRACE("SCROLL ");
|
||||
if(pmode & NO_AUTO_LINEBREAK) TRACE("NO_AUTO_LINEBREAK ");
|
||||
if(pmode & AUTO_WIDTH) TRACE("AUTO_WIDTH ");
|
||||
if(pmode & AUTO_HIGH) TRACE("AUTO_HIGH");
|
||||
TRACE("\r\n");
|
||||
|
||||
#endif
|
||||
//TRACE(" CTextBox::m_cText: %d, m_nMode %d\t\r\n",m_cText.size(),m_nMode);
|
||||
|
||||
m_textBackgroundColor = textBackgroundColor;
|
||||
@@ -111,6 +102,7 @@ CTextBox::CTextBox(const char * text, Font* font_text, const int pmode,
|
||||
|
||||
//TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__);
|
||||
//TRACE(" CTextBox::m_nFontTextHeight: %d\t\r\n",m_nFontTextHeight);
|
||||
|
||||
//Initialise the window frames first and than refresh text line array
|
||||
initFramesAndTextArray();
|
||||
}
|
||||
@@ -231,7 +223,7 @@ void CTextBox::setWindowMinDimensions(const int width, const int height)
|
||||
|
||||
void CTextBox::reSizeMainFrameWidth(int textWidth)
|
||||
{
|
||||
TRACE("[CTextBox]->%s: \ntext width: %d\n m_cFrame.iWidth: %d\n m_cFrameTextRel.iWidth: %d\n max_width: %d\n m_nMinWidth: %d\n",__FUNCTION__, textWidth, m_cFrame.iWidth, m_cFrameTextRel.iWidth, m_nMaxWidth, m_nMinWidth);
|
||||
//TRACE("[CTextBox]->%s: \ntext width: %d\n m_cFrame.iWidth: %d\n m_cFrameTextRel.iWidth: %d\n m_nMaxWidth: %d\n m_nMinWidth: %d\n",__FUNCTION__, textWidth, m_cFrame.iWidth, m_cFrameTextRel.iWidth, m_nMaxWidth, m_nMinWidth);
|
||||
|
||||
int iNewWindowWidth = textWidth + m_cFrameScrollRel.iWidth + 2*text_border_width;
|
||||
|
||||
@@ -244,8 +236,6 @@ void CTextBox::reSizeMainFrameWidth(int textWidth)
|
||||
|
||||
m_cFrame.iWidth = iNewWindowWidth;
|
||||
|
||||
TRACE("[CTextBox]->%s: \ntext width: %d\n m_cFrame.iWidth: %d\n m_cFrameTextRel.iWidth: %d\n max_width: %d\n m_nMinWidth: %d\n",__FUNCTION__, textWidth, m_cFrame.iWidth, m_cFrameTextRel.iWidth, m_nMaxWidth, m_nMinWidth);
|
||||
|
||||
/* Re-Init the children frames due to new main window */
|
||||
initFramesRel();
|
||||
}
|
||||
@@ -341,20 +331,29 @@ void CTextBox::refreshTextLineArray(void)
|
||||
lineBreakWidth = m_nMaxWidth - m_cFrameScrollRel.iWidth - 2*text_border_width;
|
||||
}else{
|
||||
/* If not autowidth, we just take the actuall textframe width */
|
||||
lineBreakWidth = m_cFrameTextRel.iWidth - 2*text_border_width;
|
||||
lineBreakWidth = std::max(m_nMaxWidth, m_cFrameTextRel.iWidth - 2*text_border_width);
|
||||
}
|
||||
|
||||
if(m_nMaxWidth)
|
||||
lineBreakWidth = m_nMaxWidth;
|
||||
// if(m_nMaxWidth)
|
||||
// lineBreakWidth = m_nMaxWidth;
|
||||
|
||||
//TRACE("[CTextBox] line %d: lineBreakWidth %d\n", __LINE__, lineBreakWidth);
|
||||
|
||||
int TextChars = m_cText.size();
|
||||
// do not parse, if text is empty
|
||||
if(TextChars > 0)
|
||||
if(TextChars == 0)
|
||||
{
|
||||
m_nNrOfPages = 0;
|
||||
m_nNrOfLines = 0;
|
||||
m_nCurrentPage = 0;
|
||||
m_nCurrentLine = 0;
|
||||
m_nLinesPerPage = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
while(loop)
|
||||
{
|
||||
//manage auto linebreak,
|
||||
if(m_nMode & NO_AUTO_LINEBREAK)
|
||||
pos = m_cText.find_first_of("\n",pos_prev);
|
||||
else
|
||||
@@ -369,16 +368,20 @@ void CTextBox::refreshTextLineArray(void)
|
||||
//TRACE_1(" Textend found\r\n");
|
||||
}
|
||||
|
||||
//find current word between start pos and next pos (next possible \n)
|
||||
aktWord = m_cText.substr(pos_prev, pos - pos_prev + 1);
|
||||
|
||||
//calculate length of current found word
|
||||
aktWordWidth = m_pcFontText->getRenderWidth(aktWord, true);
|
||||
|
||||
//set next start pos
|
||||
pos_prev = pos + 1;
|
||||
//if(aktWord.find(""") == )
|
||||
if(1)
|
||||
{
|
||||
//TRACE_1(" aktWord: >%s< pos:%d\r\n",aktWord.c_str(),pos);
|
||||
|
||||
if( aktWidth + aktWordWidth > lineBreakWidth &&
|
||||
!(m_nMode & NO_AUTO_LINEBREAK))
|
||||
if( (aktWidth + aktWordWidth) > lineBreakWidth && !(m_nMode & NO_AUTO_LINEBREAK))
|
||||
{
|
||||
/* we need a new line before we can continue */
|
||||
m_cLineArray.push_back(aktLine);
|
||||
@@ -391,16 +394,19 @@ void CTextBox::refreshTextLineArray(void)
|
||||
loop = false;
|
||||
}
|
||||
|
||||
//add current word to current line
|
||||
aktLine += aktWord;
|
||||
//set current line width
|
||||
aktWidth += aktWordWidth;
|
||||
|
||||
//set max text width, if required
|
||||
if (aktWidth > m_nMaxTextWidth)
|
||||
m_nMaxTextWidth = aktWidth;
|
||||
|
||||
//TRACE_1(" aktLine : %s\r\n",aktLine.c_str());
|
||||
//TRACE_1(" aktWidth: %d aktWordWidth:%d\r\n",aktWidth,aktWordWidth);
|
||||
|
||||
if( ((pos < TextChars) && (m_cText[pos] == '\n')) ||
|
||||
loop == false)
|
||||
if( ((pos < TextChars) && (m_cText[pos] == '\n')) || loop == false)
|
||||
{
|
||||
// current line ends with an carriage return, make new line
|
||||
if ((pos < TextChars) && (m_cText[pos] == '\n'))
|
||||
@@ -438,14 +444,7 @@ void CTextBox::refreshTextLineArray(void)
|
||||
m_nCurrentLine = m_nCurrentPage * m_nLinesPerPage;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_nNrOfPages = 0;
|
||||
m_nNrOfLines = 0;
|
||||
m_nCurrentPage = 0;
|
||||
m_nCurrentLine = 0;
|
||||
m_nLinesPerPage = 1;
|
||||
}
|
||||
|
||||
#if 0
|
||||
TRACE_1(" m_nNrOfPages: %d\r\n",m_nNrOfPages);
|
||||
TRACE_1(" m_nNrOfLines: %d\r\n",m_nNrOfLines);
|
||||
@@ -532,7 +531,8 @@ void CTextBox::refreshText(void)
|
||||
x_center -= SCROLL_FRAME_WIDTH;
|
||||
}
|
||||
|
||||
m_pcFontText->RenderString(m_cFrameTextRel.iX + text_border_width + x_center+m_cFrame.iX,
|
||||
//TRACE("[CTextBox] %s Line %d m_cFrame.iX %d m_cFrameTextRel.iX %d\r\n", __FUNCTION__, __LINE__, m_cFrame.iX, m_cFrameTextRel.iX);
|
||||
m_pcFontText->RenderString(m_cFrame.iX + m_cFrameTextRel.iX + text_border_width + x_center,
|
||||
y+m_cFrame.iY, m_cFrameTextRel.iWidth, m_cLineArray[i].c_str(),
|
||||
m_textColor, 0, true); // UTF-8
|
||||
y += m_nFontTextHeight;
|
||||
@@ -617,6 +617,19 @@ bool CTextBox::setText(const std::string* newText, int max_width)
|
||||
void CTextBox::paint (void)
|
||||
{
|
||||
//TRACE("[CTextBox] %s Line %d\r\n", __FUNCTION__, __LINE__);
|
||||
#if 0
|
||||
TRACE(" Mode: ");
|
||||
if(m_nMode & SCROLL) TRACE("SCROLL ");
|
||||
if(m_nMode & NO_AUTO_LINEBREAK) TRACE("NO_AUTO_LINEBREAK ");
|
||||
if(m_nMode & AUTO_WIDTH) TRACE("AUTO_WIDTH ");
|
||||
if(m_nMode & AUTO_HIGH) TRACE("AUTO_HIGH ");
|
||||
if(m_nMode & CENTER) TRACE("CENTER ");
|
||||
if(m_nMode & RIGHT) TRACE("RIGHT ");
|
||||
if(m_nMode & TOP) TRACE("TOP ");
|
||||
if(m_nMode & BOTTOM) TRACE("BOTTOM ");
|
||||
TRACE("\r\n");
|
||||
|
||||
#endif
|
||||
if(frameBuffer != NULL)
|
||||
return;
|
||||
|
||||
|
Reference in New Issue
Block a user