diff --git a/mozilla/layout/html/table/src/BasicTableLayoutStrategy.cpp b/mozilla/layout/html/table/src/BasicTableLayoutStrategy.cpp index 58123dd288b..987e1444227 100644 --- a/mozilla/layout/html/table/src/BasicTableLayoutStrategy.cpp +++ b/mozilla/layout/html/table/src/BasicTableLayoutStrategy.cpp @@ -175,15 +175,20 @@ PRBool BasicTableLayoutStrategy::BalanceColumnWidths(nsIStyleContext *aTableStyl } // Step 2 - determine how much space is really available - PRInt32 availWidth = aMaxWidth - mFixedTableWidth; - if (PR_FALSE==tableIsAutoWidth) - availWidth = specifiedTableWidth - mFixedTableWidth; - + PRInt32 availWidth = aMaxWidth; // start with the max width I've been given + if (NS_UNCONSTRAINEDSIZE!=availWidth) // if that's not infinite, subtract the fixed columns + availWidth -= mFixedTableWidth; // that have already been accounted for + if (PR_FALSE==tableIsAutoWidth) // if the table has a specified width + availWidth = specifiedTableWidth - mFixedTableWidth; // use it, minus the fixed columns already accounted for + //if (0!=mMinTableWidth && mMinTableWidth>availWidth) // if the computed available size is too small + //availWidth = mMinTableWidth; // bump it up to the min + // Step 3 - assign the width of all proportional-width columns in the remaining space if (PR_TRUE==gsDebug) { printf ("BalanceColumnWidths with aMaxWidth = %d, availWidth = %d\n", aMaxWidth, availWidth); printf ("\t\t specifiedTW = %d, min/maxTW = %d %d\n", specifiedTableWidth, mMinTableWidth, mMaxTableWidth); + printf ("\t\t reflow reason = %d\n", aReflowState.reason); } if (PR_TRUE==gsDebug) { @@ -449,7 +454,7 @@ PRBool BasicTableLayoutStrategy::AssignPreliminaryColumnWidths() // now, post-process the computed values based on the table attributes - // first, factor in min/max values of spanning cells proportionately. + // first, factor in max values of spanning cells proportionately. // We can't do this above in the first loop, because we don't have enough information // to determine the proportion each column gets from spanners. if (nsnull!=spanList) @@ -474,72 +479,11 @@ PRBool BasicTableLayoutStrategy::AssignPreliminaryColumnWidths() if (nsnull==nextColFrame) break; spanInfo->effectiveMaxWidthOfSpannedCols += nextColFrame->GetEffectiveMaxColWidth(); - spanInfo->effectiveMinWidthOfSpannedCols += nextColFrame->GetEffectiveMinColWidth(); } - if (gsDebug) printf("min total = %d, max total = %d\n", - spanInfo->effectiveMinWidthOfSpannedCols, spanInfo->effectiveMaxWidthOfSpannedCols); + if (gsDebug) printf("effective max total = %d\n", spanInfo->effectiveMaxWidthOfSpannedCols); } nsTableColFrame *colFrame = mTableFrame->GetColFrame(colIndex); - // compute the spanning cell's contribution to the column min width nscoord colMinWidth = colFrame->GetMinColWidth(); - nscoord spanCellMinWidth; - if (0!=spanInfo->effectiveMinWidthOfSpannedCols) - { - spanCellMinWidth = (spanInfo->cellMinWidth * colFrame->GetEffectiveMinColWidth()) / - (spanInfo->effectiveMinWidthOfSpannedCols); - if (gsDebug==PR_TRUE) - printf ("spanCellMinWidth portion = %d \n", spanCellMinWidth); - if (colMinWidth < spanCellMinWidth) - { - colFrame->SetMinColWidth(spanCellMinWidth); // set the new min width for the col - mMinTableWidth += spanCellMinWidth-colMinWidth; // add in the col min width delta - if (gsDebug) - { - printf("min table width now %d\n", mMinTableWidth); - printf ("for spanning cell into col %d with remaining span=%d, old min = %d, new min = %d\n", - colIndex, spanInfo->span, colMinWidth, spanCellMinWidth); - } - // if the new min width is greater than the desired width, bump up the desired width - nscoord colMaxWidth = colFrame->GetMaxColWidth(); - if (colMaxWidth < spanCellMinWidth) - { - colFrame->SetMaxColWidth(spanCellMinWidth); - mMaxTableWidth += spanCellMinWidth - colMaxWidth; - if (gsDebug) - printf("also set max from %d to %d, set maxTableWidth to %d\n", - colMaxWidth, spanCellMinWidth, mMaxTableWidth); - } - // if the new min width is greater than the actual col width, bump up the col width too - nscoord colWidth = mTableFrame->GetColumnWidth(colIndex); - if (colWidth < spanCellMinWidth) - { - mTableFrame->SetColumnWidth(colIndex, spanCellMinWidth); - if (gsDebug) - printf("also set computed col width from %d to %d\n", colWidth, spanCellMinWidth); - } - } - } - else - { - if (colMinWidth < spanCellMinWidth) - { - spanCellMinWidth = spanInfo->cellMinWidth/spanInfo->initialColSpan; - colFrame->SetMinColWidth(spanCellMinWidth); - if (gsDebug==PR_TRUE) - printf ("spanCellMinWidth portion = %d, old min = %d\n", - spanCellMinWidth, colMinWidth); - // if the new min width is greater than the desired width, bump up the desired width - nscoord colMaxWidth = colFrame->GetMaxColWidth(); - if (colMaxWidth < spanCellMinWidth) - { - colFrame->SetMaxColWidth(spanCellMinWidth); - if (gsDebug) - printf("also set max from %d to %d\n", colMaxWidth, spanCellMinWidth); - } - } - } - - // compute the spanning cell's contribution to the column max width nscoord colMaxWidth = colFrame->GetMaxColWidth(); nscoord spanCellMaxWidth; @@ -554,7 +498,7 @@ PRBool BasicTableLayoutStrategy::AssignPreliminaryColumnWidths() // make sure we're at least as big as our min spanCellMaxWidth = PR_MAX(spanCellMaxWidth, colMinWidth); colFrame->SetMaxColWidth(spanCellMaxWidth); // set the new max width for the col - mMaxTableWidth += spanCellMaxWidth-colMaxWidth; // add in the col max width delta + //mMaxTableWidth += spanCellMaxWidth-colMaxWidth; // add in the col max width delta mTableFrame->SetColumnWidth(colIndex, spanCellMaxWidth); // set the column to the new desired max width if (gsDebug==PR_TRUE) { @@ -728,7 +672,7 @@ PRBool BasicTableLayoutStrategy::BalanceProportionalColumns(const nsReflowState& result = BalanceColumnsTableFits(aReflowState, aAvailWidth, aMaxWidth, aTableSpecifiedWidth, aTableIsAutoWidth); } - else if (mMinTableWidth > actualMaxWidth) + else if (mMinTableWidth >= actualMaxWidth) { // the table doesn't fit in the available space if (gsDebug) printf (" * auto table minTW does not fit, calling SetColumnsToMinWidth\n"); result = SetColumnsToMinWidth(); diff --git a/mozilla/layout/tables/BasicTableLayoutStrategy.cpp b/mozilla/layout/tables/BasicTableLayoutStrategy.cpp index 58123dd288b..987e1444227 100644 --- a/mozilla/layout/tables/BasicTableLayoutStrategy.cpp +++ b/mozilla/layout/tables/BasicTableLayoutStrategy.cpp @@ -175,15 +175,20 @@ PRBool BasicTableLayoutStrategy::BalanceColumnWidths(nsIStyleContext *aTableStyl } // Step 2 - determine how much space is really available - PRInt32 availWidth = aMaxWidth - mFixedTableWidth; - if (PR_FALSE==tableIsAutoWidth) - availWidth = specifiedTableWidth - mFixedTableWidth; - + PRInt32 availWidth = aMaxWidth; // start with the max width I've been given + if (NS_UNCONSTRAINEDSIZE!=availWidth) // if that's not infinite, subtract the fixed columns + availWidth -= mFixedTableWidth; // that have already been accounted for + if (PR_FALSE==tableIsAutoWidth) // if the table has a specified width + availWidth = specifiedTableWidth - mFixedTableWidth; // use it, minus the fixed columns already accounted for + //if (0!=mMinTableWidth && mMinTableWidth>availWidth) // if the computed available size is too small + //availWidth = mMinTableWidth; // bump it up to the min + // Step 3 - assign the width of all proportional-width columns in the remaining space if (PR_TRUE==gsDebug) { printf ("BalanceColumnWidths with aMaxWidth = %d, availWidth = %d\n", aMaxWidth, availWidth); printf ("\t\t specifiedTW = %d, min/maxTW = %d %d\n", specifiedTableWidth, mMinTableWidth, mMaxTableWidth); + printf ("\t\t reflow reason = %d\n", aReflowState.reason); } if (PR_TRUE==gsDebug) { @@ -449,7 +454,7 @@ PRBool BasicTableLayoutStrategy::AssignPreliminaryColumnWidths() // now, post-process the computed values based on the table attributes - // first, factor in min/max values of spanning cells proportionately. + // first, factor in max values of spanning cells proportionately. // We can't do this above in the first loop, because we don't have enough information // to determine the proportion each column gets from spanners. if (nsnull!=spanList) @@ -474,72 +479,11 @@ PRBool BasicTableLayoutStrategy::AssignPreliminaryColumnWidths() if (nsnull==nextColFrame) break; spanInfo->effectiveMaxWidthOfSpannedCols += nextColFrame->GetEffectiveMaxColWidth(); - spanInfo->effectiveMinWidthOfSpannedCols += nextColFrame->GetEffectiveMinColWidth(); } - if (gsDebug) printf("min total = %d, max total = %d\n", - spanInfo->effectiveMinWidthOfSpannedCols, spanInfo->effectiveMaxWidthOfSpannedCols); + if (gsDebug) printf("effective max total = %d\n", spanInfo->effectiveMaxWidthOfSpannedCols); } nsTableColFrame *colFrame = mTableFrame->GetColFrame(colIndex); - // compute the spanning cell's contribution to the column min width nscoord colMinWidth = colFrame->GetMinColWidth(); - nscoord spanCellMinWidth; - if (0!=spanInfo->effectiveMinWidthOfSpannedCols) - { - spanCellMinWidth = (spanInfo->cellMinWidth * colFrame->GetEffectiveMinColWidth()) / - (spanInfo->effectiveMinWidthOfSpannedCols); - if (gsDebug==PR_TRUE) - printf ("spanCellMinWidth portion = %d \n", spanCellMinWidth); - if (colMinWidth < spanCellMinWidth) - { - colFrame->SetMinColWidth(spanCellMinWidth); // set the new min width for the col - mMinTableWidth += spanCellMinWidth-colMinWidth; // add in the col min width delta - if (gsDebug) - { - printf("min table width now %d\n", mMinTableWidth); - printf ("for spanning cell into col %d with remaining span=%d, old min = %d, new min = %d\n", - colIndex, spanInfo->span, colMinWidth, spanCellMinWidth); - } - // if the new min width is greater than the desired width, bump up the desired width - nscoord colMaxWidth = colFrame->GetMaxColWidth(); - if (colMaxWidth < spanCellMinWidth) - { - colFrame->SetMaxColWidth(spanCellMinWidth); - mMaxTableWidth += spanCellMinWidth - colMaxWidth; - if (gsDebug) - printf("also set max from %d to %d, set maxTableWidth to %d\n", - colMaxWidth, spanCellMinWidth, mMaxTableWidth); - } - // if the new min width is greater than the actual col width, bump up the col width too - nscoord colWidth = mTableFrame->GetColumnWidth(colIndex); - if (colWidth < spanCellMinWidth) - { - mTableFrame->SetColumnWidth(colIndex, spanCellMinWidth); - if (gsDebug) - printf("also set computed col width from %d to %d\n", colWidth, spanCellMinWidth); - } - } - } - else - { - if (colMinWidth < spanCellMinWidth) - { - spanCellMinWidth = spanInfo->cellMinWidth/spanInfo->initialColSpan; - colFrame->SetMinColWidth(spanCellMinWidth); - if (gsDebug==PR_TRUE) - printf ("spanCellMinWidth portion = %d, old min = %d\n", - spanCellMinWidth, colMinWidth); - // if the new min width is greater than the desired width, bump up the desired width - nscoord colMaxWidth = colFrame->GetMaxColWidth(); - if (colMaxWidth < spanCellMinWidth) - { - colFrame->SetMaxColWidth(spanCellMinWidth); - if (gsDebug) - printf("also set max from %d to %d\n", colMaxWidth, spanCellMinWidth); - } - } - } - - // compute the spanning cell's contribution to the column max width nscoord colMaxWidth = colFrame->GetMaxColWidth(); nscoord spanCellMaxWidth; @@ -554,7 +498,7 @@ PRBool BasicTableLayoutStrategy::AssignPreliminaryColumnWidths() // make sure we're at least as big as our min spanCellMaxWidth = PR_MAX(spanCellMaxWidth, colMinWidth); colFrame->SetMaxColWidth(spanCellMaxWidth); // set the new max width for the col - mMaxTableWidth += spanCellMaxWidth-colMaxWidth; // add in the col max width delta + //mMaxTableWidth += spanCellMaxWidth-colMaxWidth; // add in the col max width delta mTableFrame->SetColumnWidth(colIndex, spanCellMaxWidth); // set the column to the new desired max width if (gsDebug==PR_TRUE) { @@ -728,7 +672,7 @@ PRBool BasicTableLayoutStrategy::BalanceProportionalColumns(const nsReflowState& result = BalanceColumnsTableFits(aReflowState, aAvailWidth, aMaxWidth, aTableSpecifiedWidth, aTableIsAutoWidth); } - else if (mMinTableWidth > actualMaxWidth) + else if (mMinTableWidth >= actualMaxWidth) { // the table doesn't fit in the available space if (gsDebug) printf (" * auto table minTW does not fit, calling SetColumnsToMinWidth\n"); result = SetColumnsToMinWidth();