From b9b928f869bd4f4d6557199c0a971fd8e792301b Mon Sep 17 00:00:00 2001 From: kostello Date: Tue, 26 May 1998 20:57:24 +0000 Subject: [PATCH] Updated Table Border code to render HTML3.2 compatible borders (no longer using the cool, CSS borders). Fixed Table but submitted by Isaac David Guedalia . git-svn-id: svn://10.0.0.236/trunk@2288 18797224-902f-48f8-a5cc-f745e15eee43 --- .../html/table/src/nsTableCellFrame.cpp | 52 +++++-- .../layout/html/table/src/nsTableCellFrame.h | 2 +- .../layout/html/table/src/nsTableFrame.cpp | 141 +++++++++++++++++- mozilla/layout/html/table/src/nsTableFrame.h | 7 + mozilla/layout/tables/nsTableCellFrame.cpp | 52 +++++-- mozilla/layout/tables/nsTableCellFrame.h | 2 +- mozilla/layout/tables/nsTableFrame.cpp | 141 +++++++++++++++++- mozilla/layout/tables/nsTableFrame.h | 7 + 8 files changed, 372 insertions(+), 32 deletions(-) diff --git a/mozilla/layout/html/table/src/nsTableCellFrame.cpp b/mozilla/layout/html/table/src/nsTableCellFrame.cpp index 6e4cccfc4c0..fee5d64bdeb 100644 --- a/mozilla/layout/html/table/src/nsTableCellFrame.cpp +++ b/mozilla/layout/html/table/src/nsTableCellFrame.cpp @@ -380,7 +380,7 @@ nsTableCellFrame::CreateContinuingFrame(nsIPresContext* aPresContext, * Update the border style to map to the HTML border style * */ -void nsTableCellFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth) +void nsTableCellFrame::MapHTMLBorderStyle(nsIPresContext* aPresContext, nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth) { nsStyleCoord width; width.SetCoordValue(aBorderWidth); @@ -391,16 +391,48 @@ void nsTableCellFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aSpacingStyle.mBorderStyle[NS_SIDE_TOP] = NS_STYLE_BORDER_STYLE_INSET; aSpacingStyle.mBorderStyle[NS_SIDE_LEFT] = NS_STYLE_BORDER_STYLE_INSET; - aSpacingStyle.mBorderStyle[NS_SIDE_BOTTOM] = NS_STYLE_BORDER_STYLE_OUTSET; - aSpacingStyle.mBorderStyle[NS_SIDE_RIGHT] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_BOTTOM] = NS_STYLE_BORDER_STYLE_INSET; + aSpacingStyle.mBorderStyle[NS_SIDE_RIGHT] = NS_STYLE_BORDER_STYLE_INSET; - NS_ColorNameToRGB("white",&aSpacingStyle.mBorderColor[NS_SIDE_TOP]); - NS_ColorNameToRGB("white",&aSpacingStyle.mBorderColor[NS_SIDE_LEFT]); + nsTableFrame* tableFrame = GetTableFrame(); + nsIStyleContext* styleContext = nsnull; + + tableFrame->GetStyleContext(aPresContext,styleContext); + + nsStyleColor* colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); - // This should be the background color of the tables - // container - NS_ColorNameToRGB("gray",&aSpacingStyle.mBorderColor[NS_SIDE_BOTTOM]); - NS_ColorNameToRGB("gray",&aSpacingStyle.mBorderColor[NS_SIDE_RIGHT]); + // Look until we find a style context with a NON-transparent background color + while (styleContext) + { + if ((colorData->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT)!=0) + { + nsIStyleContext* temp = styleContext; + styleContext = styleContext->GetParent(); + NS_RELEASE(temp); + colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); + } + else + { + break; + } + } + + // Yaahoo, we found a style context which has a background color + + nscolor borderColor = 0xFFC0C0C0; + + if (styleContext != nsnull) + borderColor = colorData->mBackgroundColor; + + // if the border color is white, then shift to grey + if (borderColor == 0xFFFFFFFF) + borderColor = 0xFFC0C0C0; + + + aSpacingStyle.mBorderColor[NS_SIDE_TOP] = + aSpacingStyle.mBorderColor[NS_SIDE_LEFT] = + aSpacingStyle.mBorderColor[NS_SIDE_BOTTOM] = + aSpacingStyle.mBorderColor[NS_SIDE_RIGHT] = borderColor; } @@ -489,7 +521,7 @@ void nsTableCellFrame::MapBorderMarginPadding(nsIPresContext* aPresContext) border = nscoord(p2t*(float)intValue); } } - MapHTMLBorderStyle(*spacingData,border); + MapHTMLBorderStyle(aPresContext, *spacingData,border); } void nsTableCellFrame::MapTextAttributes(nsIPresContext* aPresContext) diff --git a/mozilla/layout/html/table/src/nsTableCellFrame.h b/mozilla/layout/html/table/src/nsTableCellFrame.h index 707552455e3..32f5e7e1301 100644 --- a/mozilla/layout/html/table/src/nsTableCellFrame.h +++ b/mozilla/layout/html/table/src/nsTableCellFrame.h @@ -91,7 +91,7 @@ protected: NS_METHOD DidSetStyleContext(nsIPresContext* aPresContext); void MapTextAttributes(nsIPresContext* aPresContext); void MapBorderMarginPadding(nsIPresContext* aPresContext); - void MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth); + void MapHTMLBorderStyle(nsIPresContext* aPresContext,nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth); PRBool ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult); }; diff --git a/mozilla/layout/html/table/src/nsTableFrame.cpp b/mozilla/layout/html/table/src/nsTableFrame.cpp index 3c926fcee83..8b47263f943 100644 --- a/mozilla/layout/html/table/src/nsTableFrame.cpp +++ b/mozilla/layout/html/table/src/nsTableFrame.cpp @@ -40,6 +40,7 @@ #include "prinrval.h" #include "nsIPtr.h" #include "nsIView.h" +#include "nsHTMLAtoms.h" #ifdef NS_DEBUG static PRBool gsDebug = PR_FALSE; @@ -268,8 +269,11 @@ void nsTableFrame::RecalcLayoutData() { for (col = 0; col < colCount; col++) { + nsTableCell* cell = nsnull; CellData* cellData = cellMap->GetCellAt(row,col); - nsTableCell* cell = cellData->mCell; + + if (cellData) + cell = cellData->mCell; if (!cell) continue; @@ -336,7 +340,7 @@ void nsTableFrame::RecalcLayoutData() if (c != col) { cellData = cellMap->GetCellAt(r1,c); - if (cellData->mCell != above) + if ((cellData != nsnull) && (cellData->mCell != above)) { above = cellData->mCell; if (above != nsnull) @@ -353,7 +357,7 @@ void nsTableFrame::RecalcLayoutData() { // Add bottom edge cells cellData = cellMap->GetCellAt(r2,c); - if (cellData->mCell != below) + if ((cellData != nsnull) && cellData->mCell != below) { below = cellData->mCell; if (below != nsnull) @@ -377,7 +381,7 @@ void nsTableFrame::RecalcLayoutData() if (r != row) { cellData = cellMap->GetCellAt(r,c1); - if (cellData->mCell != left) + if ((cellData != nsnull) && (cellData->mCell != left)) { left = cellData->mCell; if (left != nsnull) @@ -394,7 +398,7 @@ void nsTableFrame::RecalcLayoutData() { // Add right edge cells cellData = cellMap->GetCellAt(r,c2); - if (cellData->mCell != right) + if ((cellData != nsnull) && (cellData->mCell != right)) { right = cellData->mCell; if (right != nsnull) @@ -2173,12 +2177,139 @@ void nsTableFrame::SetColumnWidth(PRInt32 aColIndex, PRInt32 aWidth) } } + + + +/** + * + * Update the border style to map to the HTML border style + * + */ +void nsTableFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth) +{ + nsStyleCoord width; + width.SetCoordValue(aBorderWidth); + aSpacingStyle.mBorder.SetTop(width); + aSpacingStyle.mBorder.SetLeft(width); + aSpacingStyle.mBorder.SetBottom(width); + aSpacingStyle.mBorder.SetRight(width); + + aSpacingStyle.mBorderStyle[NS_SIDE_TOP] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_LEFT] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_BOTTOM] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_RIGHT] = NS_STYLE_BORDER_STYLE_OUTSET; + + + nsIStyleContext* styleContext = mStyleContext; + nsStyleColor* colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); + + // Look until we find a style context with a NON-transparent background color + while (styleContext) + { + if ((colorData->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT)!=0) + { + nsIStyleContext* temp = styleContext; + styleContext = styleContext->GetParent(); + if (temp != mStyleContext) + NS_RELEASE(temp); + colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); + } + else + { + break; + } + } + + // Yaahoo, we found a style context which has a background color + + nscolor borderColor = 0xFFC0C0C0; + + if (styleContext != nsnull) + { + borderColor = colorData->mBackgroundColor; + if (styleContext != mStyleContext) + NS_RELEASE(styleContext); + } + + // if the border color is white, then shift to grey + if (borderColor == 0xFFFFFFFF) + borderColor = 0xFFC0C0C0; + + aSpacingStyle.mBorderColor[NS_SIDE_TOP] = borderColor; + aSpacingStyle.mBorderColor[NS_SIDE_LEFT] = borderColor; + aSpacingStyle.mBorderColor[NS_SIDE_BOTTOM] = borderColor; + aSpacingStyle.mBorderColor[NS_SIDE_RIGHT] = borderColor; + +} + + + +PRBool nsTableFrame::ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult) +{ + PRInt32 result = 0; + + if (aValue.GetUnit() == eHTMLUnit_Pixel) + aResult = aValue.GetPixelValue(); + else if (aValue.GetUnit() == eHTMLUnit_Empty) + aResult = aDefault; + else + { + NS_ERROR("Unit must be pixel or empty"); + return PR_FALSE; + } + return PR_TRUE; +} + +void nsTableFrame::MapBorderMarginPadding(nsIPresContext* aPresContext) +{ + // Check to see if the table has either cell padding or + // Cell spacing defined for the table. If true, then + // this setting overrides any specific border, margin or + // padding information in the cell. If these attributes + // are not defined, the the cells attributes are used + + nsHTMLValue padding_value; + nsHTMLValue spacing_value; + nsHTMLValue border_value; + + + nsContentAttr border_result; + + nscoord padding = 0; + nscoord spacing = 0; + nscoord border = 1; + + float p2t = aPresContext->GetPixelsToTwips(); + + nsTablePart* table = (nsTablePart*)mContent; + + NS_ASSERTION(table,"Table Must not be null"); + if (!table) + return; + + nsStyleSpacing* spacingData = (nsStyleSpacing*)mStyleContext->GetData(eStyleStruct_Spacing); + + border_result = table->GetAttribute(nsHTMLAtoms::border,border_value); + if (border_result == eContentAttr_HasValue) + { + PRInt32 intValue = 0; + + if (ConvertToPixelValue(border_value,1,intValue)) + border = nscoord(p2t*(float)intValue); + } + MapHTMLBorderStyle(*spacingData,border); +} + + + + // Subclass hook for style post processing NS_METHOD nsTableFrame::DidSetStyleContext(nsIPresContext* aPresContext) { #ifdef NOISY_STYLE printf("nsTableFrame::DidSetStyleContext \n"); #endif + MapBorderMarginPadding(aPresContext); return NS_OK; } diff --git a/mozilla/layout/html/table/src/nsTableFrame.h b/mozilla/layout/html/table/src/nsTableFrame.h index 4ab8ad9c043..f031289d706 100644 --- a/mozilla/layout/html/table/src/nsTableFrame.h +++ b/mozilla/layout/html/table/src/nsTableFrame.h @@ -27,8 +27,10 @@ class nsVoidArray; class nsTableCellFrame; class CellData; class nsITableLayoutStrategy; +class nsHTMLValue; struct InnerTableReflowState; struct nsStylePosition; +struct nsStyleSpacing; /** nsTableFrame maps the inner portion of a table (everything except captions.) * Used as a pseudo-frame within nsTableOuterFrame, @@ -293,6 +295,11 @@ protected: /** do post processing to setting up style information for the frame */ virtual NS_METHOD DidSetStyleContext(nsIPresContext* aPresContext); + /** Support methods for DidSetStyleContext */ + void MapBorderMarginPadding(nsIPresContext* aPresContext); + void MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth); + PRBool ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult); + private: void DebugPrintCount() const; // Debugging routine diff --git a/mozilla/layout/tables/nsTableCellFrame.cpp b/mozilla/layout/tables/nsTableCellFrame.cpp index 6e4cccfc4c0..fee5d64bdeb 100644 --- a/mozilla/layout/tables/nsTableCellFrame.cpp +++ b/mozilla/layout/tables/nsTableCellFrame.cpp @@ -380,7 +380,7 @@ nsTableCellFrame::CreateContinuingFrame(nsIPresContext* aPresContext, * Update the border style to map to the HTML border style * */ -void nsTableCellFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth) +void nsTableCellFrame::MapHTMLBorderStyle(nsIPresContext* aPresContext, nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth) { nsStyleCoord width; width.SetCoordValue(aBorderWidth); @@ -391,16 +391,48 @@ void nsTableCellFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aSpacingStyle.mBorderStyle[NS_SIDE_TOP] = NS_STYLE_BORDER_STYLE_INSET; aSpacingStyle.mBorderStyle[NS_SIDE_LEFT] = NS_STYLE_BORDER_STYLE_INSET; - aSpacingStyle.mBorderStyle[NS_SIDE_BOTTOM] = NS_STYLE_BORDER_STYLE_OUTSET; - aSpacingStyle.mBorderStyle[NS_SIDE_RIGHT] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_BOTTOM] = NS_STYLE_BORDER_STYLE_INSET; + aSpacingStyle.mBorderStyle[NS_SIDE_RIGHT] = NS_STYLE_BORDER_STYLE_INSET; - NS_ColorNameToRGB("white",&aSpacingStyle.mBorderColor[NS_SIDE_TOP]); - NS_ColorNameToRGB("white",&aSpacingStyle.mBorderColor[NS_SIDE_LEFT]); + nsTableFrame* tableFrame = GetTableFrame(); + nsIStyleContext* styleContext = nsnull; + + tableFrame->GetStyleContext(aPresContext,styleContext); + + nsStyleColor* colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); - // This should be the background color of the tables - // container - NS_ColorNameToRGB("gray",&aSpacingStyle.mBorderColor[NS_SIDE_BOTTOM]); - NS_ColorNameToRGB("gray",&aSpacingStyle.mBorderColor[NS_SIDE_RIGHT]); + // Look until we find a style context with a NON-transparent background color + while (styleContext) + { + if ((colorData->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT)!=0) + { + nsIStyleContext* temp = styleContext; + styleContext = styleContext->GetParent(); + NS_RELEASE(temp); + colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); + } + else + { + break; + } + } + + // Yaahoo, we found a style context which has a background color + + nscolor borderColor = 0xFFC0C0C0; + + if (styleContext != nsnull) + borderColor = colorData->mBackgroundColor; + + // if the border color is white, then shift to grey + if (borderColor == 0xFFFFFFFF) + borderColor = 0xFFC0C0C0; + + + aSpacingStyle.mBorderColor[NS_SIDE_TOP] = + aSpacingStyle.mBorderColor[NS_SIDE_LEFT] = + aSpacingStyle.mBorderColor[NS_SIDE_BOTTOM] = + aSpacingStyle.mBorderColor[NS_SIDE_RIGHT] = borderColor; } @@ -489,7 +521,7 @@ void nsTableCellFrame::MapBorderMarginPadding(nsIPresContext* aPresContext) border = nscoord(p2t*(float)intValue); } } - MapHTMLBorderStyle(*spacingData,border); + MapHTMLBorderStyle(aPresContext, *spacingData,border); } void nsTableCellFrame::MapTextAttributes(nsIPresContext* aPresContext) diff --git a/mozilla/layout/tables/nsTableCellFrame.h b/mozilla/layout/tables/nsTableCellFrame.h index 707552455e3..32f5e7e1301 100644 --- a/mozilla/layout/tables/nsTableCellFrame.h +++ b/mozilla/layout/tables/nsTableCellFrame.h @@ -91,7 +91,7 @@ protected: NS_METHOD DidSetStyleContext(nsIPresContext* aPresContext); void MapTextAttributes(nsIPresContext* aPresContext); void MapBorderMarginPadding(nsIPresContext* aPresContext); - void MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth); + void MapHTMLBorderStyle(nsIPresContext* aPresContext,nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth); PRBool ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult); }; diff --git a/mozilla/layout/tables/nsTableFrame.cpp b/mozilla/layout/tables/nsTableFrame.cpp index 3c926fcee83..8b47263f943 100644 --- a/mozilla/layout/tables/nsTableFrame.cpp +++ b/mozilla/layout/tables/nsTableFrame.cpp @@ -40,6 +40,7 @@ #include "prinrval.h" #include "nsIPtr.h" #include "nsIView.h" +#include "nsHTMLAtoms.h" #ifdef NS_DEBUG static PRBool gsDebug = PR_FALSE; @@ -268,8 +269,11 @@ void nsTableFrame::RecalcLayoutData() { for (col = 0; col < colCount; col++) { + nsTableCell* cell = nsnull; CellData* cellData = cellMap->GetCellAt(row,col); - nsTableCell* cell = cellData->mCell; + + if (cellData) + cell = cellData->mCell; if (!cell) continue; @@ -336,7 +340,7 @@ void nsTableFrame::RecalcLayoutData() if (c != col) { cellData = cellMap->GetCellAt(r1,c); - if (cellData->mCell != above) + if ((cellData != nsnull) && (cellData->mCell != above)) { above = cellData->mCell; if (above != nsnull) @@ -353,7 +357,7 @@ void nsTableFrame::RecalcLayoutData() { // Add bottom edge cells cellData = cellMap->GetCellAt(r2,c); - if (cellData->mCell != below) + if ((cellData != nsnull) && cellData->mCell != below) { below = cellData->mCell; if (below != nsnull) @@ -377,7 +381,7 @@ void nsTableFrame::RecalcLayoutData() if (r != row) { cellData = cellMap->GetCellAt(r,c1); - if (cellData->mCell != left) + if ((cellData != nsnull) && (cellData->mCell != left)) { left = cellData->mCell; if (left != nsnull) @@ -394,7 +398,7 @@ void nsTableFrame::RecalcLayoutData() { // Add right edge cells cellData = cellMap->GetCellAt(r,c2); - if (cellData->mCell != right) + if ((cellData != nsnull) && (cellData->mCell != right)) { right = cellData->mCell; if (right != nsnull) @@ -2173,12 +2177,139 @@ void nsTableFrame::SetColumnWidth(PRInt32 aColIndex, PRInt32 aWidth) } } + + + +/** + * + * Update the border style to map to the HTML border style + * + */ +void nsTableFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth) +{ + nsStyleCoord width; + width.SetCoordValue(aBorderWidth); + aSpacingStyle.mBorder.SetTop(width); + aSpacingStyle.mBorder.SetLeft(width); + aSpacingStyle.mBorder.SetBottom(width); + aSpacingStyle.mBorder.SetRight(width); + + aSpacingStyle.mBorderStyle[NS_SIDE_TOP] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_LEFT] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_BOTTOM] = NS_STYLE_BORDER_STYLE_OUTSET; + aSpacingStyle.mBorderStyle[NS_SIDE_RIGHT] = NS_STYLE_BORDER_STYLE_OUTSET; + + + nsIStyleContext* styleContext = mStyleContext; + nsStyleColor* colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); + + // Look until we find a style context with a NON-transparent background color + while (styleContext) + { + if ((colorData->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT)!=0) + { + nsIStyleContext* temp = styleContext; + styleContext = styleContext->GetParent(); + if (temp != mStyleContext) + NS_RELEASE(temp); + colorData = (nsStyleColor*)styleContext->GetData(eStyleStruct_Color); + } + else + { + break; + } + } + + // Yaahoo, we found a style context which has a background color + + nscolor borderColor = 0xFFC0C0C0; + + if (styleContext != nsnull) + { + borderColor = colorData->mBackgroundColor; + if (styleContext != mStyleContext) + NS_RELEASE(styleContext); + } + + // if the border color is white, then shift to grey + if (borderColor == 0xFFFFFFFF) + borderColor = 0xFFC0C0C0; + + aSpacingStyle.mBorderColor[NS_SIDE_TOP] = borderColor; + aSpacingStyle.mBorderColor[NS_SIDE_LEFT] = borderColor; + aSpacingStyle.mBorderColor[NS_SIDE_BOTTOM] = borderColor; + aSpacingStyle.mBorderColor[NS_SIDE_RIGHT] = borderColor; + +} + + + +PRBool nsTableFrame::ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult) +{ + PRInt32 result = 0; + + if (aValue.GetUnit() == eHTMLUnit_Pixel) + aResult = aValue.GetPixelValue(); + else if (aValue.GetUnit() == eHTMLUnit_Empty) + aResult = aDefault; + else + { + NS_ERROR("Unit must be pixel or empty"); + return PR_FALSE; + } + return PR_TRUE; +} + +void nsTableFrame::MapBorderMarginPadding(nsIPresContext* aPresContext) +{ + // Check to see if the table has either cell padding or + // Cell spacing defined for the table. If true, then + // this setting overrides any specific border, margin or + // padding information in the cell. If these attributes + // are not defined, the the cells attributes are used + + nsHTMLValue padding_value; + nsHTMLValue spacing_value; + nsHTMLValue border_value; + + + nsContentAttr border_result; + + nscoord padding = 0; + nscoord spacing = 0; + nscoord border = 1; + + float p2t = aPresContext->GetPixelsToTwips(); + + nsTablePart* table = (nsTablePart*)mContent; + + NS_ASSERTION(table,"Table Must not be null"); + if (!table) + return; + + nsStyleSpacing* spacingData = (nsStyleSpacing*)mStyleContext->GetData(eStyleStruct_Spacing); + + border_result = table->GetAttribute(nsHTMLAtoms::border,border_value); + if (border_result == eContentAttr_HasValue) + { + PRInt32 intValue = 0; + + if (ConvertToPixelValue(border_value,1,intValue)) + border = nscoord(p2t*(float)intValue); + } + MapHTMLBorderStyle(*spacingData,border); +} + + + + // Subclass hook for style post processing NS_METHOD nsTableFrame::DidSetStyleContext(nsIPresContext* aPresContext) { #ifdef NOISY_STYLE printf("nsTableFrame::DidSetStyleContext \n"); #endif + MapBorderMarginPadding(aPresContext); return NS_OK; } diff --git a/mozilla/layout/tables/nsTableFrame.h b/mozilla/layout/tables/nsTableFrame.h index 4ab8ad9c043..f031289d706 100644 --- a/mozilla/layout/tables/nsTableFrame.h +++ b/mozilla/layout/tables/nsTableFrame.h @@ -27,8 +27,10 @@ class nsVoidArray; class nsTableCellFrame; class CellData; class nsITableLayoutStrategy; +class nsHTMLValue; struct InnerTableReflowState; struct nsStylePosition; +struct nsStyleSpacing; /** nsTableFrame maps the inner portion of a table (everything except captions.) * Used as a pseudo-frame within nsTableOuterFrame, @@ -293,6 +295,11 @@ protected: /** do post processing to setting up style information for the frame */ virtual NS_METHOD DidSetStyleContext(nsIPresContext* aPresContext); + /** Support methods for DidSetStyleContext */ + void MapBorderMarginPadding(nsIPresContext* aPresContext); + void MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth); + PRBool ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult); + private: void DebugPrintCount() const; // Debugging routine