Fix for 3974263 (and possibly others). Don't let fixed tables use maxint as their...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Feb 2005 19:37:48 +0000 (19:37 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Feb 2005 19:37:48 +0000 (19:37 +0000)
cells have percentage values.

        Reviewed by kocienda

        * khtml/misc/arena.cpp:
        (ArenaAllocate):
        * khtml/rendering/table_layout.cpp:
        (FixedTableLayout::calcWidthArray):
        (FixedTableLayout::calcMinMaxWidth):
        (AutoTableLayout::layout):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8630 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/misc/arena.cpp
WebCore/khtml/rendering/table_layout.cpp

index fe042719ea83c52ca3a39d0da68a198deca15ef6..ca8e7f0ffb191b1161435b8076d03d0a03c60ae1 100644 (file)
@@ -1,3 +1,17 @@
+2005-02-18  David Hyatt  <hyatt@apple.com>
+
+       Fix for 3974263 (and possibly others).  Don't let fixed tables use maxint as their maxwidth when some
+       cells have percentage values.
+       
+        Reviewed by kocienda
+
+        * khtml/misc/arena.cpp:
+        (ArenaAllocate):
+        * khtml/rendering/table_layout.cpp:
+        (FixedTableLayout::calcWidthArray):
+        (FixedTableLayout::calcMinMaxWidth):
+        (AutoTableLayout::layout):
+
 2005-02-17  Darin Adler  <darin@apple.com>
 
         Reviewed by Kevin.
index cc820b84c33b38790d6c7691ad99f25c289ebcb7..1121bbba160bed1f8c1910380126c4be5740d343 100644 (file)
@@ -137,11 +137,11 @@ void* ArenaAllocate(ArenaPool *pool, unsigned int nb)
 
     /* attempt to allocate from arena_freelist */
     {
-        Arena *p; /* previous pointer, for unlinking from freelist */
+        Arena *p = NULL; /* previous pointer, for unlinking from freelist */
 
-        for ( a = p = arena_freelist; a != NULL ; p = a, a = a->next ) {
+        for ( a = arena_freelist; a != NULL ; p = a, a = a->next ) {
             if ( a->base +nb <= a->limit )  {
-                if ( p == arena_freelist )
+                if ( p == NULL )
                     arena_freelist = a->next;
                 else
                     p->next = a->next;
index de63e5869a122a428690f8ebad2bdc6264dc429c..50898fa105755a0af1c02f4f173384972b46f9de 100644 (file)
@@ -89,7 +89,7 @@ FixedTableLayout::~FixedTableLayout()
 {
 }
 
-int FixedTableLayout::calcWidthArray( int tableWidth )
+int FixedTableLayout::calcWidthArray(int tableWidth)
 {
     int usedWidth = 0;
 
@@ -225,16 +225,15 @@ int FixedTableLayout::calcWidthArray( int tableWidth )
 
 void FixedTableLayout::calcMinMaxWidth()
 {
+    // FIXME: This entire calculation is incorrect for both minwidth and maxwidth.
+    
     // we might want to wait until we have all of the first row before
     // layouting for the first time.
 
     // only need to calculate the minimum width as the sum of the
     // cols/cells with a fixed width.
     //
-    // The maximum width is kMax( minWidth, tableWidth ) if table
-    // width is fixed. If table width is percent, we set maxWidth to
-    // unlimited.
-
+    // The maximum width is kMax( minWidth, tableWidth ).
     int bs = table->bordersPaddingAndSpacing();
     
     int tableWidth = table->style()->width().type == Fixed ? table->style()->width().value - bs : 0;
@@ -242,21 +241,6 @@ void FixedTableLayout::calcMinMaxWidth()
 
     table->m_minWidth = kMax( mw, tableWidth );
     table->m_maxWidth = table->m_minWidth;
-    
-    if ( !tableWidth ) {
-       bool haveNonFixed = false;
-       for ( unsigned int i = 0; i < width.size(); i++ ) {
-           if ( !(width[i].type == Fixed) ) {
-               haveNonFixed = true;
-               break;
-           }
-       }
-       if ( haveNonFixed )
-           table->m_maxWidth = INT_MAX;
-    }
-#ifdef DEBUG_LAYOUT
-    qDebug("FixedTableLayout::calcMinMaxWidth: minWidth=%d, maxWidth=%d", table->m_minWidth, table->m_maxWidth );
-#endif
 }
 
 void FixedTableLayout::layout()
@@ -894,7 +878,7 @@ void AutoTableLayout::layout()
     int totalPercent = 0;
     int allocVariable = 0;
 
-    // fill up every cell with it's minWidth
+    // fill up every cell with its minWidth
     for ( int i = 0; i < nEffCols; i++ ) {
        int w = layoutStruct[i].effMinWidth;
        layoutStruct[i].calcWidth = w;