]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/htmlcell.cpp
Additions for webkit wrapper support.
[wxWidgets.git] / src / html / htmlcell.cpp
index 37514300b31f0c35d9e8080d0da352f662d3b051..5ea2d4b802b1a2aa721d619f9e28e1473e36317c 100644 (file)
@@ -283,7 +283,7 @@ void wxHtmlWordCell::Split(wxDC& dc,
     wxPoint pt1 = (selFrom == wxDefaultPosition) ?
                    wxDefaultPosition : selFrom - GetAbsPos();
     wxPoint pt2 = (selTo == wxDefaultPosition) ?
-                   wxPoint(m_Width, wxDefaultPosition.y) : selTo - GetAbsPos();
+                   wxPoint(m_Width, wxDefaultCoord) : selTo - GetAbsPos();
 
     wxCoord charW, charH;
     unsigned len = m_Word.length();
@@ -385,7 +385,7 @@ void wxHtmlWordCell::Draw(wxDC& dc, int x, int y,
 #endif
 
     bool drawSelectionAfterCell = false;
-    
+
     if ( info.GetState().GetSelectionState() == wxHTML_SEL_CHANGING )
     {
         // Selection changing, we must draw the word piecewise:
@@ -716,7 +716,7 @@ void wxHtmlContainerCell::Layout(int w)
             curLineWidth += cell->GetMaxTotalWidth();
 
         cell = cell->GetNext();
-            
+
         // compute length of the next word that would be added:
         nextWordWidth = 0;
         if (cell)
@@ -728,9 +728,9 @@ void wxHtmlContainerCell::Layout(int w)
                 nextCell = nextCell->GetNext();
             } while (nextCell && !nextCell->IsLinebreakAllowed());
         }
-        
+
         // force new line if occured:
-        if ((cell == NULL) || 
+        if ((cell == NULL) ||
             (xpos + nextWordWidth > s_width && cell->IsLinebreakAllowed()))
         {
             if (xpos > MaxLineWidth) MaxLineWidth = xpos;
@@ -775,51 +775,54 @@ void wxHtmlContainerCell::Layout(int w)
                 // 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;
 
-                    const wxHtmlCell *c,
-                                     *prev = NULL,
-                                     *next = NULL;
-                    for ( c = line; c != cell; prev = c, c = next )
+                    const wxHtmlCell *c;
+                    if ( line != cell )
                     {
-                        next = c->GetNext();
-                        if ( c->IsLinebreakAllowed() &&
-                                (next == cell || next->IsLinebreakAllowed()) &&
-                                    (!prev || prev->IsLinebreakAllowed()) )
+                        for ( c = line->GetNext(); c != cell; c = c->GetNext() )
                         {
-                            total++;
+                            if ( c->IsLinebreakAllowed() )
+                            {
+                                total++;
+                            }
                         }
                     }
 
                     // and now extra space to those cells which merit it
                     if ( total )
                     {
-                        prev =
-                        next = NULL;
-                        for ( int n = 0; line != cell; prev = line, line = line->GetNext() )
-                        {
-                            line->SetPos(line->GetPosX() + s_indent +
-                                           ((n * step) / total),
-                                           line->GetPosY() + ypos);
+                        // first cell on line is not moved:
+                        line->SetPos(line->GetPosX() + s_indent,
+                                     line->GetPosY() + ypos);
 
-                            next = line->GetNext();
-                            if ( line->IsLinebreakAllowed() &&
-                                    (next == cell ||
-                                        next->IsLinebreakAllowed()) &&
-                                        (!prev || prev->IsLinebreakAllowed()) )
+                        line = line->GetNext();
+                        for ( int n = 0; line != cell; line = line->GetNext() )
+                        {
+                            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)
@@ -859,7 +862,7 @@ void wxHtmlContainerCell::Layout(int w)
 
     if (curLineWidth > m_MaxTotalWidth)
         m_MaxTotalWidth = curLineWidth;
-            
+
     m_MaxTotalWidth += s_indent + ((m_IndentRight < 0) ? (-m_IndentRight * m_Width / 100) : m_IndentRight);
     MaxLineWidth += s_indent + ((m_IndentRight < 0) ? (-m_IndentRight * m_Width / 100) : m_IndentRight);
     if (m_Width < MaxLineWidth) m_Width = MaxLineWidth;
@@ -1083,10 +1086,10 @@ wxHtmlCell *wxHtmlContainerCell::FindCellByPos(wxCoord x, wxCoord y,
             if ( cell->IsFormattingCell() )
                 continue;
             int cellY = cell->GetPosY();
-            if (!( y < cellY || (y < cellY + cell->GetHeight() && 
+            if (!( y < cellY || (y < cellY + cell->GetHeight() &&
                                  x < cell->GetPosX() + cell->GetWidth()) ))
                 continue;
-            
+
             c = cell->FindCellByPos(x - cell->GetPosX(), y - cellY, flags);
             if (c) return c;
         }
@@ -1172,7 +1175,7 @@ static bool IsEmptyContainer(wxHtmlContainerCell *cell)
 }
 
 void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom)
-{   
+{
     if ( top )
         SetIndent(0, wxHTML_INDENT_TOP);
     if ( bottom )
@@ -1206,13 +1209,13 @@ void wxHtmlContainerCell::RemoveExtraSpacing(bool top, bool bottom)
                 }
             }
         }
-        
+
         if ( bottom )
         {
             wxArrayPtrVoid arr;
             for ( c = m_Cells; c; c = c->GetNext() )
                 arr.Add((void*)c);
-           
+
             for ( int i = arr.GetCount() - 1; i >= 0; i--)
             {
                 c = (wxHtmlCell*)arr[i];