diff --git a/mozilla/layout/html/table/src/nsTableCellFrame.cpp b/mozilla/layout/html/table/src/nsTableCellFrame.cpp index 7c1078442d1..04a68f60f87 100644 --- a/mozilla/layout/html/table/src/nsTableCellFrame.cpp +++ b/mozilla/layout/html/table/src/nsTableCellFrame.cpp @@ -44,6 +44,23 @@ NS_DEF_PTR(nsIStyleContext); static NS_DEFINE_IID(kIHTMLTableCellElementIID, NS_IHTMLTABLECELLELEMENT_IID); static NS_DEFINE_IID(kIDOMHTMLTableCellElementIID, NS_IDOMHTMLTABLECELLELEMENT_IID); +/** + * Additional frame-state bits + */ +#define NS_TABLE_CELL_FRAME_CONTENT_EMPTY 0x80000000 + +nsTableCellFrame::nsTableCellFrame() +{ + // We initialize mMargin to all -1 so we can easily tell in GetMargin() whether + // it has been initialized + mMargin.SizeTo(-1, -1, -1, -1); +} + +nsTableCellFrame::~nsTableCellFrame() +{ + delete mBorderEdges; +} + NS_IMETHODIMP nsTableCellFrame::Init(nsIPresContext& aPresContext, nsIContent* aContent, @@ -69,6 +86,20 @@ nsTableCellFrame::Init(nsIPresContext& aPresContext, return rv; } +inline PRBool nsTableCellFrame::GetContentEmpty() +{ + return NS_TABLE_CELL_FRAME_CONTENT_EMPTY == (mState & NS_TABLE_CELL_FRAME_CONTENT_EMPTY); +} + +inline void nsTableCellFrame::SetContentEmpty(PRBool aContentEmpty) +{ + if (aContentEmpty) { + mState |= NS_TABLE_CELL_FRAME_CONTENT_EMPTY; + } else { + mState &= ~NS_TABLE_CELL_FRAME_CONTENT_EMPTY; + } +} + void nsTableCellFrame::SetPass1MaxElementSize(const nsSize& aMaxElementSize) { mPass1MaxElementSize.height = aMaxElementSize.height; @@ -130,29 +161,31 @@ void nsTableCellFrame::InitCellFrame(PRInt32 aColIndex) { NS_PRECONDITION(0<=aColIndex, "bad col index arg"); SetColIndex(aColIndex); // this also sets the contents col index - mBorderEdges.mOutsideEdge=PR_FALSE; nsTableFrame* tableFrame=nsnull; // I should be checking my own style context, but border-collapse isn't inheriting correctly nsresult rv = nsTableFrame::GetTableFrame(this, tableFrame); if ((NS_SUCCEEDED(rv)) && (nsnull!=tableFrame)) { if (NS_STYLE_BORDER_COLLAPSE == tableFrame->GetBorderCollapseStyle()) { + mBorderEdges = new nsBorderEdges; + mBorderEdges->mOutsideEdge=PR_FALSE; + PRInt32 rowspan = GetRowSpan(); PRInt32 i; for (i=0; imEdges[NS_SIDE_LEFT].AppendElement(borderToAdd); borderToAdd = new nsBorderEdge(); - mBorderEdges.mEdges[NS_SIDE_RIGHT].AppendElement(borderToAdd); + mBorderEdges->mEdges[NS_SIDE_RIGHT].AppendElement(borderToAdd); } PRInt32 colspan = GetColSpan(); for (i=0; imEdges[NS_SIDE_TOP].AppendElement(borderToAdd); borderToAdd = new nsBorderEdge(); - mBorderEdges.mEdges[NS_SIDE_BOTTOM].AppendElement(borderToAdd); + mBorderEdges->mEdges[NS_SIDE_BOTTOM].AppendElement(borderToAdd); } } mCollapseOffset = nsPoint(0,0); @@ -191,10 +224,11 @@ void nsTableCellFrame::SetBorderEdgeLength(PRUint8 aSide, { if ((NS_SIDE_LEFT==aSide) || (NS_SIDE_RIGHT==aSide)) { + NS_PRECONDITION(mBorderEdges, "no border edges struct"); PRInt32 baseRowIndex; GetRowIndex(baseRowIndex); PRInt32 rowIndex = aIndex-baseRowIndex; - nsBorderEdge *border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(rowIndex)); + nsBorderEdge *border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(rowIndex)); border->mLength = aLength; } else { @@ -254,7 +288,7 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext& aPresContext, else { nsCSSRendering::PaintBorderEdges(aPresContext, aRenderingContext, this, - aDirtyRect, rect, &mBorderEdges, mStyleContext, skipSides); + aDirtyRect, rect, mBorderEdges, mStyleContext, skipSides); } } } @@ -341,6 +375,7 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, nsBorderEdge *aBorder, nscoord aOddAmountToAdd) { + NS_PRECONDITION(mBorderEdges, "no border edges struct"); nsBorderEdge *border = nsnull; switch (aSide) { @@ -349,8 +384,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseColIndex; GetColIndex(baseColIndex); PRInt32 colIndex = aColIndex-baseColIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(colIndex)); - mBorderEdges.mMaxBorderWidth.top = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.top); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(colIndex)); + mBorderEdges->mMaxBorderWidth.top = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.top); break; } @@ -359,8 +394,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseColIndex; GetColIndex(baseColIndex); PRInt32 colIndex = aColIndex-baseColIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(colIndex)); - mBorderEdges.mMaxBorderWidth.bottom = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.bottom); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(colIndex)); + mBorderEdges->mMaxBorderWidth.bottom = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.bottom); break; } @@ -369,8 +404,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseRowIndex; GetRowIndex(baseRowIndex); PRInt32 rowIndex = aRowIndex-baseRowIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(rowIndex)); - mBorderEdges.mMaxBorderWidth.left = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.left); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(rowIndex)); + mBorderEdges->mMaxBorderWidth.left = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.left); break; } @@ -379,8 +414,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseRowIndex; GetRowIndex(baseRowIndex); PRInt32 rowIndex = aRowIndex-baseRowIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(rowIndex)); - mBorderEdges.mMaxBorderWidth.right = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.right); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(rowIndex)); + mBorderEdges->mMaxBorderWidth.right = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.right); break; } } @@ -1092,7 +1127,8 @@ void nsTableCellFrame::GetCellBorder(nsMargin &aBorder, nsTableFrame *aTableFram } if (NS_STYLE_BORDER_COLLAPSE==aTableFrame->GetBorderCollapseStyle()) { - aBorder = mBorderEdges.mMaxBorderWidth; + NS_PRECONDITION(mBorderEdges, "no border edges struct"); + aBorder = mBorderEdges->mMaxBorderWidth; } else { const nsStyleSpacing* spacing; GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing); @@ -1102,12 +1138,13 @@ void nsTableCellFrame::GetCellBorder(nsMargin &aBorder, nsTableFrame *aTableFram void nsTableCellFrame::RecalcLayoutData(nsMargin& aMargin) { + // -1 is our special value we use to tell whether the margin has been + // been initialized + NS_ASSERTION(aMargin.left != -1, "unexpected margin value"); mMargin.left = aMargin.left; mMargin.top = aMargin.top; mMargin.right = aMargin.right; mMargin.bottom = aMargin.bottom; - - mCalculated = NS_OK; } diff --git a/mozilla/layout/html/table/src/nsTableCellFrame.h b/mozilla/layout/html/table/src/nsTableCellFrame.h index 2cdebdd34b0..d6d7f533194 100644 --- a/mozilla/layout/html/table/src/nsTableCellFrame.h +++ b/mozilla/layout/html/table/src/nsTableCellFrame.h @@ -46,7 +46,8 @@ public: // nsISupports NS_DECL_ISUPPORTS_INHERITED - // default constructor supplied by the compiler + nsTableCellFrame(); + ~nsTableCellFrame(); NS_IMETHOD Init(nsIPresContext& aPresContext, nsIContent* aContent, @@ -244,17 +245,12 @@ protected: nsSize mPass1DesiredSize; nsSize mPass1MaxElementSize; - nsresult mCalculated; nsMargin mMargin; - PRBool mIsContentEmpty; // PR_TRUE if the cell's contents take up no space - //XXX: mIsContentEmpty should get yanked in favor of using free a bit on the frame base class - // the FrameState slot (mState; GetFrameState/SetFrameState) - nsPoint mCollapseOffset; public: - nsBorderEdges mBorderEdges; // one list of border segments for each side of the table frame - // used only for the collapsing border model + nsBorderEdges* mBorderEdges; // one list of border segments for each side of the table frame + // used only for the collapsing border model }; @@ -312,7 +308,7 @@ inline nsSize nsTableCellFrame::GetPass1MaxElementSize() const inline NS_METHOD nsTableCellFrame::GetMargin(nsMargin& aMargin) { - if (mCalculated == NS_OK) + if (mMargin.left != -1) { aMargin = mMargin; return NS_OK; @@ -320,16 +316,6 @@ inline NS_METHOD nsTableCellFrame::GetMargin(nsMargin& aMargin) return NS_ERROR_NOT_INITIALIZED; } -inline PRBool nsTableCellFrame::GetContentEmpty() -{ - return mIsContentEmpty; -} - -inline void nsTableCellFrame::SetContentEmpty(PRBool aContentEmpty) -{ - mIsContentEmpty = aContentEmpty; -} - #endif diff --git a/mozilla/layout/html/table/src/nsTableFrame.cpp b/mozilla/layout/html/table/src/nsTableFrame.cpp index 70ff687c4a0..c153560fc6c 100644 --- a/mozilla/layout/html/table/src/nsTableFrame.cpp +++ b/mozilla/layout/html/table/src/nsTableFrame.cpp @@ -1238,7 +1238,7 @@ void nsTableFrame::ComputeLeftBorderForEdgeAt(nsIPresContext& aPresContext, widthToAdd = NSToCoordCeil(p2t); border->mWidth *= NSToCoordCeil(p2t); border->mLength = rowRect.height; - border->mInsideNeighbor = &cellFrame->mBorderEdges; + border->mInsideNeighbor = cellFrame->mBorderEdges; // we need to factor in the table's horizontal borders. // but we can't compute that length here because we don't know how thick top and bottom borders are // see DidComputeHorizontalCollapsingBorders @@ -1372,7 +1372,7 @@ void nsTableFrame::ComputeRightBorderForEdgeAt(nsIPresContext& aPresContext, { nsBorderEdge * tableBorder = (nsBorderEdge *)(mBorderEdges->mEdges[NS_SIDE_RIGHT].ElementAt(aRowIndex)); *tableBorder = border; - tableBorder->mInsideNeighbor = &cellFrame->mBorderEdges; + tableBorder->mInsideNeighbor = cellFrame->mBorderEdges; mBorderEdges->mMaxBorderWidth.right = PR_MAX(border.mWidth, mBorderEdges->mMaxBorderWidth.right); // since the table is our right neightbor, we need to factor in the table's horizontal borders. // can't compute that length here because we don't know how thick top and bottom borders are @@ -1450,7 +1450,7 @@ void nsTableFrame::ComputeTopBorderForEdgeAt(nsIPresContext& aPresContext, widthToAdd = NSToCoordCeil(p2t); border->mWidth *= NSToCoordCeil(p2t); border->mLength = GetColumnWidth(aColIndex); - border->mInsideNeighbor = &cellFrame->mBorderEdges; + border->mInsideNeighbor = cellFrame->mBorderEdges; if (0==aColIndex) { // if we're the first column, factor in the thickness of the left table border nsBorderEdge *leftBorder = (nsBorderEdge *)(mBorderEdges->mEdges[NS_SIDE_LEFT].ElementAt(0)); @@ -1591,7 +1591,7 @@ void nsTableFrame::ComputeBottomBorderForEdgeAt(nsIPresContext& aPresContext, { nsBorderEdge * tableBorder = (nsBorderEdge *)(mBorderEdges->mEdges[NS_SIDE_BOTTOM].ElementAt(aColIndex)); *tableBorder = border; - tableBorder->mInsideNeighbor = &cellFrame->mBorderEdges; + tableBorder->mInsideNeighbor = cellFrame->mBorderEdges; mBorderEdges->mMaxBorderWidth.bottom = PR_MAX(border.mWidth, mBorderEdges->mMaxBorderWidth.bottom); // since the table is our bottom neightbor, we need to factor in the table's vertical borders. PRInt32 lastColIndex = mCellMap->GetColCount()-1; diff --git a/mozilla/layout/tables/nsTableCellFrame.cpp b/mozilla/layout/tables/nsTableCellFrame.cpp index 7c1078442d1..04a68f60f87 100644 --- a/mozilla/layout/tables/nsTableCellFrame.cpp +++ b/mozilla/layout/tables/nsTableCellFrame.cpp @@ -44,6 +44,23 @@ NS_DEF_PTR(nsIStyleContext); static NS_DEFINE_IID(kIHTMLTableCellElementIID, NS_IHTMLTABLECELLELEMENT_IID); static NS_DEFINE_IID(kIDOMHTMLTableCellElementIID, NS_IDOMHTMLTABLECELLELEMENT_IID); +/** + * Additional frame-state bits + */ +#define NS_TABLE_CELL_FRAME_CONTENT_EMPTY 0x80000000 + +nsTableCellFrame::nsTableCellFrame() +{ + // We initialize mMargin to all -1 so we can easily tell in GetMargin() whether + // it has been initialized + mMargin.SizeTo(-1, -1, -1, -1); +} + +nsTableCellFrame::~nsTableCellFrame() +{ + delete mBorderEdges; +} + NS_IMETHODIMP nsTableCellFrame::Init(nsIPresContext& aPresContext, nsIContent* aContent, @@ -69,6 +86,20 @@ nsTableCellFrame::Init(nsIPresContext& aPresContext, return rv; } +inline PRBool nsTableCellFrame::GetContentEmpty() +{ + return NS_TABLE_CELL_FRAME_CONTENT_EMPTY == (mState & NS_TABLE_CELL_FRAME_CONTENT_EMPTY); +} + +inline void nsTableCellFrame::SetContentEmpty(PRBool aContentEmpty) +{ + if (aContentEmpty) { + mState |= NS_TABLE_CELL_FRAME_CONTENT_EMPTY; + } else { + mState &= ~NS_TABLE_CELL_FRAME_CONTENT_EMPTY; + } +} + void nsTableCellFrame::SetPass1MaxElementSize(const nsSize& aMaxElementSize) { mPass1MaxElementSize.height = aMaxElementSize.height; @@ -130,29 +161,31 @@ void nsTableCellFrame::InitCellFrame(PRInt32 aColIndex) { NS_PRECONDITION(0<=aColIndex, "bad col index arg"); SetColIndex(aColIndex); // this also sets the contents col index - mBorderEdges.mOutsideEdge=PR_FALSE; nsTableFrame* tableFrame=nsnull; // I should be checking my own style context, but border-collapse isn't inheriting correctly nsresult rv = nsTableFrame::GetTableFrame(this, tableFrame); if ((NS_SUCCEEDED(rv)) && (nsnull!=tableFrame)) { if (NS_STYLE_BORDER_COLLAPSE == tableFrame->GetBorderCollapseStyle()) { + mBorderEdges = new nsBorderEdges; + mBorderEdges->mOutsideEdge=PR_FALSE; + PRInt32 rowspan = GetRowSpan(); PRInt32 i; for (i=0; imEdges[NS_SIDE_LEFT].AppendElement(borderToAdd); borderToAdd = new nsBorderEdge(); - mBorderEdges.mEdges[NS_SIDE_RIGHT].AppendElement(borderToAdd); + mBorderEdges->mEdges[NS_SIDE_RIGHT].AppendElement(borderToAdd); } PRInt32 colspan = GetColSpan(); for (i=0; imEdges[NS_SIDE_TOP].AppendElement(borderToAdd); borderToAdd = new nsBorderEdge(); - mBorderEdges.mEdges[NS_SIDE_BOTTOM].AppendElement(borderToAdd); + mBorderEdges->mEdges[NS_SIDE_BOTTOM].AppendElement(borderToAdd); } } mCollapseOffset = nsPoint(0,0); @@ -191,10 +224,11 @@ void nsTableCellFrame::SetBorderEdgeLength(PRUint8 aSide, { if ((NS_SIDE_LEFT==aSide) || (NS_SIDE_RIGHT==aSide)) { + NS_PRECONDITION(mBorderEdges, "no border edges struct"); PRInt32 baseRowIndex; GetRowIndex(baseRowIndex); PRInt32 rowIndex = aIndex-baseRowIndex; - nsBorderEdge *border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(rowIndex)); + nsBorderEdge *border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(rowIndex)); border->mLength = aLength; } else { @@ -254,7 +288,7 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext& aPresContext, else { nsCSSRendering::PaintBorderEdges(aPresContext, aRenderingContext, this, - aDirtyRect, rect, &mBorderEdges, mStyleContext, skipSides); + aDirtyRect, rect, mBorderEdges, mStyleContext, skipSides); } } } @@ -341,6 +375,7 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, nsBorderEdge *aBorder, nscoord aOddAmountToAdd) { + NS_PRECONDITION(mBorderEdges, "no border edges struct"); nsBorderEdge *border = nsnull; switch (aSide) { @@ -349,8 +384,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseColIndex; GetColIndex(baseColIndex); PRInt32 colIndex = aColIndex-baseColIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(colIndex)); - mBorderEdges.mMaxBorderWidth.top = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.top); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(colIndex)); + mBorderEdges->mMaxBorderWidth.top = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.top); break; } @@ -359,8 +394,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseColIndex; GetColIndex(baseColIndex); PRInt32 colIndex = aColIndex-baseColIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(colIndex)); - mBorderEdges.mMaxBorderWidth.bottom = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.bottom); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(colIndex)); + mBorderEdges->mMaxBorderWidth.bottom = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.bottom); break; } @@ -369,8 +404,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseRowIndex; GetRowIndex(baseRowIndex); PRInt32 rowIndex = aRowIndex-baseRowIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(rowIndex)); - mBorderEdges.mMaxBorderWidth.left = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.left); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(rowIndex)); + mBorderEdges->mMaxBorderWidth.left = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.left); break; } @@ -379,8 +414,8 @@ void nsTableCellFrame::SetBorderEdge(PRUint8 aSide, PRInt32 baseRowIndex; GetRowIndex(baseRowIndex); PRInt32 rowIndex = aRowIndex-baseRowIndex; - border = (nsBorderEdge *)(mBorderEdges.mEdges[aSide].ElementAt(rowIndex)); - mBorderEdges.mMaxBorderWidth.right = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges.mMaxBorderWidth.right); + border = (nsBorderEdge *)(mBorderEdges->mEdges[aSide].ElementAt(rowIndex)); + mBorderEdges->mMaxBorderWidth.right = PR_MAX(aBorder->mWidth+aOddAmountToAdd, mBorderEdges->mMaxBorderWidth.right); break; } } @@ -1092,7 +1127,8 @@ void nsTableCellFrame::GetCellBorder(nsMargin &aBorder, nsTableFrame *aTableFram } if (NS_STYLE_BORDER_COLLAPSE==aTableFrame->GetBorderCollapseStyle()) { - aBorder = mBorderEdges.mMaxBorderWidth; + NS_PRECONDITION(mBorderEdges, "no border edges struct"); + aBorder = mBorderEdges->mMaxBorderWidth; } else { const nsStyleSpacing* spacing; GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing); @@ -1102,12 +1138,13 @@ void nsTableCellFrame::GetCellBorder(nsMargin &aBorder, nsTableFrame *aTableFram void nsTableCellFrame::RecalcLayoutData(nsMargin& aMargin) { + // -1 is our special value we use to tell whether the margin has been + // been initialized + NS_ASSERTION(aMargin.left != -1, "unexpected margin value"); mMargin.left = aMargin.left; mMargin.top = aMargin.top; mMargin.right = aMargin.right; mMargin.bottom = aMargin.bottom; - - mCalculated = NS_OK; } diff --git a/mozilla/layout/tables/nsTableCellFrame.h b/mozilla/layout/tables/nsTableCellFrame.h index 2cdebdd34b0..d6d7f533194 100644 --- a/mozilla/layout/tables/nsTableCellFrame.h +++ b/mozilla/layout/tables/nsTableCellFrame.h @@ -46,7 +46,8 @@ public: // nsISupports NS_DECL_ISUPPORTS_INHERITED - // default constructor supplied by the compiler + nsTableCellFrame(); + ~nsTableCellFrame(); NS_IMETHOD Init(nsIPresContext& aPresContext, nsIContent* aContent, @@ -244,17 +245,12 @@ protected: nsSize mPass1DesiredSize; nsSize mPass1MaxElementSize; - nsresult mCalculated; nsMargin mMargin; - PRBool mIsContentEmpty; // PR_TRUE if the cell's contents take up no space - //XXX: mIsContentEmpty should get yanked in favor of using free a bit on the frame base class - // the FrameState slot (mState; GetFrameState/SetFrameState) - nsPoint mCollapseOffset; public: - nsBorderEdges mBorderEdges; // one list of border segments for each side of the table frame - // used only for the collapsing border model + nsBorderEdges* mBorderEdges; // one list of border segments for each side of the table frame + // used only for the collapsing border model }; @@ -312,7 +308,7 @@ inline nsSize nsTableCellFrame::GetPass1MaxElementSize() const inline NS_METHOD nsTableCellFrame::GetMargin(nsMargin& aMargin) { - if (mCalculated == NS_OK) + if (mMargin.left != -1) { aMargin = mMargin; return NS_OK; @@ -320,16 +316,6 @@ inline NS_METHOD nsTableCellFrame::GetMargin(nsMargin& aMargin) return NS_ERROR_NOT_INITIALIZED; } -inline PRBool nsTableCellFrame::GetContentEmpty() -{ - return mIsContentEmpty; -} - -inline void nsTableCellFrame::SetContentEmpty(PRBool aContentEmpty) -{ - mIsContentEmpty = aContentEmpty; -} - #endif diff --git a/mozilla/layout/tables/nsTableFrame.cpp b/mozilla/layout/tables/nsTableFrame.cpp index 70ff687c4a0..c153560fc6c 100644 --- a/mozilla/layout/tables/nsTableFrame.cpp +++ b/mozilla/layout/tables/nsTableFrame.cpp @@ -1238,7 +1238,7 @@ void nsTableFrame::ComputeLeftBorderForEdgeAt(nsIPresContext& aPresContext, widthToAdd = NSToCoordCeil(p2t); border->mWidth *= NSToCoordCeil(p2t); border->mLength = rowRect.height; - border->mInsideNeighbor = &cellFrame->mBorderEdges; + border->mInsideNeighbor = cellFrame->mBorderEdges; // we need to factor in the table's horizontal borders. // but we can't compute that length here because we don't know how thick top and bottom borders are // see DidComputeHorizontalCollapsingBorders @@ -1372,7 +1372,7 @@ void nsTableFrame::ComputeRightBorderForEdgeAt(nsIPresContext& aPresContext, { nsBorderEdge * tableBorder = (nsBorderEdge *)(mBorderEdges->mEdges[NS_SIDE_RIGHT].ElementAt(aRowIndex)); *tableBorder = border; - tableBorder->mInsideNeighbor = &cellFrame->mBorderEdges; + tableBorder->mInsideNeighbor = cellFrame->mBorderEdges; mBorderEdges->mMaxBorderWidth.right = PR_MAX(border.mWidth, mBorderEdges->mMaxBorderWidth.right); // since the table is our right neightbor, we need to factor in the table's horizontal borders. // can't compute that length here because we don't know how thick top and bottom borders are @@ -1450,7 +1450,7 @@ void nsTableFrame::ComputeTopBorderForEdgeAt(nsIPresContext& aPresContext, widthToAdd = NSToCoordCeil(p2t); border->mWidth *= NSToCoordCeil(p2t); border->mLength = GetColumnWidth(aColIndex); - border->mInsideNeighbor = &cellFrame->mBorderEdges; + border->mInsideNeighbor = cellFrame->mBorderEdges; if (0==aColIndex) { // if we're the first column, factor in the thickness of the left table border nsBorderEdge *leftBorder = (nsBorderEdge *)(mBorderEdges->mEdges[NS_SIDE_LEFT].ElementAt(0)); @@ -1591,7 +1591,7 @@ void nsTableFrame::ComputeBottomBorderForEdgeAt(nsIPresContext& aPresContext, { nsBorderEdge * tableBorder = (nsBorderEdge *)(mBorderEdges->mEdges[NS_SIDE_BOTTOM].ElementAt(aColIndex)); *tableBorder = border; - tableBorder->mInsideNeighbor = &cellFrame->mBorderEdges; + tableBorder->mInsideNeighbor = cellFrame->mBorderEdges; mBorderEdges->mMaxBorderWidth.bottom = PR_MAX(border.mWidth, mBorderEdges->mMaxBorderWidth.bottom); // since the table is our bottom neightbor, we need to factor in the table's vertical borders. PRInt32 lastColIndex = mCellMap->GetColCount()-1;