X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/49f6740f7b3b47fc907aa61723c5ee187dbf5155..a24de76b33ff8c30343d322ba9031527f0ba060f:/src/html/htmlcell.cpp?ds=sidebyside diff --git a/src/html/htmlcell.cpp b/src/html/htmlcell.cpp index 33c54ff4ef..a020833ea2 100644 --- a/src/html/htmlcell.cpp +++ b/src/html/htmlcell.cpp @@ -4,7 +4,7 @@ // Author: Vaclav Slavik // RCS-ID: $Id$ // Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows Licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) @@ -381,7 +381,7 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y, { #if 0 // useful for debugging dc.SetPen(*wxBLACK_PEN); - dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width,m_Height); + dc.DrawRectangle(x+m_PosX,y+m_PosY,m_Width /* VZ: +1? */ ,m_Height); #endif bool drawSelectionAfterCell = false; @@ -770,38 +770,59 @@ void wxHtmlContainerCell::Layout(int w) // an added complication is that some cells have fixed size and // shouldn't get any increment (it so happens that these cells // also don't allow line break on them which provides with an - // easy way to test for this) + // easy way to test for this) -- and neither should the cells + // adjacent to them as this could result in a visible space + // between two cells separated by, e.g. font change, cell which + // is wrong - const int step = s_width - xpos; + int step = s_width - xpos; if ( step > 0 ) { // first count the cells which will get extra space int total = 0; - for ( wxHtmlCell *c = line; c != cell; c = c->GetNext() ) + + const wxHtmlCell *c; + if ( line != cell ) { - if ( c->IsLinebreakAllowed() ) - total++; + for ( c = line->GetNext(); c != cell; c = c->GetNext() ) + { + if ( c->IsLinebreakAllowed() ) + { + total++; + } + } } // and now extra space to those cells which merit it if ( total ) { + // first cell on line is not moved: + line->SetPos(line->GetPosX() + s_indent, + line->GetPosY() + ypos); + + line = line->GetNext(); for ( int n = 0; line != cell; line = line->GetNext() ) { - line->SetPos(line->GetPosX() + s_indent + - ((n * step) / total), - line->GetPosY() + ypos); - if ( line->IsLinebreakAllowed() ) { // offset the next cell relative to this one // thus increasing our size n++; } + + line->SetPos(line->GetPosX() + s_indent + + ((n * step) / total), + line->GetPosY() + ypos); } } + else + { + // this will cause the code to enter "else branch" below: + step = 0; + } } - else // no extra space to distribute + // else branch: + if ( step <= 0 ) // no extra space to distribute { // just set the indent properly while (line != cell)