From 7f3e46099a9bda549cdb85a0aa7b414daad120f9 Mon Sep 17 00:00:00 2001 From: "bernd.mielke%snafu.de" Date: Wed, 21 Mar 2001 06:02:21 +0000 Subject: [PATCH] limit the spread of desired content width in colspans with specified fixed width's bug 42187, it fixes also the regression in bug 2684. r=karnaze sr=attinasi --- .../html/table/src/BasicTableLayoutStrategy.cpp | 17 +++++++++++++++-- layout/tables/BasicTableLayoutStrategy.cpp | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/layout/html/table/src/BasicTableLayoutStrategy.cpp b/layout/html/table/src/BasicTableLayoutStrategy.cpp index 676747995df..f19a4bb2651 100644 --- a/layout/html/table/src/BasicTableLayoutStrategy.cpp +++ b/layout/html/table/src/BasicTableLayoutStrategy.cpp @@ -332,9 +332,9 @@ BasicTableLayoutStrategy::BalanceColumnWidths(nsIPresContext* aPresCont // allocate the rest to auto columns, with some exceptions if ( (tableIsAutoWidth && (perAdjTableWidth - totalAllocated > 0)) || (!tableIsAutoWidth && (totalAllocated < maxWidth)) ) { - PRInt32 numEffCols = mTableFrame->GetEffectiveColCount(); + PRInt32 numEffCols = mTableFrame->GetEffectiveColCount(); PRBool excludePct = (totalCounts[PCT] != numEffCols); - PRBool excludeFix = (totalCounts[PCT] + totalCounts[FIX] < numEffCols); + PRBool excludeFix = (totalCounts[PCT] + totalCounts[FIX] + totalCounts[FIX_ADJ] < numEffCols); PRBool excludePro = (totalCounts[DES_CON] > 0); PRBool exclude0Pro = (totalCounts[MIN_PRO] != num0Proportional); if (tableIsAutoWidth) { @@ -845,6 +845,19 @@ BasicTableLayoutStrategy::ComputeNonPctColspanWidths(PRInt32 aWidthInd colFrame->SetWidth(aWidthIndex + NUM_MAJOR_WIDTHS, newColAdjWidth); colFrame->SetConstrainingCell(aCellFrame); // XXX is this right? } + else { + if((newColAdjWidth > 0) && (FIX == aWidthIndex)) { + if(colFrame->GetWidth(FIX) < 0) { + nscoord desCon = colFrame->GetWidth(DES_CON); + if (desCon > newColAdjWidth) { + newColAdjWidth = desCon; + } + } + if(colFrame->GetWidth(FIX_ADJ) < newColAdjWidth) { + colFrame->SetWidth(FIX_ADJ, PR_MAX(colWidth,newColAdjWidth)); + } + } + } } } diff --git a/layout/tables/BasicTableLayoutStrategy.cpp b/layout/tables/BasicTableLayoutStrategy.cpp index 676747995df..f19a4bb2651 100644 --- a/layout/tables/BasicTableLayoutStrategy.cpp +++ b/layout/tables/BasicTableLayoutStrategy.cpp @@ -332,9 +332,9 @@ BasicTableLayoutStrategy::BalanceColumnWidths(nsIPresContext* aPresCont // allocate the rest to auto columns, with some exceptions if ( (tableIsAutoWidth && (perAdjTableWidth - totalAllocated > 0)) || (!tableIsAutoWidth && (totalAllocated < maxWidth)) ) { - PRInt32 numEffCols = mTableFrame->GetEffectiveColCount(); + PRInt32 numEffCols = mTableFrame->GetEffectiveColCount(); PRBool excludePct = (totalCounts[PCT] != numEffCols); - PRBool excludeFix = (totalCounts[PCT] + totalCounts[FIX] < numEffCols); + PRBool excludeFix = (totalCounts[PCT] + totalCounts[FIX] + totalCounts[FIX_ADJ] < numEffCols); PRBool excludePro = (totalCounts[DES_CON] > 0); PRBool exclude0Pro = (totalCounts[MIN_PRO] != num0Proportional); if (tableIsAutoWidth) { @@ -845,6 +845,19 @@ BasicTableLayoutStrategy::ComputeNonPctColspanWidths(PRInt32 aWidthInd colFrame->SetWidth(aWidthIndex + NUM_MAJOR_WIDTHS, newColAdjWidth); colFrame->SetConstrainingCell(aCellFrame); // XXX is this right? } + else { + if((newColAdjWidth > 0) && (FIX == aWidthIndex)) { + if(colFrame->GetWidth(FIX) < 0) { + nscoord desCon = colFrame->GetWidth(DES_CON); + if (desCon > newColAdjWidth) { + newColAdjWidth = desCon; + } + } + if(colFrame->GetWidth(FIX_ADJ) < newColAdjWidth) { + colFrame->SetWidth(FIX_ADJ, PR_MAX(colWidth,newColAdjWidth)); + } + } + } } }