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;