]> git.saurik.com Git - wxWidgets.git/commitdiff
tables code fixes
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 26 Aug 2001 14:50:20 +0000 (14:50 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 26 Aug 2001 14:50:20 +0000 (14:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11489 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/html/htmlcell.cpp
src/html/m_tables.cpp

index 135e85544d8f498fc08a44ecf7826702448d6e4e..3f8e3b1f4f259a143d124cccf95ed0b6e17d709f 100644 (file)
@@ -103,7 +103,7 @@ void wxHtmlCell::GetHorizontalConstraints(int *left, int *right) const
     if (left)
         *left = m_PosX;
     if (right)
-        *right = m_PosX + m_Width - 1;
+        *right = m_PosX + m_Width;
 }
 
 
@@ -233,10 +233,22 @@ bool wxHtmlContainerCell::AdjustPagebreak(int *pagebreak) const
 
 void wxHtmlContainerCell::Layout(int w)
 {
-    if (m_LastLayout == w)
+    wxHtmlCell::Layout(w);
+
+    if (m_LastLayout == w) return;
+    
+    // VS: Any attempt to layout with negative or zero width leads to hell,
+    // but we can't ignore such attempts completely, since it sometimes
+    // happen (e.g. when trying how small a table can be). The best thing we
+    // can do is to set the width of child cells to zero
+    if (w < 1) 
     {
-        wxHtmlCell::Layout(w);
-        return;
+       m_Width = 0;
+       for (wxHtmlCell *cell = m_Cells; cell; cell = cell->GetNext())
+            cell->Layout(0);
+            // this does two things: it recursively calls this code on all child 
+            // contrainers and resets children's position to (0,0)
+       return;
     }
 
     wxHtmlCell *cell = m_Cells, *line = m_Cells;
@@ -378,8 +390,6 @@ void wxHtmlContainerCell::Layout(int w)
     if (m_Width < MaxLineWidth) m_Width = MaxLineWidth;
 
     m_LastLayout = w;
-
-    wxHtmlCell::Layout(w);
 }
 
 
@@ -576,6 +586,9 @@ void wxHtmlContainerCell::GetHorizontalConstraints(int *left, int *right) const
             cright = r;
     }  
 
+    cleft -= (m_IndentLeft < 0) ? (-m_IndentLeft * m_Width / 100) : m_IndentLeft;
+    cright += (m_IndentRight < 0) ? (-m_IndentRight * m_Width / 100) : m_IndentRight;
+
     if (left)
         *left = cleft;
     if (right)
index 4f9af45eeb90552c6bd239db1f7b2e1b8ed8d868..a9c560ea443933d8d036921462755f4404c6d726 100644 (file)
@@ -343,8 +343,6 @@ void wxHtmlTableCell::ComputeMinMaxWidths()
     
     int left, right, width;
 
-    m_ColsInfo[0].minWidth = 0; // avoid recursion
-    Layout(1);
     for (int c = 0; c < m_NumCols; c++)
     {
         for (int r = 0; r < m_NumRows; r++)
@@ -352,12 +350,13 @@ void wxHtmlTableCell::ComputeMinMaxWidths()
             cellStruct& cell = m_CellInfo[r][c];
             if (cell.flag == cellUsed)
             {
+                cell.cont->Layout(2*m_Padding + 1);
                 cell.cont->GetHorizontalConstraints(&left, &right);
-                width = right - left + 1;
+                width = right - left;
+                width -= (cell.colspan-1) * m_Spacing;
                 // HTML 4.0 says it is acceptable to distribute min/max
                 // width of spanning cells evently
                 width /= cell.colspan;
-                width += m_Spacing + 2*m_Padding;
                 for (int j = 0; j < cell.colspan; j++)
                     if (width > m_ColsInfo[c+j].minWidth)
                         m_ColsInfo[c+j].minWidth = width;
@@ -373,6 +372,8 @@ void wxHtmlTableCell::ComputeMinMaxWidths()
 void wxHtmlTableCell::Layout(int w)
 {
     ComputeMinMaxWidths();
+    
+    wxHtmlCell::Layout(w);
 
     /*