]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlcell.cpp
added and documented wxWindow::MoveBefore/AfterInTabOrder()
[wxWidgets.git] / src / html / htmlcell.cpp
index 33c54ff4ef163c4274119ccac57a2412d99e42e3..a020833ea2318d2dadaadbdbc4b16e14e4834813 100644 (file)
@@ -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)