Reinstate my changes that were backed out 10 days ago. #43457 split nsStyleSpacing into 4 smaller structures: nsStyleBorder, nsStylePadding, nsStyleMargin, nsStyleOutline. r=attinasi,sr=buster.

This commit is contained in:
pierre%netscape.com 2001-02-07 09:57:26 +00:00
parent 51345bbfc9
commit 9af01acf22
123 changed files with 4723 additions and 3010 deletions

File diff suppressed because it is too large Load Diff

View File

@ -723,28 +723,28 @@ nsGenericHTMLElement::GetOffsetRect(nsRect& aRect,
}
// For the origin, add in the border for the frame
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
nsStyleCoord coord;
frame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
frame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
if (border) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
}
}
// And subtract out the border for the parent
if (parent) {
const nsStyleSpacing* parentSpacing;
parent->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)parentSpacing);
if (parentSpacing) {
if (eStyleUnit_Coord == parentSpacing->mBorder.GetLeftUnit()) {
origin.x -= parentSpacing->mBorder.GetLeft(coord).GetCoordValue();
const nsStyleBorder* parentBorder;
parent->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)parentBorder);
if (parentBorder) {
if (eStyleUnit_Coord == parentBorder->mBorder.GetLeftUnit()) {
origin.x -= parentBorder->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == parentSpacing->mBorder.GetTopUnit()) {
origin.y -= parentSpacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == parentBorder->mBorder.GetTopUnit()) {
origin.y -= parentBorder->mBorder.GetTop(coord).GetCoordValue();
}
}
}
@ -2919,8 +2919,8 @@ nsGenericHTMLElement::MapImageAttributesInto(const nsIHTMLMappedAttributes* aAtt
aPresContext->GetScaledPixelsToTwips(&p2t);
nsStylePosition* pos = (nsStylePosition*)
aContext->GetMutableStyleData(eStyleStruct_Position);
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
// width: value
aAttributes->GetAttribute(nsHTMLAtoms::width, value);
@ -2947,13 +2947,13 @@ nsGenericHTMLElement::MapImageAttributesInto(const nsIHTMLMappedAttributes* aAtt
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
nsStyleCoord c(twips);
spacing->mMargin.SetLeft(c);
spacing->mMargin.SetRight(c);
margin->mMargin.SetLeft(c);
margin->mMargin.SetRight(c);
}
else if (value.GetUnit() == eHTMLUnit_Percent) {
nsStyleCoord c(value.GetPercentValue(), eStyleUnit_Percent);
spacing->mMargin.SetLeft(c);
spacing->mMargin.SetRight(c);
margin->mMargin.SetLeft(c);
margin->mMargin.SetRight(c);
}
// vspace: value
@ -2961,13 +2961,13 @@ nsGenericHTMLElement::MapImageAttributesInto(const nsIHTMLMappedAttributes* aAtt
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
nsStyleCoord c(twips);
spacing->mMargin.SetTop(c);
spacing->mMargin.SetBottom(c);
margin->mMargin.SetTop(c);
margin->mMargin.SetBottom(c);
}
else if (value.GetUnit() == eHTMLUnit_Percent) {
nsStyleCoord c(value.GetPercentValue(), eStyleUnit_Percent);
spacing->mMargin.SetTop(c);
spacing->mMargin.SetBottom(c);
margin->mMargin.SetTop(c);
margin->mMargin.SetBottom(c);
}
}
@ -2998,21 +2998,21 @@ nsGenericHTMLElement::MapImageAlignAttributeInto(const nsIHTMLMappedAttributes*
aContext->GetMutableStyleData(eStyleStruct_Display);
nsStyleText* text = (nsStyleText*)
aContext->GetMutableStyleData(eStyleStruct_Text);
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
float p2t;
aPresContext->GetScaledPixelsToTwips(&p2t);
nsStyleCoord three(NSIntPixelsToTwips(3, p2t));
switch (align) {
case NS_STYLE_TEXT_ALIGN_LEFT:
display->mFloats = NS_STYLE_FLOAT_LEFT;
spacing->mMargin.SetLeft(three);
spacing->mMargin.SetRight(three);
margin->mMargin.SetLeft(three);
margin->mMargin.SetRight(three);
break;
case NS_STYLE_TEXT_ALIGN_RIGHT:
display->mFloats = NS_STYLE_FLOAT_RIGHT;
spacing->mMargin.SetLeft(three);
spacing->mMargin.SetRight(three);
margin->mMargin.SetLeft(three);
margin->mMargin.SetRight(three);
break;
default:
text->mVerticalAlign.SetIntValue(align, eStyleUnit_Enumerated);
@ -3061,38 +3061,39 @@ nsGenericHTMLElement::MapImageBorderAttributeInto(const nsIHTMLMappedAttributes*
// Fixup border-padding sums: subtract out the old size and then
// add in the new size.
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleCoord coord;
coord.SetCoordValue(twips);
spacing->mBorder.SetTop(coord);
spacing->mBorder.SetRight(coord);
spacing->mBorder.SetBottom(coord);
spacing->mBorder.SetLeft(coord);
border->mBorder.SetTop(coord);
border->mBorder.SetRight(coord);
border->mBorder.SetBottom(coord);
border->mBorder.SetLeft(coord);
spacing->SetBorderStyle(0,NS_STYLE_BORDER_STYLE_SOLID);
spacing->SetBorderStyle(1,NS_STYLE_BORDER_STYLE_SOLID);
spacing->SetBorderStyle(2,NS_STYLE_BORDER_STYLE_SOLID);
spacing->SetBorderStyle(3,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(0,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(1,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(2,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(3,NS_STYLE_BORDER_STYLE_SOLID);
// Use supplied colors if provided, otherwise use color for border
// color
if (nsnull != aBorderColors) {
spacing->SetBorderColor(0, aBorderColors[0]);
spacing->SetBorderColor(1, aBorderColors[1]);
spacing->SetBorderColor(2, aBorderColors[2]);
spacing->SetBorderColor(3, aBorderColors[3]);
border->SetBorderColor(0, aBorderColors[0]);
border->SetBorderColor(1, aBorderColors[1]);
border->SetBorderColor(2, aBorderColors[2]);
border->SetBorderColor(3, aBorderColors[3]);
}
else {
// Color is inherited from "color"
const nsStyleColor* styleColor = (const nsStyleColor*)
aContext->GetStyleData(eStyleStruct_Color);
nscolor color = styleColor->mColor;
spacing->SetBorderColor(0, color);
spacing->SetBorderColor(1, color);
spacing->SetBorderColor(2, color);
spacing->SetBorderColor(3, color);
border->SetBorderColor(0, color);
border->SetBorderColor(1, color);
border->SetBorderColor(2, color);
border->SetBorderColor(3, color);
}
}

View File

@ -294,9 +294,9 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
nsIPresContext* aPresContext)
{
if (mPart) {
nsStyleSpacing* styleSpacing = (nsStyleSpacing*)(aContext->GetMutableStyleData(eStyleStruct_Spacing));
nsStyleMargin* marginStyle = (nsStyleMargin*)(aContext->GetMutableStyleData(eStyleStruct_Margin));
if (nsnull != styleSpacing) {
if (nsnull != marginStyle) {
nsHTMLValue value;
PRInt32 attrCount;
float p2t;
@ -314,8 +314,8 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
bodyMarginWidth = 0;
}
nsStyleCoord widthCoord(bodyMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
marginStyle->mMargin.SetLeft(widthCoord);
marginStyle->mMargin.SetRight(widthCoord);
}
mPart->GetHTMLAttribute(nsHTMLAtoms::marginheight, value);
@ -326,8 +326,8 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
}
nsStyleCoord heightCoord(bodyMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
marginStyle->mMargin.SetTop(heightCoord);
marginStyle->mMargin.SetBottom(heightCoord);
}
}
@ -364,14 +364,14 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
if ((0 > bodyMarginWidth) && (frameMarginWidth >= 0)) {
nsStyleCoord widthCoord(frameMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
marginStyle->mMargin.SetLeft(widthCoord);
marginStyle->mMargin.SetRight(widthCoord);
}
if ((0 > bodyMarginHeight) && (frameMarginHeight >= 0)) {
nsStyleCoord heightCoord(frameMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
marginStyle->mMargin.SetTop(heightCoord);
marginStyle->mMargin.SetBottom(heightCoord);
}
}
NS_RELEASE(container);

View File

@ -207,22 +207,22 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
aAttributes->GetAttribute(nsHTMLAtoms::align, value);
if (eHTMLUnit_Enumerated == value.GetUnit()) {
// Map align attribute into auto side margins
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
nsStyleCoord otto(eStyleUnit_Auto);
nsStyleCoord zero(nscoord(0));
switch (value.GetIntValue()) {
case NS_STYLE_TEXT_ALIGN_LEFT:
spacing->mMargin.SetLeft(zero);
spacing->mMargin.SetRight(otto);
margin->mMargin.SetLeft(zero);
margin->mMargin.SetRight(otto);
break;
case NS_STYLE_TEXT_ALIGN_RIGHT:
spacing->mMargin.SetLeft(otto);
spacing->mMargin.SetRight(zero);
margin->mMargin.SetLeft(otto);
margin->mMargin.SetRight(zero);
break;
case NS_STYLE_TEXT_ALIGN_CENTER:
spacing->mMargin.SetLeft(otto);
spacing->mMargin.SetRight(otto);
margin->mMargin.SetLeft(otto);
margin->mMargin.SetRight(otto);
break;
}
}

View File

@ -314,15 +314,15 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if (NS_STYLE_FRAME_0 == frameborder ||
NS_STYLE_FRAME_NO == frameborder ||
NS_STYLE_FRAME_OFF == frameborder) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (spacing) {
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
if (border) {
nsStyleCoord coord;
coord.SetCoordValue(0);
spacing->mBorder.SetTop(coord);
spacing->mBorder.SetRight(coord);
spacing->mBorder.SetBottom(coord);
spacing->mBorder.SetLeft(coord);
border->mBorder.SetTop(coord);
border->mBorder.SetRight(coord);
border->mBorder.SetBottom(coord);
border->mBorder.SetLeft(coord);
}
}
}

View File

@ -1335,23 +1335,23 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
nscoord pad = NSIntPixelsToTwips(3, p2t);
// add left and right padding around the radio button via css
nsStyleSpacing* spacing = (nsStyleSpacing*) aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (eStyleUnit_Null == spacing->mMargin.GetLeftUnit()) {
nsStyleMargin* margin = (nsStyleMargin*) aContext->GetMutableStyleData(eStyleStruct_Margin);
if (eStyleUnit_Null == margin->mMargin.GetLeftUnit()) {
nsStyleCoord left(pad);
spacing->mMargin.SetLeft(left);
margin->mMargin.SetLeft(left);
}
if (eStyleUnit_Null == spacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Null == margin->mMargin.GetRightUnit()) {
nsStyleCoord right(NSIntPixelsToTwips(5, p2t));
spacing->mMargin.SetRight(right);
margin->mMargin.SetRight(right);
}
// add bottom padding if backward mode
// XXX why isn't this working?
nsCompatibility mode;
aPresContext->GetCompatibilityMode(&mode);
if (eCompatibility_NavQuirks == mode) {
if (eStyleUnit_Null == spacing->mMargin.GetBottomUnit()) {
if (eStyleUnit_Null == margin->mMargin.GetBottomUnit()) {
nsStyleCoord bottom(pad);
spacing->mMargin.SetBottom(bottom);
margin->mMargin.SetBottom(bottom);
}
}
break;

View File

@ -1063,13 +1063,13 @@ static void
MapTableFrameInto(const nsIHTMLMappedAttributes* aAttributes,
nsIMutableStyleContext* aContext,
nsIPresContext* aPresContext,
nsStyleSpacing* aSpacing,
nsStyleBorder* aBorder,
PRUint8 aBorderStyle)
{
// set up defaults
for (PRInt32 sideX = NS_SIDE_TOP; sideX <= NS_SIDE_LEFT; sideX++) {
if (aSpacing->GetBorderStyle(sideX) == NS_STYLE_BORDER_STYLE_NONE) {
aSpacing->SetBorderStyle(sideX, aBorderStyle);
if (aBorder->GetBorderStyle(sideX) == NS_STYLE_BORDER_STYLE_NONE) {
aBorder->SetBorderStyle(sideX, aBorderStyle);
}
}
@ -1082,44 +1082,44 @@ MapTableFrameInto(const nsIHTMLMappedAttributes* aAttributes,
switch (frameValue.GetIntValue())
{
case NS_STYLE_TABLE_FRAME_NONE:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_ABOVE:
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_BELOW:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_HSIDES:
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_LEFT:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_RIGHT:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_VSIDES:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
break;
// BOX and BORDER are ignored, the caller has already set all the border sides
@ -1151,8 +1151,8 @@ MapTableBorderInto(const nsIHTMLMappedAttributes* aAttributes,
}
if (borderValue.GetUnit() != eHTMLUnit_Null) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleTable *tableStyle = (nsStyleTable*)
aContext->GetMutableStyleData(eStyleStruct_Table);
nsStyleCoord twips;
@ -1183,12 +1183,12 @@ MapTableBorderInto(const nsIHTMLMappedAttributes* aAttributes,
}
// by default, set all border sides to the specified width
spacing->mBorder.SetTop(twips);
spacing->mBorder.SetRight(twips);
spacing->mBorder.SetBottom(twips);
spacing->mBorder.SetLeft(twips);
border->mBorder.SetTop(twips);
border->mBorder.SetRight(twips);
border->mBorder.SetBottom(twips);
border->mBorder.SetLeft(twips);
// then account for the frame attribute
MapTableFrameInto(aAttributes, aContext, aPresContext, spacing,
MapTableFrameInto(aAttributes, aContext, aPresContext, border,
aBorderStyle);
}
}
@ -1219,14 +1219,14 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
aPresContext->GetPixelsToTwips(&p2t);
nscoord onePixel = NSIntPixelsToTwips(1, p2t);
nsStyleSpacing* spacingStyle = (nsStyleSpacing*)aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* borderStyleData = (nsStyleBorder*)aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleCoord width;
width.SetCoordValue(onePixel);
spacingStyle->mBorder.SetTop(width);
spacingStyle->mBorder.SetLeft(width);
spacingStyle->mBorder.SetBottom(width);
spacingStyle->mBorder.SetRight(width);
borderStyleData->mBorder.SetTop(width);
borderStyleData->mBorder.SetLeft(width);
borderStyleData->mBorder.SetBottom(width);
borderStyleData->mBorder.SetRight(width);
nsCompatibility mode;
aPresContext->GetCompatibilityMode(&mode);
@ -1235,10 +1235,10 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
// BG_INSET results in a border color based on background colors
// used for NavQuirks only...
spacingStyle->SetBorderStyle(NS_SIDE_TOP, borderStyle);
spacingStyle->SetBorderStyle(NS_SIDE_LEFT, borderStyle);
spacingStyle->SetBorderStyle(NS_SIDE_BOTTOM, borderStyle);
spacingStyle->SetBorderStyle(NS_SIDE_RIGHT, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_TOP, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_LEFT, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_BOTTOM, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_RIGHT, borderStyle);
}
}
else { // handle attributes for table
@ -1289,8 +1289,10 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
}
}
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* borderStyleData = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleMargin* marginStyleData = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
// default border style is the Nav4.6 extension which uses the
// background color as the basis of the outset border. If the
@ -1312,10 +1314,10 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if ((eHTMLUnit_Color == value.GetUnit()) ||
(eHTMLUnit_ColorName == value.GetUnit())) {
nscolor color = value.GetColorValue();
spacing->SetBorderColor(0, color);
spacing->SetBorderColor(1, color);
spacing->SetBorderColor(2, color);
spacing->SetBorderColor(3, color);
borderStyleData->SetBorderColor(0, color);
borderStyleData->SetBorderColor(1, color);
borderStyleData->SetBorderColor(2, color);
borderStyleData->SetBorderColor(3, color);
borderStyle = NS_STYLE_BORDER_STYLE_OUTSET; // use css outset
}
@ -1330,8 +1332,8 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if ((NS_STYLE_TEXT_ALIGN_CENTER == value.GetIntValue()) ||
(NS_STYLE_TEXT_ALIGN_MOZ_CENTER == value.GetIntValue())) {
nsStyleCoord otto(eStyleUnit_Auto);
spacing->mMargin.SetLeft(otto);
spacing->mMargin.SetRight(otto);
marginStyleData->mMargin.SetLeft(otto);
marginStyleData->mMargin.SetRight(otto);
}
else {
nsStyleDisplay* display = (nsStyleDisplay*)
@ -1415,8 +1417,8 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), sp2t);
nsStyleCoord hspace(twips);
spacing->mMargin.SetLeft(hspace);
spacing->mMargin.SetRight(hspace);
marginStyleData->mMargin.SetLeft(hspace);
marginStyleData->mMargin.SetRight(hspace);
}
aAttributes->GetAttribute(nsHTMLAtoms::vspace, value);
@ -1424,8 +1426,8 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), sp2t);
nsStyleCoord vspace(twips);
spacing->mMargin.SetTop(vspace);
spacing->mMargin.SetBottom(vspace);
marginStyleData->mMargin.SetTop(vspace);
marginStyleData->mMargin.SetBottom(vspace);
}
}

View File

@ -2371,33 +2371,41 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsCSSMargin* ourMargin;
if (NS_OK == aDeclaration->GetData(kCSSMarginSID, (nsCSSStruct**)&ourMargin)) {
if (nsnull != ourMargin) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)aContext->GetMutableStyleData(eStyleStruct_Margin);
nsStylePadding* padding = (nsStylePadding*)aContext->GetMutableStyleData(eStyleStruct_Padding);
nsStyleBorder* border = (nsStyleBorder*)aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleOutline* outline = (nsStyleOutline*)aContext->GetMutableStyleData(eStyleStruct_Outline);
const nsStyleSpacing* parentSpacing = spacing;
const nsStyleMargin* parentMargin = margin;
const nsStylePadding* parentPadding = padding;
const nsStyleBorder* parentBorder = border;
const nsStyleOutline* parentOutline = outline;
if (nsnull != aParentContext) {
parentSpacing = (const nsStyleSpacing*)aParentContext->GetStyleData(eStyleStruct_Spacing);
parentMargin = (const nsStyleMargin*)aParentContext->GetStyleData(eStyleStruct_Margin);
parentPadding = (const nsStylePadding*)aParentContext->GetStyleData(eStyleStruct_Padding);
parentBorder = (const nsStyleBorder*)aParentContext->GetStyleData(eStyleStruct_Border);
parentOutline = (const nsStyleOutline*)aParentContext->GetStyleData(eStyleStruct_Outline);
}
// margin: length, percent, auto, inherit
if (nsnull != ourMargin->mMargin) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mMargin.GetLeft(parentCoord);
parentMargin->mMargin.GetLeft(parentCoord);
if (SetCoord(ourMargin->mMargin->mLeft, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetLeft(coord);
margin->mMargin.SetLeft(coord);
}
parentSpacing->mMargin.GetTop(parentCoord);
parentMargin->mMargin.GetTop(parentCoord);
if (SetCoord(ourMargin->mMargin->mTop, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetTop(coord);
margin->mMargin.SetTop(coord);
}
parentSpacing->mMargin.GetRight(parentCoord);
parentMargin->mMargin.GetRight(parentCoord);
if (SetCoord(ourMargin->mMargin->mRight, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetRight(coord);
margin->mMargin.SetRight(coord);
}
parentSpacing->mMargin.GetBottom(parentCoord);
parentMargin->mMargin.GetBottom(parentCoord);
if (SetCoord(ourMargin->mMargin->mBottom, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetBottom(coord);
margin->mMargin.SetBottom(coord);
}
}
@ -2405,21 +2413,21 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mPadding) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mPadding.GetLeft(parentCoord);
parentPadding->mPadding.GetLeft(parentCoord);
if (SetCoord(ourMargin->mPadding->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetLeft(coord);
padding->mPadding.SetLeft(coord);
}
parentSpacing->mPadding.GetTop(parentCoord);
parentPadding->mPadding.GetTop(parentCoord);
if (SetCoord(ourMargin->mPadding->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetTop(coord);
padding->mPadding.SetTop(coord);
}
parentSpacing->mPadding.GetRight(parentCoord);
parentPadding->mPadding.GetRight(parentCoord);
if (SetCoord(ourMargin->mPadding->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetRight(coord);
padding->mPadding.SetRight(coord);
}
parentSpacing->mPadding.GetBottom(parentCoord);
parentPadding->mPadding.GetBottom(parentCoord);
if (SetCoord(ourMargin->mPadding->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetBottom(coord);
padding->mPadding.SetBottom(coord);
}
}
@ -2428,31 +2436,31 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsStyleCoord coord;
nsStyleCoord parentCoord;
if (SetCoord(ourMargin->mBorderWidth->mLeft, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetLeft(coord);
border->mBorder.SetLeft(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mLeft.GetUnit()) {
spacing->mBorder.SetLeft(parentSpacing->mBorder.GetLeft(coord));
border->mBorder.SetLeft(parentBorder->mBorder.GetLeft(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mTop, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetTop(coord);
border->mBorder.SetTop(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mTop.GetUnit()) {
spacing->mBorder.SetTop(parentSpacing->mBorder.GetTop(coord));
border->mBorder.SetTop(parentBorder->mBorder.GetTop(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mRight, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetRight(coord);
border->mBorder.SetRight(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mRight.GetUnit()) {
spacing->mBorder.SetRight(parentSpacing->mBorder.GetRight(coord));
border->mBorder.SetRight(parentBorder->mBorder.GetRight(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mBottom, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetBottom(coord);
border->mBorder.SetBottom(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mBottom.GetUnit()) {
spacing->mBorder.SetBottom(parentSpacing->mBorder.GetBottom(coord));
border->mBorder.SetBottom(parentBorder->mBorder.GetBottom(coord));
}
}
@ -2460,43 +2468,43 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mBorderStyle) {
nsCSSRect* ourStyle = ourMargin->mBorderStyle;
if (eCSSUnit_Enumerated == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, ourStyle->mTop.GetIntValue());
border->SetBorderStyle(NS_SIDE_TOP, ourStyle->mTop.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, parentSpacing->GetBorderStyle(NS_SIDE_TOP));
border->SetBorderStyle(NS_SIDE_TOP, parentBorder->GetBorderStyle(NS_SIDE_TOP));
}
if (eCSSUnit_Enumerated == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, ourStyle->mRight.GetIntValue());
border->SetBorderStyle(NS_SIDE_RIGHT, ourStyle->mRight.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, parentSpacing->GetBorderStyle(NS_SIDE_RIGHT));
border->SetBorderStyle(NS_SIDE_RIGHT, parentBorder->GetBorderStyle(NS_SIDE_RIGHT));
}
if (eCSSUnit_Enumerated == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, ourStyle->mBottom.GetIntValue());
border->SetBorderStyle(NS_SIDE_BOTTOM, ourStyle->mBottom.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, parentSpacing->GetBorderStyle(NS_SIDE_BOTTOM));
border->SetBorderStyle(NS_SIDE_BOTTOM, parentBorder->GetBorderStyle(NS_SIDE_BOTTOM));
}
if (eCSSUnit_Enumerated == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, ourStyle->mLeft.GetIntValue());
border->SetBorderStyle(NS_SIDE_LEFT, ourStyle->mLeft.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, parentSpacing->GetBorderStyle(NS_SIDE_LEFT));
border->SetBorderStyle(NS_SIDE_LEFT, parentBorder->GetBorderStyle(NS_SIDE_LEFT));
}
}
@ -2507,63 +2515,63 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nscolor unused = NS_RGB(0,0,0);
if (eCSSUnit_Inherit == ourBorderColor->mTop.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_TOP, borderColor)) {
spacing->SetBorderColor(NS_SIDE_TOP, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_TOP, borderColor)) {
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_TOP);
border->SetBorderTransparent(NS_SIDE_TOP);
}
}
else if (SetColor(ourBorderColor->mTop, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_TOP, borderColor);
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_TOP);
border->SetBorderTransparent(NS_SIDE_TOP);
}
if (eCSSUnit_Inherit == ourBorderColor->mRight.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
spacing->SetBorderColor(NS_SIDE_RIGHT, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_RIGHT);
border->SetBorderTransparent(NS_SIDE_RIGHT);
}
}
else if (SetColor(ourBorderColor->mRight, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_RIGHT, borderColor);
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mRight.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_RIGHT);
border->SetBorderTransparent(NS_SIDE_RIGHT);
}
if (eCSSUnit_Inherit == ourBorderColor->mBottom.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
spacing->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_BOTTOM);
border->SetBorderTransparent(NS_SIDE_BOTTOM);
}
}
else if (SetColor(ourBorderColor->mBottom, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mBottom.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_BOTTOM);
border->SetBorderTransparent(NS_SIDE_BOTTOM);
}
if (eCSSUnit_Inherit == ourBorderColor->mLeft.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
spacing->SetBorderColor(NS_SIDE_LEFT, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_LEFT);
border->SetBorderTransparent(NS_SIDE_LEFT);
}
}
else if (SetColor(ourBorderColor->mLeft, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_LEFT, borderColor);
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mLeft.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_LEFT);
border->SetBorderTransparent(NS_SIDE_LEFT);
}
}
@ -2571,21 +2579,21 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mBorderRadius) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mBorderRadius.GetLeft(parentCoord);
parentBorder->mBorderRadius.GetLeft(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetLeft(coord);
border->mBorderRadius.SetLeft(coord);
}
parentSpacing->mBorderRadius.GetTop(parentCoord);
parentBorder->mBorderRadius.GetTop(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetTop(coord);
border->mBorderRadius.SetTop(coord);
}
parentSpacing->mBorderRadius.GetRight(parentCoord);
parentBorder->mBorderRadius.GetRight(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetRight(coord);
border->mBorderRadius.SetRight(coord);
}
parentSpacing->mBorderRadius.GetBottom(parentCoord);
parentBorder->mBorderRadius.GetBottom(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetBottom(coord);
border->mBorderRadius.SetBottom(coord);
}
}
@ -2593,26 +2601,26 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mOutlineRadius) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mOutlineRadius.GetLeft(parentCoord);
parentOutline->mOutlineRadius.GetLeft(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetLeft(coord);
outline->mOutlineRadius.SetLeft(coord);
}
parentSpacing->mOutlineRadius.GetTop(parentCoord);
parentOutline->mOutlineRadius.GetTop(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetTop(coord);
outline->mOutlineRadius.SetTop(coord);
}
parentSpacing->mOutlineRadius.GetRight(parentCoord);
parentOutline->mOutlineRadius.GetRight(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetRight(coord);
outline->mOutlineRadius.SetRight(coord);
}
parentSpacing->mOutlineRadius.GetBottom(parentCoord);
parentOutline->mOutlineRadius.GetBottom(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetBottom(coord);
outline->mOutlineRadius.SetBottom(coord);
}
}
// outline-width: length, enum, inherit
if (! SetCoord(ourMargin->mOutlineWidth, spacing->mOutlineWidth, parentSpacing->mOutlineWidth,
if (! SetCoord(ourMargin->mOutlineWidth, outline->mOutlineWidth, parentOutline->mOutlineWidth,
SETCOORD_LEH, aFont->mFont, aPresContext)) {
}
@ -2620,37 +2628,37 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nscolor outlineColor;
nscolor unused = NS_RGB(0,0,0);
if (eCSSUnit_Inherit == ourMargin->mOutlineColor.GetUnit()) {
if (parentSpacing->GetOutlineColor(outlineColor)) {
spacing->SetOutlineColor(outlineColor);
if (parentOutline->GetOutlineColor(outlineColor)) {
outline->SetOutlineColor(outlineColor);
}
else {
spacing->SetOutlineInvert();
outline->SetOutlineInvert();
}
}
else if (SetColor(ourMargin->mOutlineColor, unused, aPresContext, outlineColor)) {
spacing->SetOutlineColor(outlineColor);
outline->SetOutlineColor(outlineColor);
}
else if (eCSSUnit_Enumerated == ourMargin->mOutlineColor.GetUnit()) {
spacing->SetOutlineInvert();
outline->SetOutlineInvert();
}
// outline-style: enum, none, inherit
if (eCSSUnit_Enumerated == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(ourMargin->mOutlineStyle.GetIntValue());
outline->SetOutlineStyle(ourMargin->mOutlineStyle.GetIntValue());
}
else if (eCSSUnit_None == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(NS_STYLE_BORDER_STYLE_NONE);
outline->SetOutlineStyle(NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(parentSpacing->GetOutlineStyle());
outline->SetOutlineStyle(parentOutline->GetOutlineStyle());
}
// float-edge: enum, inherit
if (eCSSUnit_Enumerated == ourMargin->mFloatEdge.GetUnit()) {
spacing->mFloatEdge = ourMargin->mFloatEdge.GetIntValue();
border->mFloatEdge = ourMargin->mFloatEdge.GetIntValue();
}
else if (eCSSUnit_Inherit == ourMargin->mFloatEdge.GetUnit()) {
spacing->mFloatEdge = parentSpacing->mFloatEdge;
border->mFloatEdge = parentBorder->mFloatEdge;
}
}
}

View File

@ -844,15 +844,15 @@ nsComputedDOMStyle::GetMargin(nsAWritableString& aMargin)
nsresult GetMargins(nsIFrame *aFrame, nscoord& left, nscoord& top,
nscoord& right, nscoord& bottom)
{
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
nsStyleCoord coord;
frame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
frame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
if (border) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
}
}
}
@ -1267,31 +1267,33 @@ nsComputedDOMStyle::GetAbsoluteFrameRect(nsIFrame *aFrame, nsRect& aRect)
}
// For the origin, add in the border for the frame
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
const nsStylePadding* padding;
nsStyleCoord coord;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
aRect.width -= spacing->mBorder.GetLeft(coord).GetCoordValue();
//aRect.width -= spacing->mMargin.GetLeft(coord).GetCoordValue();
aRect.width -= spacing->mPadding.GetLeft(coord).GetCoordValue();
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)padding);
if (border && padding) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
aRect.width -= border->mBorder.GetLeft(coord).GetCoordValue();
//aRect.width -= margin->mMargin.GetLeft(coord).GetCoordValue();
aRect.width -= padding->mPadding.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
aRect.height -= spacing->mBorder.GetTop(coord).GetCoordValue();
//aRect.height -= spacing->mMargin.GetTop(coord).GetCoordValue();
aRect.height -= spacing->mPadding.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
aRect.height -= border->mBorder.GetTop(coord).GetCoordValue();
//aRect.height -= margin->mMargin.GetTop(coord).GetCoordValue();
aRect.height -= padding->mPadding.GetTop(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetRightUnit()) {
aRect.width -= spacing->mBorder.GetRight(coord).GetCoordValue();
//aRect.width -= spacing->mMargin.GetRight(coord).GetCoordValue();
aRect.width -= spacing->mPadding.GetRight(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetRightUnit()) {
aRect.width -= border->mBorder.GetRight(coord).GetCoordValue();
//aRect.width -= margin->mMargin.GetRight(coord).GetCoordValue();
aRect.width -= padding->mPadding.GetRight(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetBottomUnit()) {
aRect.height -= spacing->mBorder.GetBottom(coord).GetCoordValue();
//aRect.height -= spacing->mMargin.GetBottom(coord).GetCoordValue();
aRect.height -= spacing->mPadding.GetBottom(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetBottomUnit()) {
aRect.height -= border->mBorder.GetBottom(coord).GetCoordValue();
//aRect.height -= margin->mMargin.GetBottom(coord).GetCoordValue();
aRect.height -= padding->mPadding.GetBottom(coord).GetCoordValue();
}
}

View File

@ -132,13 +132,13 @@ CSSFirstLineRule::MapStyleInto(nsIMutableStyleContext* aContext,
parentContext = aContext->GetParent();
// Disable border
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (spacing) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
if (border) {
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
}
// Undo any change made to "direction"

View File

@ -9320,10 +9320,10 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
if (! view) { // if frame has view, will already be invalidated
// XXX Instead of calling this we should really be calling
// Invalidate on on the nsFrame (which does this)
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
const nsStyleOutline* outline;
aFrame->GetStyleData(eStyleStruct_Outline, (const nsStyleStruct*&)outline);
nscoord width;
spacing->GetOutlineWidth(width);
outline->GetOutlineWidth(width);
if (width > 0) {
invalidRect.Inflate(width, width);
}

View File

@ -740,21 +740,26 @@ nscoord xstart,xwidth,ystart,ywidth;
void nsCSSRendering::DrawDashedSides(PRIntn startSide,
nsIRenderingContext& aContext,
const nsRect& aDirtyRect,
const nsStyleSpacing& aSpacing,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
PRBool aDoOutline,
const nsRect& borderOutside,
const nsRect& borderInside,
PRIntn aSkipSides,
nsRect* aGap)
{
PRIntn dashLength;
nsRect dashRect, currRect;
nscoord xstart,xwidth,ystart,ywidth,temp,temp1,adjust;
PRBool bSolid = PR_TRUE;
float over = 0.0f;
PRUint8 style = aDoOutline?aSpacing.GetOutlineStyle():aSpacing.GetBorderStyle(startSide);
PRBool skippedSide = PR_FALSE;
NS_ASSERTION((aDoOutline && aOutlineStyle) || (!aDoOutline && aBorderStyle), "null params not allowed");
PRUint8 style = aDoOutline
? aOutlineStyle->GetOutlineStyle()
: aBorderStyle->GetBorderStyle(startSide);
// find out were x and y start
if(aDirtyRect.x > borderInside.x) {
@ -777,7 +782,9 @@ PRBool skippedSide = PR_FALSE;
for (PRIntn whichSide = startSide; whichSide < 4; whichSide++) {
PRUint8 prevStyle = style;
style = aDoOutline?aSpacing.GetOutlineStyle():aSpacing.GetBorderStyle(whichSide);
style = aDoOutline
? aOutlineStyle->GetOutlineStyle()
: aBorderStyle->GetBorderStyle(whichSide);
if ((1<<whichSide) & aSkipSides) {
// Skipped side
skippedSide = PR_TRUE;
@ -800,9 +807,9 @@ PRBool skippedSide = PR_FALSE;
nscolor sideColor;
if (aDoOutline) {
aSpacing.GetOutlineColor(sideColor);
aOutlineStyle->GetOutlineColor(sideColor);
} else {
if (!aSpacing.GetBorderColor(whichSide, sideColor)) {
if (!aBorderStyle->GetBorderColor(whichSide, sideColor)) {
continue; // side is transparent
}
}
@ -1488,7 +1495,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext* aPresContext,
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap,
@ -1569,7 +1576,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext* aPresContext,
// check for any corner that is rounded
for(i=0;i<4;i++){
if(borderRadii[i] > 0){
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aBorderStyle,aStyleContext,aSkipSides,borderRadii,aGap,PR_FALSE);
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,&aBorderStyle,nsnull,aStyleContext,aSkipSides,borderRadii,aGap,PR_FALSE);
return;
}
}
@ -1600,7 +1607,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext* aPresContext,
}
}
if (cnt < 4) {
DrawDashedSides(cnt, aRenderingContext,aDirtyRect,aBorderStyle, PR_FALSE,
DrawDashedSides(cnt, aRenderingContext,aDirtyRect,&aBorderStyle,nsnull, PR_FALSE,
inside, outside, aSkipSides, aGap);
}
@ -1670,7 +1677,8 @@ void nsCSSRendering::PaintOutline(nsIPresContext* aPresContext,
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
const nsStyleOutline& aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap)
@ -1682,7 +1690,7 @@ const nsStyleColor* bgColor = nsStyleUtil::FindNonTransparentBackground(aStyleCo
nscoord width;
aBorderStyle.GetOutlineWidth(width);
aOutlineStyle.GetOutlineWidth(width);
if (0 == width) {
// Empty outline
@ -1690,10 +1698,10 @@ nscoord width;
}
// get the radius for our border
aBorderStyle.mOutlineRadius.GetTop(bordStyleRadius[0]); //topleft
aBorderStyle.mOutlineRadius.GetRight(bordStyleRadius[1]); //topright
aBorderStyle.mOutlineRadius.GetBottom(bordStyleRadius[2]); //bottomright
aBorderStyle.mOutlineRadius.GetLeft(bordStyleRadius[3]); //bottomleft
aOutlineStyle.mOutlineRadius.GetTop(bordStyleRadius[0]); //topleft
aOutlineStyle.mOutlineRadius.GetRight(bordStyleRadius[1]); //topright
aOutlineStyle.mOutlineRadius.GetBottom(bordStyleRadius[2]); //bottomright
aOutlineStyle.mOutlineRadius.GetLeft(bordStyleRadius[3]); //bottomleft
for(i=0;i<4;i++) {
borderRadii[i] = 0;
@ -1744,18 +1752,18 @@ nscoord width;
// rounded version of the border
for(i=0;i<4;i++){
if(borderRadii[i] > 0){
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aBorderStyle,aStyleContext,aSkipSides,borderRadii,aGap,PR_TRUE);
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,nsnull,&aOutlineStyle,aStyleContext,aSkipSides,borderRadii,aGap,PR_TRUE);
aRenderingContext.PopState(clipState);
return;
}
}
PRUint8 outlineStyle = aBorderStyle.GetOutlineStyle();
PRUint8 outlineStyle = aOutlineStyle.GetOutlineStyle();
//see if any sides are dotted or dashed
if ((outlineStyle == NS_STYLE_BORDER_STYLE_DOTTED) ||
(outlineStyle == NS_STYLE_BORDER_STYLE_DASHED)) {
DrawDashedSides(0, aRenderingContext, aDirtyRect, aBorderStyle, PR_TRUE,
DrawDashedSides(0, aRenderingContext, aDirtyRect, nsnull, &aOutlineStyle, PR_TRUE,
outside, inside, aSkipSides, aGap);
aRenderingContext.PopState(clipState);
return;
@ -1771,7 +1779,7 @@ nscoord width;
nscolor outlineColor;
if (aBorderStyle.GetOutlineColor(outlineColor)) {
if (aOutlineStyle.GetOutlineColor(outlineColor)) {
DrawSide(aRenderingContext, NS_SIDE_BOTTOM,
outlineStyle,
outlineColor,
@ -2070,7 +2078,7 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aSpacing,
const nsStyleBorder& aBorder,
nscoord aDX,
nscoord aDY)
{
@ -2125,7 +2133,7 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
nsRect paddingArea(aBorderArea);
nsMargin border;
if (!aSpacing.GetBorder(border)) {
if (!aBorder.GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
paddingArea.Deflate(border);
@ -2483,10 +2491,10 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
// is rendered over the 'border' 'padding' and 'content' areas
if (!transparentBG) {
// get the radius for our border
aSpacing.mBorderRadius.GetTop(bordStyleRadius[0]); //topleft
aSpacing.mBorderRadius.GetRight(bordStyleRadius[1]); //topright
aSpacing.mBorderRadius.GetBottom(bordStyleRadius[2]); //bottomright
aSpacing.mBorderRadius.GetLeft(bordStyleRadius[3]); //bottomleft
aBorder.mBorderRadius.GetTop(bordStyleRadius[0]); //topleft
aBorder.mBorderRadius.GetRight(bordStyleRadius[1]); //topright
aBorder.mBorderRadius.GetBottom(bordStyleRadius[2]); //bottomright
aBorder.mBorderRadius.GetLeft(bordStyleRadius[3]); //bottomleft
for(i=0;i<4;i++) {
borderRadii[i] = 0;
@ -2509,7 +2517,7 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
// rounded version of the border
for(i=0;i<4;i++){
if (borderRadii[i] > 0){
PaintRoundedBackground(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aColor,aSpacing,aDX,aDY,borderRadii);
PaintRoundedBackground(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aColor,aDX,aDY,borderRadii);
return;
}
}
@ -2563,7 +2571,6 @@ nsCSSRendering::PaintRoundedBackground(nsIPresContext* aPresContext,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aSpacing,
nscoord aDX,
nscoord aDY,
PRInt16 aTheRadius[4])
@ -2652,7 +2659,8 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
PRInt16 aBorderRadius[4],
@ -2670,16 +2678,16 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
nscoord twipsPerPixel,qtwips;
float p2t;
NS_ASSERTION((aIsOutline && aOutlineStyle) || (!aIsOutline && aBorderStyle), "null params not allowed");
if (!aIsOutline) {
aBorderStyle.CalcBorderFor(aForFrame, border);
aBorderStyle->CalcBorderFor(aForFrame, border);
if ((0 == border.left) && (0 == border.right) &&
(0 == border.top) && (0 == border.bottom)) {
return;
}
} else {
nscoord width;
if (!aBorderStyle.GetOutlineWidth(width)) {
if (!aOutlineStyle->GetOutlineWidth(width)) {
return;
}
border.left = width;
@ -2720,7 +2728,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr2.mAnc2.x, Icr2.mAnc2.y);
thePath[np++].MoveTo(Icr2.mCon.x, Icr2.mCon.y);
thePath[np++].MoveTo(Icr2.mAnc1.x, Icr2.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_TOP,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_TOP,border,qtwips, aIsOutline);
}
// RIGHT LINE ----------------------------------------------------------------
LR.MidPointDivide(&cr2,&cr3);
@ -2740,7 +2748,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr4.mAnc2.x,Icr4.mAnc2.y);
thePath[np++].MoveTo(Icr4.mCon.x, Icr4.mCon.y);
thePath[np++].MoveTo(Icr4.mAnc1.x,Icr4.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_RIGHT,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_RIGHT,border,qtwips, aIsOutline);
}
// bottom line ----------------------------------------------------------------
@ -2761,7 +2769,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr3.mAnc2.x, Icr3.mAnc2.y);
thePath[np++].MoveTo(Icr3.mCon.x, Icr3.mCon.y);
thePath[np++].MoveTo(Icr3.mAnc1.x, Icr3.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_BOTTOM,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_BOTTOM,border,qtwips, aIsOutline);
}
// left line ----------------------------------------------------------------
if(0==border.left)
@ -2782,7 +2790,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr4.mCon.x, Icr4.mCon.y);
thePath[np++].MoveTo(Icr4.mAnc1.x, Icr4.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_LEFT,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_LEFT,border,qtwips, aIsOutline);
}
@ -2792,7 +2800,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
*/
void
nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderingContext,
const nsStyleSpacing& aBorderStyle,nsIStyleContext* aStyleContext,
const nsStyleBorder* aBorderStyle,const nsStyleOutline* aOutlineStyle,nsIStyleContext* aStyleContext,
PRUint8 aSide,nsMargin &aBorThick,nscoord aTwipsPerPixel,
PRBool aIsOutline)
{
@ -2803,11 +2811,12 @@ nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderin
PRInt8 border_Style;
PRInt16 thickness;
NS_ASSERTION((aIsOutline && aOutlineStyle) || (!aIsOutline && aBorderStyle), "null params not allowed");
// set the style information
if (!aIsOutline) {
aBorderStyle.GetBorderColor(aSide,sideColor);
aBorderStyle->GetBorderColor(aSide,sideColor);
} else {
aBorderStyle.GetOutlineColor(sideColor);
aOutlineStyle->GetOutlineColor(sideColor);
}
aRenderingContext.SetColor ( sideColor );
@ -2838,16 +2847,15 @@ nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderin
} else {
if (!aIsOutline) {
border_Style = aBorderStyle.GetBorderStyle(aSide);
border_Style = aBorderStyle->GetBorderStyle(aSide);
} else {
border_Style = aBorderStyle.GetOutlineStyle();
border_Style = aOutlineStyle->GetOutlineStyle();
}
switch (border_Style){
case NS_STYLE_BORDER_STYLE_OUTSET:
case NS_STYLE_BORDER_STYLE_INSET:
{
const nsStyleColor* bgColor = nsStyleUtil::FindNonTransparentBackground(aStyleContext);
aBorderStyle.GetBorderColor(aSide,sideColor);
aRenderingContext.SetColor ( MakeBevelColor (aSide, border_Style, bgColor->mBackgroundColor,sideColor, PR_TRUE));
}
case NS_STYLE_BORDER_STYLE_DOTTED:
@ -2892,7 +2900,6 @@ nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderin
case NS_STYLE_BORDER_STYLE_GROOVE:
{
const nsStyleColor* bgColor = nsStyleUtil::FindNonTransparentBackground(aStyleContext);
aBorderStyle.GetBorderColor(aSide,sideColor);
aRenderingContext.SetColor ( MakeBevelColor (aSide, border_Style, bgColor->mBackgroundColor,sideColor, PR_TRUE));
polypath[0].x = NSToCoordRound(aPoints[0].x);

View File

@ -41,7 +41,7 @@ public:
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap = 0,
@ -61,7 +61,8 @@ public:
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
const nsStyleOutline& aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap = 0);
@ -101,7 +102,7 @@ public:
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aStyle,
const nsStyleBorder& aBorder,
nscoord aDX,
nscoord aDY);
@ -118,7 +119,8 @@ public:
static void DrawDashedSides(PRIntn startSide,
nsIRenderingContext& aContext,
const nsRect& aDirtyRect,
const nsStyleSpacing& aSpacing,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
PRBool aDoOutline,
const nsRect& borderOutside,
const nsRect& borderInside,
@ -147,7 +149,8 @@ protected:
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
PRInt16 aBorderRadius[4],nsRect* aGap = 0,
@ -155,7 +158,7 @@ protected:
static void RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderingContext,
const nsStyleSpacing& aBorderStyle,nsIStyleContext* aStyleContext,
const nsStyleBorder* aBorderStyle,const nsStyleOutline* aOutlineStyle,nsIStyleContext* aStyleContext,
PRUint8 aSide,nsMargin &aBorThick,nscoord aTwipsPerPixel,
PRBool aIsOutline=PR_FALSE);
@ -165,7 +168,6 @@ protected:
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aStyle,
nscoord aDX,
nscoord aDY,
PRInt16 aTheRadius[4]);

View File

@ -195,13 +195,13 @@
#define NS_STYLE_BORDER_COLLAPSE 0
#define NS_STYLE_BORDER_SEPARATE 1
// See nsStyleSpacing mBorder enum values
// See nsStyleBorder mBorder enum values
#define NS_STYLE_BORDER_WIDTH_THIN 0
#define NS_STYLE_BORDER_WIDTH_MEDIUM 1
#define NS_STYLE_BORDER_WIDTH_THICK 2
// XXX chopping block #define NS_STYLE_BORDER_WIDTH_LENGTH_VALUE 3
// See nsStyleSpacing mBorderStyle
// See nsStyleBorder mBorderStyle
#define NS_STYLE_BORDER_STYLE_NONE 0
#define NS_STYLE_BORDER_STYLE_GROOVE 1
#define NS_STYLE_BORDER_STYLE_RIDGE 2
@ -450,7 +450,7 @@
#define NS_STYLE_LIST_STYLE_POSITION_INSIDE 0
#define NS_STYLE_LIST_STYLE_POSITION_OUTSIDE 1
// See nsStyleSpacing
// See nsStyleMargin
#define NS_STYLE_MARGIN_SIZE_AUTO 0
// See nsStyleText

View File

@ -33,7 +33,9 @@ class nsLineLayout;
struct nsStyleDisplay;
struct nsStylePosition;
struct nsStyleSpacing;
struct nsStyleBorder;
struct nsStyleMargin;
struct nsStylePadding;
struct nsStyleText;
struct nsHypotheticalBox;
@ -206,7 +208,9 @@ struct nsHTMLReflowState {
// Cached pointers to the various style structs used during intialization
const nsStyleDisplay* mStyleDisplay;
const nsStylePosition* mStylePosition;
const nsStyleSpacing* mStyleSpacing;
const nsStyleBorder* mStyleBorder;
const nsStyleMargin* mStyleMargin;
const nsStylePadding* mStylePadding;
const nsStyleText* mStyleText;
// This value keeps track of how deeply nested a given reflow state

View File

@ -621,6 +621,10 @@ public:
*/
NS_IMETHOD GetStyleData(nsStyleStructID aSID,
const nsStyleStruct*& aStyleStruct) const = 0;
// Fill a style struct with data
NS_IMETHOD GetStyle(nsStyleStructID aSID, nsStyleStruct& aStruct) const = 0;
// Utility function: more convenient than 2 calls to GetStyleData to get border and padding
NS_IMETHOD CalcBorderPadding(nsMargin& aBorderPadding) const = 0;
/**
* These methods are to access any additional style contexts that

View File

@ -85,25 +85,50 @@ struct nsStyleColor : public nsStyleStruct {
(NS_STYLE_BG_COLOR_TRANSPARENT | NS_STYLE_BG_IMAGE_NONE);}
};
struct nsStyleSpacing: public nsStyleStruct {
nsStyleSpacing(void);
struct nsStyleMargin: public nsStyleStruct {
nsStyleMargin(void);
~nsStyleMargin(void);
nsStyleSides mMargin; // [reset] length, percent, auto, inherit
nsStyleSides mPadding; // [reset] length, percent, inherit
nsStyleSides mBorder; // [reset] length, enum (see nsStyleConsts.h)
nsStyleSides mBorderRadius; // [reset] length, percent, inherit
nsStyleSides mOutlineRadius; // [reset] length, percent, inherit
// (top=topLeft, right=topRight, bottom=bottomRight, left=bottomLeft)
nsStyleCoord mOutlineWidth; // [reset] length, enum (see nsStyleConsts.h)
PRUint8 mFloatEdge; // [reset] see nsStyleConsts.h
PRBool GetMargin(nsMargin& aMargin) const;
// XXX this is a deprecated method
void CalcMarginFor(const nsIFrame* aFrame, nsMargin& aMargin) const;
protected:
PRPackedBool mHasCachedMargin;
nsMargin mCachedMargin;
};
struct nsStylePadding: public nsStyleStruct {
nsStylePadding(void);
~nsStylePadding(void);
nsStyleSides mPadding; // [reset] length, percent, inherit
PRBool GetPadding(nsMargin& aPadding) const;
// XXX this is a deprecated method
void CalcPaddingFor(const nsIFrame* aFrame, nsMargin& aPadding) const;
protected:
PRPackedBool mHasCachedPadding;
nsMargin mCachedPadding;
};
struct nsStyleBorder: public nsStyleStruct {
nsStyleBorder(void);
~nsStyleBorder(void);
nsStyleSides mBorder; // [reset] length, enum (see nsStyleConsts.h)
nsStyleSides mBorderRadius; // [reset] length, percent, inherit
PRUint8 mFloatEdge; // [reset] see nsStyleConsts.h
PRBool GetBorder(nsMargin& aBorder) const;
PRBool GetBorderPadding(nsMargin& aBorderPadding) const;
PRUint8 GetBorderStyle(PRUint8 aSide) const;
void SetBorderStyle(PRUint8 aSide, PRUint8 aStyle);
@ -112,6 +137,39 @@ struct nsStyleSpacing: public nsStyleStruct {
void SetBorderTransparent(PRUint8 aSide);
void UnsetBorderColor(PRUint8 aSide);
// XXX these are deprecated methods
void CalcBorderFor(const nsIFrame* aFrame, nsMargin& aBorder) const;
protected:
PRPackedBool mHasCachedBorder;
nsMargin mCachedBorder;
PRUint8 mBorderStyle[4]; // [reset] See nsStyleConsts.h
nscolor mBorderColor[4]; // [reset]
};
struct nsStyleBorderPadding: public nsStyleStruct {
nsStyleBorderPadding(void);
~nsStyleBorderPadding(void);
PRBool GetBorderPadding(nsMargin& aBorderPadding) const;
void SetBorderPadding(nsMargin aBorderPadding);
protected:
nsMargin mCachedBorderPadding;
PRPackedBool mHasCachedBorderPadding;
};
struct nsStyleOutline: public nsStyleStruct {
nsStyleOutline(void);
~nsStyleOutline(void);
nsStyleSides mOutlineRadius; // [reset] length, percent, inherit
// (top=topLeft, right=topRight, bottom=bottomRight, left=bottomLeft)
nsStyleCoord mOutlineWidth; // [reset] length, enum (see nsStyleConsts.h)
PRBool GetOutlineWidth(nscoord& aWidth) const; // PR_TRUE if pre-computed
PRUint8 GetOutlineStyle(void) const;
void SetOutlineStyle(PRUint8 aStyle);
@ -119,29 +177,16 @@ struct nsStyleSpacing: public nsStyleStruct {
void SetOutlineColor(nscolor aColor);
void SetOutlineInvert(void);
// XXX these are deprecated methods
void CalcMarginFor(const nsIFrame* aFrame, nsMargin& aMargin) const;
void CalcPaddingFor(const nsIFrame* aFrame, nsMargin& aPadding) const;
void CalcBorderFor(const nsIFrame* aFrame, nsMargin& aBorder) const;
void CalcBorderPaddingFor(const nsIFrame* aFrame, nsMargin& aBorderPadding) const;
protected:
PRPackedBool mHasCachedMargin;
PRPackedBool mHasCachedPadding;
PRPackedBool mHasCachedBorder;
PRPackedBool mHasCachedOutline;
nsMargin mCachedMargin;
nsMargin mCachedPadding;
nsMargin mCachedBorder;
nsMargin mCachedBorderPadding;
nscoord mCachedOutlineWidth;
PRPackedBool mHasCachedOutline;
nscoord mCachedOutlineWidth;
PRUint8 mBorderStyle[4]; // [reset] See nsStyleConsts.h
nscolor mBorderColor[4]; // [reset]
PRUint8 mOutlineStyle; // [reset] See nsStyleConsts.h
nscolor mOutlineColor; // [reset]
PRUint8 mOutlineStyle; // [reset] See nsStyleConsts.h
nscolor mOutlineColor; // [reset]
};
struct nsStyleList : public nsStyleStruct {
nsStyleList(void);
~nsStyleList(void);
@ -153,6 +198,7 @@ struct nsStyleList : public nsStyleStruct {
struct nsStylePosition : public nsStyleStruct {
nsStylePosition(void);
~nsStylePosition(void);
PRUint8 mPosition; // [reset] see nsStyleConsts.h
@ -176,6 +222,7 @@ struct nsStylePosition : public nsStyleStruct {
struct nsStyleText : public nsStyleStruct {
nsStyleText(void);
~nsStyleText(void);
PRUint8 mTextAlign; // [inherited] see nsStyleConsts.h
PRUint8 mTextDecoration; // [reset] see nsStyleConsts.h
@ -195,6 +242,7 @@ struct nsStyleText : public nsStyleStruct {
struct nsStyleDisplay : public nsStyleStruct {
nsStyleDisplay(void);
~nsStyleDisplay(void);
PRUint8 mDirection; // [inherited] see nsStyleConsts.h NS_STYLE_DIRECTION_*
PRUint8 mDisplay; // [reset] see nsStyleConsts.h NS_STYLE_DISPLAY_*
@ -236,6 +284,7 @@ struct nsStyleDisplay : public nsStyleStruct {
struct nsStyleTable: public nsStyleStruct {
nsStyleTable(void);
~nsStyleTable(void);
PRUint8 mLayoutStrategy;// [reset] see nsStyleConsts.h NS_STYLE_TABLE_LAYOUT_*
PRUint8 mFrame; // [reset] see nsStyleConsts.h NS_STYLE_TABLE_FRAME_*
@ -315,6 +364,7 @@ protected:
struct nsStyleUserInterface: public nsStyleStruct {
nsStyleUserInterface(void);
~nsStyleUserInterface(void);
PRUint8 mUserInput; // [inherited]
PRUint8 mUserModify; // [inherited] (modify-content)
@ -328,6 +378,7 @@ struct nsStyleUserInterface: public nsStyleStruct {
struct nsStylePrint: public nsStyleStruct {
nsStylePrint(void);
~nsStylePrint(void);
PRUint8 mPageBreakBefore; // [reset] see nsStyleConsts.h NS_STYLE_PAGE_BREAK_*
PRUint8 mPageBreakAfter; // [reset] see nsStyleConsts.h NS_STYLE_PAGE_BREAK_*
@ -452,6 +503,9 @@ public:
// call if you change style data after creation
virtual void RecalcAutomaticData(nsIPresContext* aPresContext) = 0;
// utility function: more convenient than 2 calls to GetStyleData to get border and padding
virtual void CalcBorderPaddingFor(const nsIFrame* aFrame, nsMargin& aBorderPadding) const = 0;
};
// this is private to nsStyleSet, don't call it

View File

@ -195,13 +195,13 @@
#define NS_STYLE_BORDER_COLLAPSE 0
#define NS_STYLE_BORDER_SEPARATE 1
// See nsStyleSpacing mBorder enum values
// See nsStyleBorder mBorder enum values
#define NS_STYLE_BORDER_WIDTH_THIN 0
#define NS_STYLE_BORDER_WIDTH_MEDIUM 1
#define NS_STYLE_BORDER_WIDTH_THICK 2
// XXX chopping block #define NS_STYLE_BORDER_WIDTH_LENGTH_VALUE 3
// See nsStyleSpacing mBorderStyle
// See nsStyleBorder mBorderStyle
#define NS_STYLE_BORDER_STYLE_NONE 0
#define NS_STYLE_BORDER_STYLE_GROOVE 1
#define NS_STYLE_BORDER_STYLE_RIDGE 2
@ -450,7 +450,7 @@
#define NS_STYLE_LIST_STYLE_POSITION_INSIDE 0
#define NS_STYLE_LIST_STYLE_POSITION_OUTSIDE 1
// See nsStyleSpacing
// See nsStyleMargin
#define NS_STYLE_MARGIN_SIZE_AUTO 0
// See nsStyleText

View File

@ -25,15 +25,22 @@
enum nsStyleStructID {
eStyleStruct_Font = 1,
eStyleStruct_Color = 2,
eStyleStruct_Spacing = 3,
eStyleStruct_List = 4,
eStyleStruct_Position = 5,
eStyleStruct_Text = 6,
eStyleStruct_Display = 7,
eStyleStruct_Table = 8,
eStyleStruct_Content = 9,
eStyleStruct_UserInterface = 10,
eStyleStruct_Print = 11
eStyleStruct_List = 3,
eStyleStruct_Position = 4,
eStyleStruct_Text = 5,
eStyleStruct_Display = 6,
eStyleStruct_Table = 7,
eStyleStruct_Content = 8,
eStyleStruct_UserInterface = 9,
eStyleStruct_Print = 10,
eStyleStruct_Margin = 11,
eStyleStruct_Padding = 12,
eStyleStruct_Border = 13,
eStyleStruct_Outline = 14,
eStyleStruct_Max = eStyleStruct_Outline,
eStyleStruct_BorderPaddingShortcut = 15 // only for use in GetStyle()
};

File diff suppressed because it is too large Load Diff

View File

@ -144,10 +144,10 @@ nsButtonFrameRenderer::PaintOutlineAndFocusBorders(nsIPresContext* aPresContext,
GetButtonOuterFocusRect(aRect, rect);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mOuterFocusStyle ->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)mOuterFocusStyle ->GetStyleData(eStyleStruct_Border);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
aDirtyRect, rect, *spacing, mOuterFocusStyle, 0);
aDirtyRect, rect, *border, mOuterFocusStyle, 0);
}
// ---------- paint the inner focus border -------------
@ -155,10 +155,10 @@ nsButtonFrameRenderer::PaintOutlineAndFocusBorders(nsIPresContext* aPresContext,
GetButtonInnerFocusRect(aRect, rect);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Border);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
aDirtyRect, rect, *spacing, mInnerFocusStyle, 0);
aDirtyRect, rect, *border, mInnerFocusStyle, 0);
}
}
@ -186,8 +186,8 @@ nsButtonFrameRenderer::PaintBorderAndBackground(nsIPresContext* aPresContext,
// get the styles
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)context->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)context->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)context->GetStyleData(eStyleStruct_Color);
@ -195,10 +195,10 @@ nsButtonFrameRenderer::PaintBorderAndBackground(nsIPresContext* aPresContext,
// paint the border and background
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, mFrame,
aDirtyRect, buttonRect, *color, *spacing, 0, 0);
aDirtyRect, buttonRect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
aDirtyRect, buttonRect, *spacing, context, 0);
aDirtyRect, buttonRect, *border, context, 0);
}
@ -247,9 +247,9 @@ nsButtonFrameRenderer::GetButtonOuterFocusBorderAndPadding()
nsMargin focusBorderAndPadding(0,0,0,0);
if (mOuterFocusStyle) {
// get the outer focus border and padding
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mOuterFocusStyle ->GetStyleData(eStyleStruct_Spacing);
if (!spacing->GetBorderPadding(focusBorderAndPadding)) {
nsStyleBorderPadding bPad;
mOuterFocusStyle->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (!bPad.GetBorderPadding(focusBorderAndPadding)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
}
@ -263,12 +263,13 @@ nsButtonFrameRenderer::GetButtonBorderAndPadding()
nsCOMPtr<nsIStyleContext> context;
mFrame->GetStyleContext(getter_AddRefs(context));
nsMargin borderAndPadding(0,0,0,0);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)context ->GetStyleData(eStyleStruct_Spacing);
if (!spacing->GetBorderPadding(borderAndPadding)) {
nsMargin innerFocusBorderAndPadding(0,0,0,0);
nsStyleBorderPadding bPad;
context->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (!bPad.GetBorderPadding(innerFocusBorderAndPadding)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
return borderAndPadding;
return innerFocusBorderAndPadding;
}
/**
@ -281,8 +282,8 @@ nsButtonFrameRenderer::GetButtonInnerFocusMargin()
if (mInnerFocusStyle) {
// get the outer focus border and padding
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Spacing);
spacing->GetMargin(innerFocusMargin);
const nsStyleMargin* margin = (const nsStyleMargin*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Margin);
margin->GetMargin(innerFocusMargin);
}
return innerFocusMargin;
@ -295,8 +296,9 @@ nsButtonFrameRenderer::GetButtonInnerFocusBorderAndPadding()
if (mInnerFocusStyle) {
// get the outer focus border and padding
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Spacing);
if (!spacing->GetBorderPadding(innerFocusBorderAndPadding)) {
nsStyleBorderPadding bPad;
mInnerFocusStyle->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (!bPad.GetBorderPadding(innerFocusBorderAndPadding)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
}

View File

@ -830,11 +830,8 @@ nsComboboxControlFrame::ReflowItems(nsIPresContext* aPresContext,
delete [] str;
// get the borderPadding for the display area
const nsStyleSpacing* dspSpacing;
mDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(mDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
nscoord frmWidth = maxWidth+dspBorderPadding.left+dspBorderPadding.right+
aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
@ -886,11 +883,8 @@ nsComboboxControlFrame::ReflowCombobox(nsIPresContext * aPresContext,
REFLOW_NOISY_MSG3("mCacheSize.height:%d - %d\n", PX(mCacheSize.height), PX((aBorderPadding.top + aBorderPadding.bottom)));
// get the border and padding for the DisplayArea (block frame & textframe)
const nsStyleSpacing* dspSpacing;
aDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(aDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
// adjust the height
if (mCacheSize.height == kSizeNotSet) {
@ -1154,11 +1148,8 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
bailOnWidth, bailOnHeight);
if (bailOnWidth) {
#ifdef DO_REFLOW_DEBUG // check or size
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
nsMargin borderPadding;
borderPadding.SizeTo(0, 0, 0, 0);
spacing->CalcBorderPaddingFor(this, borderPadding);
nsMargin borderPadding(0, 0, 0, 0);
CalcBorderPadding(borderPadding);
UNCONSTRAINED_CHECK();
#endif
REFLOW_DEBUG_MSG3("^** Done nsCCF DW: %d DH: %d\n\n", PX(aDesiredSize.width), PX(aDesiredSize.height));
@ -1199,11 +1190,8 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
// get our border and padding,
// XXX - should be the same mComputedBorderPadding?
// maybe we should use that?
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
nsMargin borderPadding;
borderPadding.SizeTo(0, 0, 0, 0);
spacing->CalcBorderPaddingFor(this, borderPadding);
nsMargin borderPadding(0, 0, 0, 0);
CalcBorderPadding(borderPadding);
// Get the current sizes of the combo box child frames
mDisplayFrame->GetRect(displayRect);
@ -1480,18 +1468,12 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
}
// Get the border and padding for the dropdown
const nsStyleSpacing* dropSpacing;
mDropdownFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dropSpacing);
nsMargin dropBorderPadding;
dropBorderPadding.SizeTo(0, 0, 0, 0);
dropSpacing->CalcBorderPaddingFor(mDropdownFrame, dropBorderPadding);
nsMargin dropBorderPadding(0, 0, 0, 0);
mDropdownFrame->CalcBorderPadding(dropBorderPadding);
// get the borderPadding for the display area
const nsStyleSpacing* dspSpacing;
mDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(mDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
// Substract dropdown's borderPadding from the width of the dropdown rect
// to get the size of the content area
@ -1571,12 +1553,8 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
}
// get the borderPadding for the display area
const nsStyleSpacing* dspSpacing;
mDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(mDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
if (NS_UNCONSTRAINEDSIZE == firstPassState.mComputedWidth) {
mItemDisplayWidth = aDesiredSize.width - (dspBorderPadding.left + dspBorderPadding.right);

View File

@ -162,11 +162,11 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* borderStyle =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
nsMargin border;
if (!spacing->GetBorder(border)) {
if (!borderStyle->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
@ -180,7 +180,7 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
nsRect rect(0, yoff, mRect.width, mRect.height - yoff);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *borderStyle, 0, 0);
if (mLegendFrame) {
@ -197,7 +197,7 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
aRenderingContext.PushState();
aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect, clipState);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *borderStyle, mStyleContext, skipSides);
aRenderingContext.PopState(clipState);
@ -211,7 +211,7 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
aRenderingContext.PushState();
aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect, clipState);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *borderStyle, mStyleContext, skipSides);
aRenderingContext.PopState(clipState);
@ -225,14 +225,14 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
aRenderingContext.PushState();
aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect, clipState);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *borderStyle, mStyleContext, skipSides);
aRenderingContext.PopState(clipState);
} else {
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, nsRect(0,0,mRect.width, mRect.height), *spacing, mStyleContext, skipSides);
aDirtyRect, nsRect(0,0,mRect.width, mRect.height), *borderStyle, mStyleContext, skipSides);
}
}
}
@ -346,10 +346,10 @@ nsFieldSetFrame::Reflow(nsIPresContext* aPresContext,
nsMargin legendMargin(0,0,0,0);
// reflow the legend only if needed
if (mLegendFrame) {
const nsStyleSpacing* legendSpacing;
mLegendFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) legendSpacing);
legendSpacing->GetMargin(legendMargin);
const nsStyleMargin* marginStyle;
mLegendFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) marginStyle);
marginStyle->GetMargin(legendMargin);
if (reflowLegend) {
nsHTMLReflowState legendReflowState(aPresContext, aReflowState,
@ -481,12 +481,12 @@ nsFieldSetFrame::Reflow(nsIPresContext* aPresContext,
} else {
// if we don't need to reflow just get the old size
mContentFrame->GetRect(contentRect);
const nsStyleSpacing* spacing;
mContentFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
const nsStyleMargin* marginStyle;
mContentFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) marginStyle);
nsMargin m(0,0,0,0);
spacing->GetMargin(m);
marginStyle->GetMargin(m);
contentRect.Inflate(m);
}
}

View File

@ -929,9 +929,9 @@ nsresult nsFormControlFrame::PaintSpecialBorder(nsIPresContext* aPresContext,
if (specialBorderStyle){
// paint the border
const nsStyleSpacing* spacing = (const nsStyleSpacing*)specialBorderStyle ->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)specialBorderStyle ->GetStyleData(eStyleStruct_Border);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aFrame,
aDirtyRect, aRect, *spacing, specialBorderStyle, 0);
aDirtyRect, aRect, *border, specialBorderStyle, 0);
}
} else {

View File

@ -268,13 +268,10 @@ nsGfxCheckboxControlFrame::PaintCheckBox(nsIPresContext* aPresContext,
float p2t;
aPresContext->GetScaledPixelsToTwips(&p2t);
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
nsMargin borderPadding(0,0,0,0);
CalcBorderPadding(borderPadding);
nsRect checkRect(0,0, mRect.width, mRect.height);
nsMargin borderPadding;
spacing->CalcBorderPaddingFor(this, borderPadding);
checkRect.Deflate(borderPadding);
const nsStyleColor* color = (const nsStyleColor*)
@ -382,8 +379,8 @@ nsGfxCheckboxControlFrame::Paint(nsIPresContext* aPresContext,
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Color);
if (myColor->mBackgroundImage.Length() > 0) {
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Border);
const nsStylePosition* myPosition = (const nsStylePosition*)
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Position);
@ -395,9 +392,9 @@ nsGfxCheckboxControlFrame::Paint(nsIPresContext* aPresContext,
nsRect rect(x, y, width, height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *myColor, *mySpacing, 0, 0);
aDirtyRect, rect, *myColor, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mCheckButtonFaceStyle, 0);
aDirtyRect, rect, *myBorder, mCheckButtonFaceStyle, 0);
doDefaultPainting = PR_FALSE;
}
}

View File

@ -282,8 +282,8 @@ nsGfxRadioControlFrame::PaintRadioButton(nsIPresContext* aPresContext,
if (nsnull != mRadioButtonFaceStyle) {
const nsStyleColor* myColor = (const nsStyleColor*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Border);
const nsStylePosition* myPosition = (const nsStylePosition*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Position);
@ -300,9 +300,9 @@ nsGfxRadioControlFrame::PaintRadioButton(nsIPresContext* aPresContext,
nsStyleColor tmpColor = *myColor;
tmpColor.mBackgroundColor = myColor->mColor;
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, tmpColor, *mySpacing, 0, 0);
aDirtyRect, rect, tmpColor, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mRadioButtonFaceStyle, 0);
aDirtyRect, rect, *myBorder, mRadioButtonFaceStyle, 0);
}
}
}

View File

@ -492,11 +492,11 @@ nsHTMLButtonControlFrame::Paint(nsIPresContext* aPresContext,
// but the real problem is the FirstChild (the AreaFrame)
// isn't being constrained properly
// Bug #17474
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
const nsStyleBorder* borderStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
nsMargin border;
border.SizeTo(0, 0, 0, 0);
spacing->CalcBorderFor(this, border);
borderStyle->CalcBorderFor(this, border);
rect.Deflate(border);
aRenderingContext.PushState();

View File

@ -381,7 +381,7 @@ nsAbsoluteContainingBlock::ReflowAbsoluteFrame(nsIFrame* aDelegat
nsMargin border;
// Get the border values
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}

View File

@ -800,10 +800,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
if (mBand.GetFloaterCount()) {
// Use the float-edge property to determine how the child block
// will interact with the floater.
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
switch (spacing->mFloatEdge) {
const nsStyleBorder* borderStyle;
aFrame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&) borderStyle);
switch (borderStyle->mFloatEdge) {
default:
case NS_STYLE_FLOAT_EDGE_CONTENT: // content and only content does runaround of floaters
// The child block will flow around the floater. Therefore
@ -819,11 +819,14 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
// The child block's border should be placed adjacent to,
// but not overlap the floater(s).
nsMargin m(0, 0, 0, 0);
spacing->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == spacing->mFloatEdge) {
const nsStyleMargin* styleMargin;
aFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) styleMargin);
styleMargin->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == borderStyle->mFloatEdge) {
// Add in border too
nsMargin b;
spacing->GetBorder(b);
borderStyle->GetBorder(b);
m += b;
}
@ -1487,7 +1490,7 @@ CalculateContainingBlock(const nsHTMLReflowState& aReflowState,
// Containing block is relative to the padding edge
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aContainingBlockWidth -= border.left + border.right;
@ -1994,15 +1997,32 @@ HaveAutoWidth(const nsHTMLReflowState& aReflowState)
static PRBool
IsPercentageAwareChild(const nsIFrame* aFrame)
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (nsLineLayout::IsPercentageUnitSides(&space->mMargin)
|| nsLineLayout::IsPercentageUnitSides(&space->mPadding)
|| nsLineLayout::IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -5932,12 +5952,9 @@ nsBlockReflowState::PlaceFloater(nsFloaterCache* aFloaterCache,
// Get the type of floater
const nsStyleDisplay* floaterDisplay;
const nsStyleSpacing* floaterSpacing;
const nsStylePosition* floaterPosition;
floater->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)floaterDisplay);
floater->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)floaterSpacing);
floater->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)floaterPosition);
@ -6270,18 +6287,20 @@ nsBlockFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
// Paint background, border and outline
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext,
aDirtyRect, rect, *border, mStyleContext,
skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
// If overflow is hidden then set the clip rect so that children don't

View File

@ -58,7 +58,9 @@ nsBlockReflowContext::nsBlockReflowContext(nsIPresContext* aPresContext,
mComputeMaximumWidth(aComputeMaximumWidth),
mBlockShouldInvalidateItself(PR_FALSE)
{
mStyleSpacing = nsnull;
mStyleBorder = nsnull;
mStyleMargin = nsnull;
mStylePadding = nsnull;
if (mComputeMaximumWidth)
mMetrics.mFlags |= NS_REFLOW_CALC_MAX_WIDTH;
}
@ -137,11 +139,11 @@ nsBlockReflowContext::AlignBlockHorizontally(nscoord aWidth,
aAlign.mRightMargin = mMargin.right;
// Get style unit associated with the left and right margins
nsStyleUnit leftUnit = mStyleSpacing->mMargin.GetLeftUnit();
nsStyleUnit leftUnit = mStyleMargin->mMargin.GetLeftUnit();
if (eStyleUnit_Inherit == leftUnit) {
leftUnit = GetRealMarginLeftUnit();
}
nsStyleUnit rightUnit = mStyleSpacing->mMargin.GetRightUnit();
nsStyleUnit rightUnit = mStyleMargin->mMargin.GetRightUnit();
if (eStyleUnit_Inherit == rightUnit) {
rightUnit = GetRealMarginRightUnit();
}
@ -335,25 +337,25 @@ nsBlockReflowContext::ReflowBlock(nsIFrame* aFrame,
}
static void
ComputeShrinkwrapMargins(const nsStyleSpacing* aStyleSpacing, nscoord aWidth, nsMargin& aMargin, nscoord& aXToUpdate) {
ComputeShrinkwrapMargins(const nsStyleMargin* aStyleMargin, nscoord aWidth, nsMargin& aMargin, nscoord& aXToUpdate) {
nscoord boxWidth = aWidth;
float leftPct = 0.0;
float rightPct = 0.0;
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetLeftUnit()) {
nsStyleCoord leftCoord;
aStyleSpacing->mMargin.GetLeft(leftCoord);
aStyleMargin->mMargin.GetLeft(leftCoord);
leftPct = leftCoord.GetPercentValue();
} else {
boxWidth += aMargin.left;
}
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetRightUnit()) {
nsStyleCoord rightCoord;
aStyleSpacing->mMargin.GetRight(rightCoord);
aStyleMargin->mMargin.GetRight(rightCoord);
rightPct = rightCoord.GetPercentValue();
} else {
@ -379,11 +381,11 @@ ComputeShrinkwrapMargins(const nsStyleSpacing* aStyleSpacing, nscoord aWidth, ns
if ((marginPct > 0.0) && (marginPct < 1.0)) {
double shrinkWrapWidth = float(boxWidth) / (1.0 - marginPct);
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetLeftUnit()) {
aMargin.left = NSToCoordFloor((float)(shrinkWrapWidth * leftPct));
aXToUpdate += aMargin.left;
}
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetRightUnit()) {
aMargin.right = NSToCoordFloor((float)(shrinkWrapWidth * rightPct));
}
}
@ -442,7 +444,9 @@ nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState &aReflowState,
// from 10.3.3 to determine what to apply. At this point in the
// reflow auto left/right margins will have a zero value.
mMargin = aReflowState.mComputedMargin;
mStyleSpacing = aReflowState.mStyleSpacing;
mStyleBorder = aReflowState.mStyleBorder;
mStyleMargin = aReflowState.mStyleMargin;
mStylePadding = aReflowState.mStylePadding;
nscoord x;
nscoord y = aSpace.y + topMargin;
@ -658,7 +662,7 @@ nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState &aReflowState,
// based margins. If so, we can calculate them now that we know the shrink
// wrap width
if (NS_SHRINKWRAPWIDTH == aReflowState.mComputedWidth) {
ComputeShrinkwrapMargins(aReflowState.mStyleSpacing, mMetrics.width, mMargin, mX);
ComputeShrinkwrapMargins(aReflowState.mStyleMargin, mMetrics.width, mMargin, mX);
}
return rv;
@ -771,15 +775,15 @@ nsBlockReflowContext::PlaceBlock(PRBool aForceFit,
if (NS_SHRINKWRAPWIDTH == mComputedWidth) {
nscoord dummyXOffset;
// Base the margins on the max-element size
ComputeShrinkwrapMargins(mStyleSpacing, m->width, maxElemMargin, dummyXOffset);
ComputeShrinkwrapMargins(mStyleMargin, m->width, maxElemMargin, dummyXOffset);
}
// Do not allow auto margins to impact the max-element size
// since they are springy and don't really count!
if (eStyleUnit_Auto != mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Auto != mStyleMargin->mMargin.GetLeftUnit()) {
m->width += maxElemMargin.left;
}
if (eStyleUnit_Auto != mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Auto != mStyleMargin->mMargin.GetRightUnit()) {
m->width += maxElemMargin.right;
}
@ -817,9 +821,9 @@ nsBlockReflowContext::GetRealMarginLeftUnit()
NS_RELEASE(sc);
sc = psc;
if (nsnull != sc) {
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
sc->GetStyleData(eStyleStruct_Spacing);
unit = spacing->mMargin.GetLeftUnit();
const nsStyleMargin* margin = (const nsStyleMargin*)
sc->GetStyleData(eStyleStruct_Margin);
unit = margin->mMargin.GetLeftUnit();
}
}
NS_IF_RELEASE(sc);
@ -842,9 +846,9 @@ nsBlockReflowContext::GetRealMarginRightUnit()
NS_RELEASE(sc);
sc = psc;
if (nsnull != sc) {
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
sc->GetStyleData(eStyleStruct_Spacing);
unit = spacing->mMargin.GetRightUnit();
const nsStyleMargin* margin = (const nsStyleMargin*)
sc->GetStyleData(eStyleStruct_Margin);
unit = margin->mMargin.GetRightUnit();
}
}
NS_IF_RELEASE(sc);

View File

@ -29,7 +29,6 @@ class nsIFrame;
class nsIPresContext;
class nsLineLayout;
struct nsStylePosition;
struct nsStyleSpacing;
struct nsBlockHorizontalAlign;
/**
@ -137,7 +136,9 @@ protected:
nsIFrame* mNextRCFrame;
// Spacing style for the frame we are reflowing; only valid after reflow
const nsStyleSpacing* mStyleSpacing;
const nsStyleBorder* mStyleBorder;
const nsStyleMargin* mStyleMargin;
const nsStylePadding* mStylePadding;
nscoord mComputedWidth; // copy of reflowstate's computedWidth
nsMargin mMargin;

View File

@ -800,10 +800,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
if (mBand.GetFloaterCount()) {
// Use the float-edge property to determine how the child block
// will interact with the floater.
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
switch (spacing->mFloatEdge) {
const nsStyleBorder* borderStyle;
aFrame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&) borderStyle);
switch (borderStyle->mFloatEdge) {
default:
case NS_STYLE_FLOAT_EDGE_CONTENT: // content and only content does runaround of floaters
// The child block will flow around the floater. Therefore
@ -819,11 +819,14 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
// The child block's border should be placed adjacent to,
// but not overlap the floater(s).
nsMargin m(0, 0, 0, 0);
spacing->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == spacing->mFloatEdge) {
const nsStyleMargin* styleMargin;
aFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) styleMargin);
styleMargin->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == borderStyle->mFloatEdge) {
// Add in border too
nsMargin b;
spacing->GetBorder(b);
borderStyle->GetBorder(b);
m += b;
}
@ -1487,7 +1490,7 @@ CalculateContainingBlock(const nsHTMLReflowState& aReflowState,
// Containing block is relative to the padding edge
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aContainingBlockWidth -= border.left + border.right;
@ -1994,15 +1997,32 @@ HaveAutoWidth(const nsHTMLReflowState& aReflowState)
static PRBool
IsPercentageAwareChild(const nsIFrame* aFrame)
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (nsLineLayout::IsPercentageUnitSides(&space->mMargin)
|| nsLineLayout::IsPercentageUnitSides(&space->mPadding)
|| nsLineLayout::IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -5932,12 +5952,9 @@ nsBlockReflowState::PlaceFloater(nsFloaterCache* aFloaterCache,
// Get the type of floater
const nsStyleDisplay* floaterDisplay;
const nsStyleSpacing* floaterSpacing;
const nsStylePosition* floaterPosition;
floater->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)floaterDisplay);
floater->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)floaterSpacing);
floater->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)floaterPosition);
@ -6270,18 +6287,20 @@ nsBlockFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
// Paint background, border and outline
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext,
aDirtyRect, rect, *border, mStyleContext,
skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
// If overflow is hidden then set the clip rect so that children don't

View File

@ -800,10 +800,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
if (mBand.GetFloaterCount()) {
// Use the float-edge property to determine how the child block
// will interact with the floater.
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
switch (spacing->mFloatEdge) {
const nsStyleBorder* borderStyle;
aFrame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&) borderStyle);
switch (borderStyle->mFloatEdge) {
default:
case NS_STYLE_FLOAT_EDGE_CONTENT: // content and only content does runaround of floaters
// The child block will flow around the floater. Therefore
@ -819,11 +819,14 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
// The child block's border should be placed adjacent to,
// but not overlap the floater(s).
nsMargin m(0, 0, 0, 0);
spacing->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == spacing->mFloatEdge) {
const nsStyleMargin* styleMargin;
aFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) styleMargin);
styleMargin->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == borderStyle->mFloatEdge) {
// Add in border too
nsMargin b;
spacing->GetBorder(b);
borderStyle->GetBorder(b);
m += b;
}
@ -1487,7 +1490,7 @@ CalculateContainingBlock(const nsHTMLReflowState& aReflowState,
// Containing block is relative to the padding edge
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aContainingBlockWidth -= border.left + border.right;
@ -1994,15 +1997,32 @@ HaveAutoWidth(const nsHTMLReflowState& aReflowState)
static PRBool
IsPercentageAwareChild(const nsIFrame* aFrame)
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (nsLineLayout::IsPercentageUnitSides(&space->mMargin)
|| nsLineLayout::IsPercentageUnitSides(&space->mPadding)
|| nsLineLayout::IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -5932,12 +5952,9 @@ nsBlockReflowState::PlaceFloater(nsFloaterCache* aFloaterCache,
// Get the type of floater
const nsStyleDisplay* floaterDisplay;
const nsStyleSpacing* floaterSpacing;
const nsStylePosition* floaterPosition;
floater->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)floaterDisplay);
floater->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)floaterSpacing);
floater->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)floaterPosition);
@ -6270,18 +6287,20 @@ nsBlockFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
// Paint background, border and outline
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext,
aDirtyRect, rect, *border, mStyleContext,
skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
// If overflow is hidden then set the clip rect so that children don't

View File

@ -599,18 +599,20 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
}
if (hasOverflowClip) {
const nsStyleSpacing* spacing;
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
nsMargin border, padding;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)paddingStyle);
// XXX We don't support the 'overflow-clip' property yet so just use the
// content area (which is the default value) as the clip shape
overflowClipRect.SetRect(0, 0, frameSize.width, frameSize.height);
spacing->GetBorder(border);
borderStyle->GetBorder(border);
overflowClipRect.Deflate(border);
// XXX We need to handle percentage padding
if (spacing->GetPadding(padding)) {
if (paddingStyle->GetPadding(padding)) {
overflowClipRect.Deflate(padding);
}
}

View File

@ -493,6 +493,23 @@ NS_IMETHODIMP nsFrame::GetStyleData(nsStyleStructID aSID, const nsStyleStruct*&
return NS_OK;
}
NS_IMETHODIMP nsFrame::GetStyle(nsStyleStructID aSID, nsStyleStruct& aStruct) const {
NS_ASSERTION(mStyleContext!=nsnull,"null style context");
if (mStyleContext) {
return mStyleContext->GetStyle(aSID, aStruct);
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsFrame::CalcBorderPadding(nsMargin& aBorderPadding) const {
NS_ASSERTION(mStyleContext!=nsnull,"null style context");
if (mStyleContext) {
mStyleContext->CalcBorderPaddingFor(this, aBorderPadding);
return NS_OK;
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
nsFrame::GetAdditionalStyleContext(PRInt32 aIndex,
nsIStyleContext** aStyleContext) const
@ -624,8 +641,10 @@ nsFrame::SetOverflowClipRect(nsIRenderingContext& aRenderingContext)
// 'overflow-clip' only applies to block-level elements and replaced
// elements that have 'overflow' set to 'hidden', and it is relative
// to the content area and applies to content only (not border or background)
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)paddingStyle);
// Start with the 'auto' values and then factor in user specified values
nsRect clipRect(0, 0, mRect.width, mRect.height);
@ -634,10 +653,10 @@ nsFrame::SetOverflowClipRect(nsIRenderingContext& aRenderingContext)
// content area (which is the default value) as the clip shape
nsMargin border, padding;
spacing->GetBorder(border);
borderStyle->GetBorder(border);
clipRect.Deflate(border);
// XXX We need to handle percentage padding
if (spacing->GetPadding(padding)) {
if (paddingStyle->GetPadding(padding)) {
clipRect.Deflate(padding);
}
@ -2086,10 +2105,10 @@ nsFrame::Invalidate(nsIPresContext* aPresContext,
// Checks to see if the damaged rect should be infalted
// to include the outline
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
const nsStyleOutline* outline;
GetStyleData(eStyleStruct_Outline, (const nsStyleStruct*&)outline);
nscoord width;
spacing->GetOutlineWidth(width);
outline->GetOutlineWidth(width);
if (width > 0) {
damageRect.Inflate(width, width);
}

View File

@ -173,6 +173,8 @@ public:
nsIStyleContext* aContext);
NS_IMETHOD GetStyleData(nsStyleStructID aSID,
const nsStyleStruct*& aStyleStruct) const;
NS_IMETHOD GetStyle(nsStyleStructID aSID, nsStyleStruct& aStruct) const;
NS_IMETHOD CalcBorderPadding(nsMargin& aBorderPadding) const;
NS_IMETHOD GetAdditionalStyleContext(PRInt32 aIndex,
nsIStyleContext** aStyleContext) const;
NS_IMETHOD SetAdditionalStyleContext(PRInt32 aIndex,

View File

@ -73,16 +73,18 @@ nsHTMLContainerFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *border, mStyleContext, skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
// The sole purpose of this is to trigger display
// of the selection window for Named Anchors,

View File

@ -304,7 +304,7 @@ CanvasFrame::Reflow(nsIPresContext* aPresContext,
nsMargin border;
nsFrameState kidState;
if (!kidReflowState.mStyleSpacing->GetBorder(border)) {
if (!kidReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
kidFrame->GetFrameState(&kidState);

View File

@ -182,8 +182,12 @@ nsHTMLReflowState::Init(nsIPresContext* aPresContext,
(const nsStyleStruct*&)mStylePosition);
frame->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)mStyleDisplay);
frame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)mStyleSpacing);
frame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&)mStyleBorder);
frame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&)mStyleMargin);
frame->GetStyleData(eStyleStruct_Padding,
(const nsStyleStruct*&)mStylePadding);
frame->GetStyleData(eStyleStruct_Text,
(const nsStyleStruct*&)mStyleText);
mFrameType = DetermineFrameType(frame, mStylePosition, mStyleDisplay);
@ -478,10 +482,10 @@ GetNearestContainingBlock(nsIFrame* aFrame, nsMargin& aContentArea)
// Subtract off for border and padding. If it can't be computed because
// it's percentage based (for example) then just ignore it
nsStyleSpacing* spacing;
nsMargin borderPadding;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing->GetBorderPadding(borderPadding)) {
nsStyleBorderPadding bPad;
nsMargin borderPadding;
aFrame->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (bPad.GetBorderPadding(borderPadding)) {
aContentArea.left += borderPadding.left;
aContentArea.top += borderPadding.top;
aContentArea.right -= borderPadding.right;
@ -537,55 +541,55 @@ nsHTMLReflowState::CalculateHorizBorderPaddingMargin(nscoord aContainingBlockWid
nsMargin border, padding, margin;
// Get the border
if (!mStyleSpacing->GetBorder(border)) {
if (!mStyleBorder->GetBorder(border)) {
// CSS2 has no percentage borders
border.SizeTo(0, 0, 0, 0);
}
// See if the style system can provide us the padding directly
if (!mStyleSpacing->GetPadding(padding)) {
if (!mStylePadding->GetPadding(padding)) {
nsStyleCoord left, right;
// We have to compute the left and right values
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetLeftUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetLeftUnit()) {
padding.left = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetLeftUnit(),
mStyleSpacing->mPadding.GetLeft(left),
mStylePadding->mPadding.GetLeftUnit(),
mStylePadding->mPadding.GetLeft(left),
padding.left);
}
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetRightUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetRightUnit()) {
padding.right = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetRightUnit(),
mStyleSpacing->mPadding.GetRight(right),
mStylePadding->mPadding.GetRightUnit(),
mStylePadding->mPadding.GetRight(right),
padding.right);
}
}
// See if the style system can provide us the margin directly
if (!mStyleSpacing->GetMargin(margin)) {
if (!mStyleMargin->GetMargin(margin)) {
nsStyleCoord left, right;
// We have to compute the left and right values
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit()) ||
(eStyleUnit_Inherit == mStyleSpacing->mMargin.GetLeftUnit())) {
if ((eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit()) ||
(eStyleUnit_Inherit == mStyleMargin->mMargin.GetLeftUnit())) {
margin.left = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetLeftUnit(),
mStyleSpacing->mMargin.GetLeft(left),
mStyleMargin->mMargin.GetLeftUnit(),
mStyleMargin->mMargin.GetLeft(left),
margin.left);
}
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit()) ||
(eStyleUnit_Inherit == mStyleSpacing->mMargin.GetRightUnit())) {
if ((eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit()) ||
(eStyleUnit_Inherit == mStyleMargin->mMargin.GetRightUnit())) {
margin.right = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetRightUnit(),
mStyleSpacing->mMargin.GetRight(right),
mStyleMargin->mMargin.GetRightUnit(),
mStyleMargin->mMargin.GetRight(right),
margin.right);
}
}
@ -846,10 +850,10 @@ nsHTMLReflowState::CalculateHypotheticalBox(nsIPresContext* aPresContext,
// The specified offsets are relative to the absolute containing block's padding
// edge, and our current values are relative to the border edge so translate
nsMargin border;
const nsStyleSpacing* spacing;
const nsStyleBorder* borderStyle;
aAbsoluteContainingBlockFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (!spacing->GetBorder(border)) {
aAbsoluteContainingBlockFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
if (!borderStyle->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aHypotheticalBox.mLeft -= border.left;
@ -967,8 +971,8 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext* aPresContext,
} else {
// Calculate any 'auto' margin values
PRBool marginLeftIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit());
PRBool marginRightIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit());
PRBool marginLeftIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit());
PRBool marginRightIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit());
PRInt32 availMarginSpace = availContentSpace - mComputedWidth;
if (marginLeftIsAuto) {
@ -1170,8 +1174,8 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext* aPresContext,
} else {
// Calculate any 'auto' margin values
PRBool marginTopIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetTopUnit());
PRBool marginBottomIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetBottomUnit());
PRBool marginTopIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetTopUnit());
PRBool marginBottomIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetBottomUnit());
PRInt32 availMarginSpace = availContentSpace - mComputedHeight;
if (marginTopIsAuto) {
@ -1534,7 +1538,7 @@ nsHTMLReflowState::InitConstraints(nsIPresContext* aPresContext,
// inline-non-replaced elements
ComputeMargin(aContainingBlockWidth, cbrs);
ComputePadding(aContainingBlockWidth, cbrs);
if (!mStyleSpacing->GetBorder(mComputedBorderPadding)) {
if (!mStyleBorder->GetBorder(mComputedBorderPadding)) {
// CSS2 has no percentage borders
mComputedBorderPadding.SizeTo(0, 0, 0, 0);
}
@ -1861,10 +1865,10 @@ nsHTMLReflowState::ComputeBlockBoxData(nsIPresContext* aPresContext,
mComputedWidth = 0; // XXX temp fix for trees
} else if (nsLayoutAtoms::tableFrame == fType.get()) {
mComputedWidth = NS_SHRINKWRAPWIDTH;
if (eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit()) {
mComputedMargin.left = NS_AUTOMARGIN;
}
if (eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit()) {
mComputedMargin.right = NS_AUTOMARGIN;
}
} else {
@ -2000,9 +2004,9 @@ nsHTMLReflowState::CalculateBlockSideMargins(nscoord aAvailWidth,
// Determine the left and right margin values. The width value
// remains constant while we do this.
PRBool isAutoLeftMargin =
eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit();
eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit();
PRBool isAutoRightMargin =
eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit();
eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit();
// Calculate how much space is available for margins
nscoord availMarginSpace = aAvailWidth - aComputedWidth -
@ -2294,42 +2298,42 @@ nsHTMLReflowState::ComputeMargin(nscoord aContainingBlockWidth,
const nsHTMLReflowState* aContainingBlockRS)
{
// If style style can provide us the margin directly, then use it.
if (!mStyleSpacing->GetMargin(mComputedMargin)) {
if (!mStyleMargin->GetMargin(mComputedMargin)) {
// We have to compute the value
if (NS_UNCONSTRAINEDSIZE == aContainingBlockWidth) {
mComputedMargin.left = 0;
mComputedMargin.right = 0;
if (eStyleUnit_Coord == mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Coord == mStyleMargin->mMargin.GetLeftUnit()) {
nsStyleCoord left;
mStyleSpacing->mMargin.GetLeft(left),
mStyleMargin->mMargin.GetLeft(left),
mComputedMargin.left = left.GetCoordValue();
}
if (eStyleUnit_Coord == mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Coord == mStyleMargin->mMargin.GetRightUnit()) {
nsStyleCoord right;
mStyleSpacing->mMargin.GetRight(right),
mStyleMargin->mMargin.GetRight(right),
mComputedMargin.right = right.GetCoordValue();
}
} else {
nsStyleCoord left, right;
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetLeftUnit()) {
mComputedMargin.left = aContainingBlockRS->mComputedMargin.left;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetLeftUnit(),
mStyleSpacing->mMargin.GetLeft(left),
mStyleMargin->mMargin.GetLeftUnit(),
mStyleMargin->mMargin.GetLeft(left),
mComputedMargin.left);
}
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetRightUnit()) {
mComputedMargin.right = aContainingBlockRS->mComputedMargin.right;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetRightUnit(),
mStyleSpacing->mMargin.GetRight(right),
mStyleMargin->mMargin.GetRightUnit(),
mStyleMargin->mMargin.GetRight(right),
mComputedMargin.right);
}
}
@ -2340,20 +2344,20 @@ nsHTMLReflowState::ComputeMargin(nscoord aContainingBlockWidth,
// According to the CSS2 spec, margin percentages are
// calculated with respect to the *height* of the containing
// block when in a paginated context.
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetTopUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetTopUnit()) {
mComputedMargin.top = aContainingBlockRS->mComputedMargin.top;
} else {
ComputeVerticalValue(rs2->mComputedHeight,
mStyleSpacing->mMargin.GetTopUnit(),
mStyleSpacing->mMargin.GetTop(top),
mStyleMargin->mMargin.GetTopUnit(),
mStyleMargin->mMargin.GetTop(top),
mComputedMargin.top);
}
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetBottomUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetBottomUnit()) {
mComputedMargin.bottom = aContainingBlockRS->mComputedMargin.bottom;
} else {
ComputeVerticalValue(rs2->mComputedHeight,
mStyleSpacing->mMargin.GetBottomUnit(),
mStyleSpacing->mMargin.GetBottom(bottom),
mStyleMargin->mMargin.GetBottomUnit(),
mStyleMargin->mMargin.GetBottom(bottom),
mComputedMargin.bottom);
}
}
@ -2366,20 +2370,20 @@ nsHTMLReflowState::ComputeMargin(nscoord aContainingBlockWidth,
mComputedMargin.bottom = 0;
} else {
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetTopUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetTopUnit()) {
mComputedMargin.top = aContainingBlockRS->mComputedMargin.top;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetTopUnit(),
mStyleSpacing->mMargin.GetTop(top),
mStyleMargin->mMargin.GetTopUnit(),
mStyleMargin->mMargin.GetTop(top),
mComputedMargin.top);
}
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetBottomUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetBottomUnit()) {
mComputedMargin.bottom = aContainingBlockRS->mComputedMargin.bottom;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetBottomUnit(),
mStyleSpacing->mMargin.GetBottom(bottom),
mStyleMargin->mMargin.GetBottomUnit(),
mStyleMargin->mMargin.GetBottom(bottom),
mComputedMargin.bottom);
}
}
@ -2393,43 +2397,43 @@ nsHTMLReflowState::ComputePadding(nscoord aContainingBlockWidth,
{
// If style can provide us the padding directly, then use it.
if (!mStyleSpacing->GetPadding(mComputedPadding)) {
if (!mStylePadding->GetPadding(mComputedPadding)) {
// We have to compute the value
nsStyleCoord left, right, top, bottom;
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetLeftUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetLeftUnit()) {
mComputedPadding.left = aContainingBlockRS->mComputedPadding.left;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetLeftUnit(),
mStyleSpacing->mPadding.GetLeft(left),
mStylePadding->mPadding.GetLeftUnit(),
mStylePadding->mPadding.GetLeft(left),
mComputedPadding.left);
}
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetRightUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetRightUnit()) {
mComputedPadding.right = aContainingBlockRS->mComputedPadding.right;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetRightUnit(),
mStyleSpacing->mPadding.GetRight(right),
mStylePadding->mPadding.GetRightUnit(),
mStylePadding->mPadding.GetRight(right),
mComputedPadding.right);
}
// According to the CSS2 spec, percentages are calculated with respect to
// containing block width for padding-top and padding-bottom
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetTopUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetTopUnit()) {
mComputedPadding.top = aContainingBlockRS->mComputedPadding.top;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetTopUnit(),
mStyleSpacing->mPadding.GetTop(top),
mStylePadding->mPadding.GetTopUnit(),
mStylePadding->mPadding.GetTop(top),
mComputedPadding.top);
}
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetBottomUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetBottomUnit()) {
mComputedPadding.bottom = aContainingBlockRS->mComputedPadding.bottom;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetBottomUnit(),
mStyleSpacing->mPadding.GetBottom(bottom),
mStylePadding->mPadding.GetBottomUnit(),
mStylePadding->mPadding.GetBottom(bottom),
mComputedPadding.bottom);
}
}

View File

@ -33,7 +33,9 @@ class nsLineLayout;
struct nsStyleDisplay;
struct nsStylePosition;
struct nsStyleSpacing;
struct nsStyleBorder;
struct nsStyleMargin;
struct nsStylePadding;
struct nsStyleText;
struct nsHypotheticalBox;
@ -206,7 +208,9 @@ struct nsHTMLReflowState {
// Cached pointers to the various style structs used during intialization
const nsStyleDisplay* mStyleDisplay;
const nsStylePosition* mStylePosition;
const nsStyleSpacing* mStyleSpacing;
const nsStyleBorder* mStyleBorder;
const nsStyleMargin* mStyleMargin;
const nsStylePadding* mStylePadding;
const nsStyleText* mStyleText;
// This value keeps track of how deeply nested a given reflow state

View File

@ -621,6 +621,10 @@ public:
*/
NS_IMETHOD GetStyleData(nsStyleStructID aSID,
const nsStyleStruct*& aStyleStruct) const = 0;
// Fill a style struct with data
NS_IMETHOD GetStyle(nsStyleStructID aSID, nsStyleStruct& aStruct) const = 0;
// Utility function: more convenient than 2 calls to GetStyleData to get border and padding
NS_IMETHOD CalcBorderPadding(nsMargin& aBorderPadding) const = 0;
/**
* These methods are to access any additional style contexts that

View File

@ -491,9 +491,9 @@ nsImageFrame::DisplayAltText(nsIPresContext* aPresContext,
NS_RELEASE(fm);
}
struct nsRecessedBorder : public nsStyleSpacing {
struct nsRecessedBorder : public nsStyleBorder {
nsRecessedBorder(nscoord aBorderWidth)
: nsStyleSpacing()
: nsStyleBorder()
{
nsStyleCoord styleCoord(aBorderWidth);
@ -512,7 +512,7 @@ struct nsRecessedBorder : public nsStyleSpacing {
mBorderColor[2] = 0;
mBorderColor[3] = 0;
mHasCachedMargin = mHasCachedPadding = mHasCachedBorder = PR_FALSE;
mHasCachedBorder = PR_FALSE;
}
};

View File

@ -51,17 +51,19 @@ nsLeafFrame::Paint(nsIPresContext* aPresContext,
if (disp->IsVisibleOrCollapsed()) {
const nsStyleColor* myColor = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* myOutline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *myColor, *mySpacing, 0, 0);
aDirtyRect, rect, *myColor, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mStyleContext, 0);
aDirtyRect, rect, *myBorder, mStyleContext, 0);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mStyleContext, 0);
aDirtyRect, rect, *myBorder, *myOutline, mStyleContext, 0);
}
}
return NS_OK;

View File

@ -1570,15 +1570,31 @@ nsLineLayout::IsPercentageAwareReplacedElement(nsIPresContext *aPresContext,
if (nsLayoutAtoms::brFrame != frameType.get() &&
nsLayoutAtoms::textFrame != frameType.get())
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (IsPercentageUnitSides(&space->mMargin)
|| IsPercentageUnitSides(&space->mPadding)
|| IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -2705,19 +2721,19 @@ nsLineLayout::HorizontalAlignFrames(nsRect& aLineBounds,
if (nsLayoutAtoms::hrFrame == frameType.get()) {
// get the alignment from the HR frame
{
const nsStyleSpacing* spacing;
psd->mFirstFrame->mFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)spacing);
const nsStyleMargin* margin;
psd->mFirstFrame->mFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&)margin);
textAlign = NS_STYLE_TEXT_ALIGN_CENTER;
nsStyleCoord zero(nscoord(0));
nsStyleCoord temp;
if ((eStyleUnit_Coord==spacing->mMargin.GetLeftUnit()) &&
(zero==spacing->mMargin.GetLeft(temp)))
if ((eStyleUnit_Coord==margin->mMargin.GetLeftUnit()) &&
(zero==margin->mMargin.GetLeft(temp)))
{
textAlign = NS_STYLE_TEXT_ALIGN_LEFT;
}
else if ((eStyleUnit_Coord==spacing->mMargin.GetRightUnit()) &&
(zero==spacing->mMargin.GetRight(temp))) {
else if ((eStyleUnit_Coord==margin->mMargin.GetRightUnit()) &&
(zero==margin->mMargin.GetRight(temp))) {
textAlign = NS_STYLE_TEXT_ALIGN_RIGHT;
}
}

View File

@ -381,7 +381,7 @@ nsAbsoluteContainingBlock::ReflowAbsoluteFrame(nsIFrame* aDelegat
nsMargin border;
// Get the border values
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}

View File

@ -800,10 +800,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
if (mBand.GetFloaterCount()) {
// Use the float-edge property to determine how the child block
// will interact with the floater.
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
switch (spacing->mFloatEdge) {
const nsStyleBorder* borderStyle;
aFrame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&) borderStyle);
switch (borderStyle->mFloatEdge) {
default:
case NS_STYLE_FLOAT_EDGE_CONTENT: // content and only content does runaround of floaters
// The child block will flow around the floater. Therefore
@ -819,11 +819,14 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
// The child block's border should be placed adjacent to,
// but not overlap the floater(s).
nsMargin m(0, 0, 0, 0);
spacing->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == spacing->mFloatEdge) {
const nsStyleMargin* styleMargin;
aFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) styleMargin);
styleMargin->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == borderStyle->mFloatEdge) {
// Add in border too
nsMargin b;
spacing->GetBorder(b);
borderStyle->GetBorder(b);
m += b;
}
@ -1487,7 +1490,7 @@ CalculateContainingBlock(const nsHTMLReflowState& aReflowState,
// Containing block is relative to the padding edge
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aContainingBlockWidth -= border.left + border.right;
@ -1994,15 +1997,32 @@ HaveAutoWidth(const nsHTMLReflowState& aReflowState)
static PRBool
IsPercentageAwareChild(const nsIFrame* aFrame)
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (nsLineLayout::IsPercentageUnitSides(&space->mMargin)
|| nsLineLayout::IsPercentageUnitSides(&space->mPadding)
|| nsLineLayout::IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -5932,12 +5952,9 @@ nsBlockReflowState::PlaceFloater(nsFloaterCache* aFloaterCache,
// Get the type of floater
const nsStyleDisplay* floaterDisplay;
const nsStyleSpacing* floaterSpacing;
const nsStylePosition* floaterPosition;
floater->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)floaterDisplay);
floater->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)floaterSpacing);
floater->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)floaterPosition);
@ -6270,18 +6287,20 @@ nsBlockFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
// Paint background, border and outline
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext,
aDirtyRect, rect, *border, mStyleContext,
skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
// If overflow is hidden then set the clip rect so that children don't

View File

@ -58,7 +58,9 @@ nsBlockReflowContext::nsBlockReflowContext(nsIPresContext* aPresContext,
mComputeMaximumWidth(aComputeMaximumWidth),
mBlockShouldInvalidateItself(PR_FALSE)
{
mStyleSpacing = nsnull;
mStyleBorder = nsnull;
mStyleMargin = nsnull;
mStylePadding = nsnull;
if (mComputeMaximumWidth)
mMetrics.mFlags |= NS_REFLOW_CALC_MAX_WIDTH;
}
@ -137,11 +139,11 @@ nsBlockReflowContext::AlignBlockHorizontally(nscoord aWidth,
aAlign.mRightMargin = mMargin.right;
// Get style unit associated with the left and right margins
nsStyleUnit leftUnit = mStyleSpacing->mMargin.GetLeftUnit();
nsStyleUnit leftUnit = mStyleMargin->mMargin.GetLeftUnit();
if (eStyleUnit_Inherit == leftUnit) {
leftUnit = GetRealMarginLeftUnit();
}
nsStyleUnit rightUnit = mStyleSpacing->mMargin.GetRightUnit();
nsStyleUnit rightUnit = mStyleMargin->mMargin.GetRightUnit();
if (eStyleUnit_Inherit == rightUnit) {
rightUnit = GetRealMarginRightUnit();
}
@ -335,25 +337,25 @@ nsBlockReflowContext::ReflowBlock(nsIFrame* aFrame,
}
static void
ComputeShrinkwrapMargins(const nsStyleSpacing* aStyleSpacing, nscoord aWidth, nsMargin& aMargin, nscoord& aXToUpdate) {
ComputeShrinkwrapMargins(const nsStyleMargin* aStyleMargin, nscoord aWidth, nsMargin& aMargin, nscoord& aXToUpdate) {
nscoord boxWidth = aWidth;
float leftPct = 0.0;
float rightPct = 0.0;
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetLeftUnit()) {
nsStyleCoord leftCoord;
aStyleSpacing->mMargin.GetLeft(leftCoord);
aStyleMargin->mMargin.GetLeft(leftCoord);
leftPct = leftCoord.GetPercentValue();
} else {
boxWidth += aMargin.left;
}
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetRightUnit()) {
nsStyleCoord rightCoord;
aStyleSpacing->mMargin.GetRight(rightCoord);
aStyleMargin->mMargin.GetRight(rightCoord);
rightPct = rightCoord.GetPercentValue();
} else {
@ -379,11 +381,11 @@ ComputeShrinkwrapMargins(const nsStyleSpacing* aStyleSpacing, nscoord aWidth, ns
if ((marginPct > 0.0) && (marginPct < 1.0)) {
double shrinkWrapWidth = float(boxWidth) / (1.0 - marginPct);
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetLeftUnit()) {
aMargin.left = NSToCoordFloor((float)(shrinkWrapWidth * leftPct));
aXToUpdate += aMargin.left;
}
if (eStyleUnit_Percent == aStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Percent == aStyleMargin->mMargin.GetRightUnit()) {
aMargin.right = NSToCoordFloor((float)(shrinkWrapWidth * rightPct));
}
}
@ -442,7 +444,9 @@ nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState &aReflowState,
// from 10.3.3 to determine what to apply. At this point in the
// reflow auto left/right margins will have a zero value.
mMargin = aReflowState.mComputedMargin;
mStyleSpacing = aReflowState.mStyleSpacing;
mStyleBorder = aReflowState.mStyleBorder;
mStyleMargin = aReflowState.mStyleMargin;
mStylePadding = aReflowState.mStylePadding;
nscoord x;
nscoord y = aSpace.y + topMargin;
@ -658,7 +662,7 @@ nsBlockReflowContext::DoReflowBlock(nsHTMLReflowState &aReflowState,
// based margins. If so, we can calculate them now that we know the shrink
// wrap width
if (NS_SHRINKWRAPWIDTH == aReflowState.mComputedWidth) {
ComputeShrinkwrapMargins(aReflowState.mStyleSpacing, mMetrics.width, mMargin, mX);
ComputeShrinkwrapMargins(aReflowState.mStyleMargin, mMetrics.width, mMargin, mX);
}
return rv;
@ -771,15 +775,15 @@ nsBlockReflowContext::PlaceBlock(PRBool aForceFit,
if (NS_SHRINKWRAPWIDTH == mComputedWidth) {
nscoord dummyXOffset;
// Base the margins on the max-element size
ComputeShrinkwrapMargins(mStyleSpacing, m->width, maxElemMargin, dummyXOffset);
ComputeShrinkwrapMargins(mStyleMargin, m->width, maxElemMargin, dummyXOffset);
}
// Do not allow auto margins to impact the max-element size
// since they are springy and don't really count!
if (eStyleUnit_Auto != mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Auto != mStyleMargin->mMargin.GetLeftUnit()) {
m->width += maxElemMargin.left;
}
if (eStyleUnit_Auto != mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Auto != mStyleMargin->mMargin.GetRightUnit()) {
m->width += maxElemMargin.right;
}
@ -817,9 +821,9 @@ nsBlockReflowContext::GetRealMarginLeftUnit()
NS_RELEASE(sc);
sc = psc;
if (nsnull != sc) {
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
sc->GetStyleData(eStyleStruct_Spacing);
unit = spacing->mMargin.GetLeftUnit();
const nsStyleMargin* margin = (const nsStyleMargin*)
sc->GetStyleData(eStyleStruct_Margin);
unit = margin->mMargin.GetLeftUnit();
}
}
NS_IF_RELEASE(sc);
@ -842,9 +846,9 @@ nsBlockReflowContext::GetRealMarginRightUnit()
NS_RELEASE(sc);
sc = psc;
if (nsnull != sc) {
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
sc->GetStyleData(eStyleStruct_Spacing);
unit = spacing->mMargin.GetRightUnit();
const nsStyleMargin* margin = (const nsStyleMargin*)
sc->GetStyleData(eStyleStruct_Margin);
unit = margin->mMargin.GetRightUnit();
}
}
NS_IF_RELEASE(sc);

View File

@ -29,7 +29,6 @@ class nsIFrame;
class nsIPresContext;
class nsLineLayout;
struct nsStylePosition;
struct nsStyleSpacing;
struct nsBlockHorizontalAlign;
/**
@ -137,7 +136,9 @@ protected:
nsIFrame* mNextRCFrame;
// Spacing style for the frame we are reflowing; only valid after reflow
const nsStyleSpacing* mStyleSpacing;
const nsStyleBorder* mStyleBorder;
const nsStyleMargin* mStyleMargin;
const nsStylePadding* mStylePadding;
nscoord mComputedWidth; // copy of reflowstate's computedWidth
nsMargin mMargin;

View File

@ -800,10 +800,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
if (mBand.GetFloaterCount()) {
// Use the float-edge property to determine how the child block
// will interact with the floater.
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
switch (spacing->mFloatEdge) {
const nsStyleBorder* borderStyle;
aFrame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&) borderStyle);
switch (borderStyle->mFloatEdge) {
default:
case NS_STYLE_FLOAT_EDGE_CONTENT: // content and only content does runaround of floaters
// The child block will flow around the floater. Therefore
@ -819,11 +819,14 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
// The child block's border should be placed adjacent to,
// but not overlap the floater(s).
nsMargin m(0, 0, 0, 0);
spacing->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == spacing->mFloatEdge) {
const nsStyleMargin* styleMargin;
aFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) styleMargin);
styleMargin->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == borderStyle->mFloatEdge) {
// Add in border too
nsMargin b;
spacing->GetBorder(b);
borderStyle->GetBorder(b);
m += b;
}
@ -1487,7 +1490,7 @@ CalculateContainingBlock(const nsHTMLReflowState& aReflowState,
// Containing block is relative to the padding edge
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aContainingBlockWidth -= border.left + border.right;
@ -1994,15 +1997,32 @@ HaveAutoWidth(const nsHTMLReflowState& aReflowState)
static PRBool
IsPercentageAwareChild(const nsIFrame* aFrame)
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (nsLineLayout::IsPercentageUnitSides(&space->mMargin)
|| nsLineLayout::IsPercentageUnitSides(&space->mPadding)
|| nsLineLayout::IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -5932,12 +5952,9 @@ nsBlockReflowState::PlaceFloater(nsFloaterCache* aFloaterCache,
// Get the type of floater
const nsStyleDisplay* floaterDisplay;
const nsStyleSpacing* floaterSpacing;
const nsStylePosition* floaterPosition;
floater->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)floaterDisplay);
floater->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)floaterSpacing);
floater->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)floaterPosition);
@ -6270,18 +6287,20 @@ nsBlockFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
// Paint background, border and outline
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext,
aDirtyRect, rect, *border, mStyleContext,
skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
// If overflow is hidden then set the clip rect so that children don't

View File

@ -800,10 +800,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
if (mBand.GetFloaterCount()) {
// Use the float-edge property to determine how the child block
// will interact with the floater.
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
switch (spacing->mFloatEdge) {
const nsStyleBorder* borderStyle;
aFrame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&) borderStyle);
switch (borderStyle->mFloatEdge) {
default:
case NS_STYLE_FLOAT_EDGE_CONTENT: // content and only content does runaround of floaters
// The child block will flow around the floater. Therefore
@ -819,11 +819,14 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
// The child block's border should be placed adjacent to,
// but not overlap the floater(s).
nsMargin m(0, 0, 0, 0);
spacing->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == spacing->mFloatEdge) {
const nsStyleMargin* styleMargin;
aFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) styleMargin);
styleMargin->GetMargin(m); // XXX percentage margins
if (NS_STYLE_FLOAT_EDGE_PADDING == borderStyle->mFloatEdge) {
// Add in border too
nsMargin b;
spacing->GetBorder(b);
borderStyle->GetBorder(b);
m += b;
}
@ -1487,7 +1490,7 @@ CalculateContainingBlock(const nsHTMLReflowState& aReflowState,
// Containing block is relative to the padding edge
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aContainingBlockWidth -= border.left + border.right;
@ -1994,15 +1997,32 @@ HaveAutoWidth(const nsHTMLReflowState& aReflowState)
static PRBool
IsPercentageAwareChild(const nsIFrame* aFrame)
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (nsLineLayout::IsPercentageUnitSides(&space->mMargin)
|| nsLineLayout::IsPercentageUnitSides(&space->mPadding)
|| nsLineLayout::IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (nsLineLayout::IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -5932,12 +5952,9 @@ nsBlockReflowState::PlaceFloater(nsFloaterCache* aFloaterCache,
// Get the type of floater
const nsStyleDisplay* floaterDisplay;
const nsStyleSpacing* floaterSpacing;
const nsStylePosition* floaterPosition;
floater->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)floaterDisplay);
floater->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)floaterSpacing);
floater->GetStyleData(eStyleStruct_Position,
(const nsStyleStruct*&)floaterPosition);
@ -6270,18 +6287,20 @@ nsBlockFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
// Paint background, border and outline
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext,
aDirtyRect, rect, *border, mStyleContext,
skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
// If overflow is hidden then set the clip rect so that children don't

View File

@ -599,18 +599,20 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
}
if (hasOverflowClip) {
const nsStyleSpacing* spacing;
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
nsMargin border, padding;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)paddingStyle);
// XXX We don't support the 'overflow-clip' property yet so just use the
// content area (which is the default value) as the clip shape
overflowClipRect.SetRect(0, 0, frameSize.width, frameSize.height);
spacing->GetBorder(border);
borderStyle->GetBorder(border);
overflowClipRect.Deflate(border);
// XXX We need to handle percentage padding
if (spacing->GetPadding(padding)) {
if (paddingStyle->GetPadding(padding)) {
overflowClipRect.Deflate(padding);
}
}

View File

@ -493,6 +493,23 @@ NS_IMETHODIMP nsFrame::GetStyleData(nsStyleStructID aSID, const nsStyleStruct*&
return NS_OK;
}
NS_IMETHODIMP nsFrame::GetStyle(nsStyleStructID aSID, nsStyleStruct& aStruct) const {
NS_ASSERTION(mStyleContext!=nsnull,"null style context");
if (mStyleContext) {
return mStyleContext->GetStyle(aSID, aStruct);
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP nsFrame::CalcBorderPadding(nsMargin& aBorderPadding) const {
NS_ASSERTION(mStyleContext!=nsnull,"null style context");
if (mStyleContext) {
mStyleContext->CalcBorderPaddingFor(this, aBorderPadding);
return NS_OK;
}
return NS_ERROR_FAILURE;
}
NS_IMETHODIMP
nsFrame::GetAdditionalStyleContext(PRInt32 aIndex,
nsIStyleContext** aStyleContext) const
@ -624,8 +641,10 @@ nsFrame::SetOverflowClipRect(nsIRenderingContext& aRenderingContext)
// 'overflow-clip' only applies to block-level elements and replaced
// elements that have 'overflow' set to 'hidden', and it is relative
// to the content area and applies to content only (not border or background)
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)paddingStyle);
// Start with the 'auto' values and then factor in user specified values
nsRect clipRect(0, 0, mRect.width, mRect.height);
@ -634,10 +653,10 @@ nsFrame::SetOverflowClipRect(nsIRenderingContext& aRenderingContext)
// content area (which is the default value) as the clip shape
nsMargin border, padding;
spacing->GetBorder(border);
borderStyle->GetBorder(border);
clipRect.Deflate(border);
// XXX We need to handle percentage padding
if (spacing->GetPadding(padding)) {
if (paddingStyle->GetPadding(padding)) {
clipRect.Deflate(padding);
}
@ -2086,10 +2105,10 @@ nsFrame::Invalidate(nsIPresContext* aPresContext,
// Checks to see if the damaged rect should be infalted
// to include the outline
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
const nsStyleOutline* outline;
GetStyleData(eStyleStruct_Outline, (const nsStyleStruct*&)outline);
nscoord width;
spacing->GetOutlineWidth(width);
outline->GetOutlineWidth(width);
if (width > 0) {
damageRect.Inflate(width, width);
}

View File

@ -173,6 +173,8 @@ public:
nsIStyleContext* aContext);
NS_IMETHOD GetStyleData(nsStyleStructID aSID,
const nsStyleStruct*& aStyleStruct) const;
NS_IMETHOD GetStyle(nsStyleStructID aSID, nsStyleStruct& aStruct) const;
NS_IMETHOD CalcBorderPadding(nsMargin& aBorderPadding) const;
NS_IMETHOD GetAdditionalStyleContext(PRInt32 aIndex,
nsIStyleContext** aStyleContext) const;
NS_IMETHOD SetAdditionalStyleContext(PRInt32 aIndex,

View File

@ -133,15 +133,15 @@ HRuleFrame::Paint(nsIPresContext* aPresContext,
if (!noShadeAttribute) {
nsRect rect(x0, y0, width, height);
const nsStyleSpacing* spacing =
(nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
color = (nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext,
this,aDirtyRect, rect, *color,
*spacing, 0, 0);
*border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext,
this,aDirtyRect, rect, *spacing,
this,aDirtyRect, rect, *border,
mStyleContext, 0);
} else {
nscolor colors[2];

View File

@ -73,16 +73,18 @@ nsHTMLContainerFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *border, mStyleContext, skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
// The sole purpose of this is to trigger display
// of the selection window for Named Anchors,

View File

@ -304,7 +304,7 @@ CanvasFrame::Reflow(nsIPresContext* aPresContext,
nsMargin border;
nsFrameState kidState;
if (!kidReflowState.mStyleSpacing->GetBorder(border)) {
if (!kidReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
kidFrame->GetFrameState(&kidState);

View File

@ -182,8 +182,12 @@ nsHTMLReflowState::Init(nsIPresContext* aPresContext,
(const nsStyleStruct*&)mStylePosition);
frame->GetStyleData(eStyleStruct_Display,
(const nsStyleStruct*&)mStyleDisplay);
frame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)mStyleSpacing);
frame->GetStyleData(eStyleStruct_Border,
(const nsStyleStruct*&)mStyleBorder);
frame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&)mStyleMargin);
frame->GetStyleData(eStyleStruct_Padding,
(const nsStyleStruct*&)mStylePadding);
frame->GetStyleData(eStyleStruct_Text,
(const nsStyleStruct*&)mStyleText);
mFrameType = DetermineFrameType(frame, mStylePosition, mStyleDisplay);
@ -478,10 +482,10 @@ GetNearestContainingBlock(nsIFrame* aFrame, nsMargin& aContentArea)
// Subtract off for border and padding. If it can't be computed because
// it's percentage based (for example) then just ignore it
nsStyleSpacing* spacing;
nsMargin borderPadding;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing->GetBorderPadding(borderPadding)) {
nsStyleBorderPadding bPad;
nsMargin borderPadding;
aFrame->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (bPad.GetBorderPadding(borderPadding)) {
aContentArea.left += borderPadding.left;
aContentArea.top += borderPadding.top;
aContentArea.right -= borderPadding.right;
@ -537,55 +541,55 @@ nsHTMLReflowState::CalculateHorizBorderPaddingMargin(nscoord aContainingBlockWid
nsMargin border, padding, margin;
// Get the border
if (!mStyleSpacing->GetBorder(border)) {
if (!mStyleBorder->GetBorder(border)) {
// CSS2 has no percentage borders
border.SizeTo(0, 0, 0, 0);
}
// See if the style system can provide us the padding directly
if (!mStyleSpacing->GetPadding(padding)) {
if (!mStylePadding->GetPadding(padding)) {
nsStyleCoord left, right;
// We have to compute the left and right values
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetLeftUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetLeftUnit()) {
padding.left = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetLeftUnit(),
mStyleSpacing->mPadding.GetLeft(left),
mStylePadding->mPadding.GetLeftUnit(),
mStylePadding->mPadding.GetLeft(left),
padding.left);
}
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetRightUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetRightUnit()) {
padding.right = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetRightUnit(),
mStyleSpacing->mPadding.GetRight(right),
mStylePadding->mPadding.GetRightUnit(),
mStylePadding->mPadding.GetRight(right),
padding.right);
}
}
// See if the style system can provide us the margin directly
if (!mStyleSpacing->GetMargin(margin)) {
if (!mStyleMargin->GetMargin(margin)) {
nsStyleCoord left, right;
// We have to compute the left and right values
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit()) ||
(eStyleUnit_Inherit == mStyleSpacing->mMargin.GetLeftUnit())) {
if ((eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit()) ||
(eStyleUnit_Inherit == mStyleMargin->mMargin.GetLeftUnit())) {
margin.left = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetLeftUnit(),
mStyleSpacing->mMargin.GetLeft(left),
mStyleMargin->mMargin.GetLeftUnit(),
mStyleMargin->mMargin.GetLeft(left),
margin.left);
}
if ((eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit()) ||
(eStyleUnit_Inherit == mStyleSpacing->mMargin.GetRightUnit())) {
if ((eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit()) ||
(eStyleUnit_Inherit == mStyleMargin->mMargin.GetRightUnit())) {
margin.right = 0; // just ignore
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetRightUnit(),
mStyleSpacing->mMargin.GetRight(right),
mStyleMargin->mMargin.GetRightUnit(),
mStyleMargin->mMargin.GetRight(right),
margin.right);
}
}
@ -846,10 +850,10 @@ nsHTMLReflowState::CalculateHypotheticalBox(nsIPresContext* aPresContext,
// The specified offsets are relative to the absolute containing block's padding
// edge, and our current values are relative to the border edge so translate
nsMargin border;
const nsStyleSpacing* spacing;
const nsStyleBorder* borderStyle;
aAbsoluteContainingBlockFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (!spacing->GetBorder(border)) {
aAbsoluteContainingBlockFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
if (!borderStyle->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
aHypotheticalBox.mLeft -= border.left;
@ -967,8 +971,8 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext* aPresContext,
} else {
// Calculate any 'auto' margin values
PRBool marginLeftIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit());
PRBool marginRightIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit());
PRBool marginLeftIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit());
PRBool marginRightIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit());
PRInt32 availMarginSpace = availContentSpace - mComputedWidth;
if (marginLeftIsAuto) {
@ -1170,8 +1174,8 @@ nsHTMLReflowState::InitAbsoluteConstraints(nsIPresContext* aPresContext,
} else {
// Calculate any 'auto' margin values
PRBool marginTopIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetTopUnit());
PRBool marginBottomIsAuto = (eStyleUnit_Auto == mStyleSpacing->mMargin.GetBottomUnit());
PRBool marginTopIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetTopUnit());
PRBool marginBottomIsAuto = (eStyleUnit_Auto == mStyleMargin->mMargin.GetBottomUnit());
PRInt32 availMarginSpace = availContentSpace - mComputedHeight;
if (marginTopIsAuto) {
@ -1534,7 +1538,7 @@ nsHTMLReflowState::InitConstraints(nsIPresContext* aPresContext,
// inline-non-replaced elements
ComputeMargin(aContainingBlockWidth, cbrs);
ComputePadding(aContainingBlockWidth, cbrs);
if (!mStyleSpacing->GetBorder(mComputedBorderPadding)) {
if (!mStyleBorder->GetBorder(mComputedBorderPadding)) {
// CSS2 has no percentage borders
mComputedBorderPadding.SizeTo(0, 0, 0, 0);
}
@ -1861,10 +1865,10 @@ nsHTMLReflowState::ComputeBlockBoxData(nsIPresContext* aPresContext,
mComputedWidth = 0; // XXX temp fix for trees
} else if (nsLayoutAtoms::tableFrame == fType.get()) {
mComputedWidth = NS_SHRINKWRAPWIDTH;
if (eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit()) {
mComputedMargin.left = NS_AUTOMARGIN;
}
if (eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit()) {
mComputedMargin.right = NS_AUTOMARGIN;
}
} else {
@ -2000,9 +2004,9 @@ nsHTMLReflowState::CalculateBlockSideMargins(nscoord aAvailWidth,
// Determine the left and right margin values. The width value
// remains constant while we do this.
PRBool isAutoLeftMargin =
eStyleUnit_Auto == mStyleSpacing->mMargin.GetLeftUnit();
eStyleUnit_Auto == mStyleMargin->mMargin.GetLeftUnit();
PRBool isAutoRightMargin =
eStyleUnit_Auto == mStyleSpacing->mMargin.GetRightUnit();
eStyleUnit_Auto == mStyleMargin->mMargin.GetRightUnit();
// Calculate how much space is available for margins
nscoord availMarginSpace = aAvailWidth - aComputedWidth -
@ -2294,42 +2298,42 @@ nsHTMLReflowState::ComputeMargin(nscoord aContainingBlockWidth,
const nsHTMLReflowState* aContainingBlockRS)
{
// If style style can provide us the margin directly, then use it.
if (!mStyleSpacing->GetMargin(mComputedMargin)) {
if (!mStyleMargin->GetMargin(mComputedMargin)) {
// We have to compute the value
if (NS_UNCONSTRAINEDSIZE == aContainingBlockWidth) {
mComputedMargin.left = 0;
mComputedMargin.right = 0;
if (eStyleUnit_Coord == mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Coord == mStyleMargin->mMargin.GetLeftUnit()) {
nsStyleCoord left;
mStyleSpacing->mMargin.GetLeft(left),
mStyleMargin->mMargin.GetLeft(left),
mComputedMargin.left = left.GetCoordValue();
}
if (eStyleUnit_Coord == mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Coord == mStyleMargin->mMargin.GetRightUnit()) {
nsStyleCoord right;
mStyleSpacing->mMargin.GetRight(right),
mStyleMargin->mMargin.GetRight(right),
mComputedMargin.right = right.GetCoordValue();
}
} else {
nsStyleCoord left, right;
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetLeftUnit()) {
mComputedMargin.left = aContainingBlockRS->mComputedMargin.left;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetLeftUnit(),
mStyleSpacing->mMargin.GetLeft(left),
mStyleMargin->mMargin.GetLeftUnit(),
mStyleMargin->mMargin.GetLeft(left),
mComputedMargin.left);
}
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetRightUnit()) {
mComputedMargin.right = aContainingBlockRS->mComputedMargin.right;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetRightUnit(),
mStyleSpacing->mMargin.GetRight(right),
mStyleMargin->mMargin.GetRightUnit(),
mStyleMargin->mMargin.GetRight(right),
mComputedMargin.right);
}
}
@ -2340,20 +2344,20 @@ nsHTMLReflowState::ComputeMargin(nscoord aContainingBlockWidth,
// According to the CSS2 spec, margin percentages are
// calculated with respect to the *height* of the containing
// block when in a paginated context.
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetTopUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetTopUnit()) {
mComputedMargin.top = aContainingBlockRS->mComputedMargin.top;
} else {
ComputeVerticalValue(rs2->mComputedHeight,
mStyleSpacing->mMargin.GetTopUnit(),
mStyleSpacing->mMargin.GetTop(top),
mStyleMargin->mMargin.GetTopUnit(),
mStyleMargin->mMargin.GetTop(top),
mComputedMargin.top);
}
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetBottomUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetBottomUnit()) {
mComputedMargin.bottom = aContainingBlockRS->mComputedMargin.bottom;
} else {
ComputeVerticalValue(rs2->mComputedHeight,
mStyleSpacing->mMargin.GetBottomUnit(),
mStyleSpacing->mMargin.GetBottom(bottom),
mStyleMargin->mMargin.GetBottomUnit(),
mStyleMargin->mMargin.GetBottom(bottom),
mComputedMargin.bottom);
}
}
@ -2366,20 +2370,20 @@ nsHTMLReflowState::ComputeMargin(nscoord aContainingBlockWidth,
mComputedMargin.bottom = 0;
} else {
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetTopUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetTopUnit()) {
mComputedMargin.top = aContainingBlockRS->mComputedMargin.top;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetTopUnit(),
mStyleSpacing->mMargin.GetTop(top),
mStyleMargin->mMargin.GetTopUnit(),
mStyleMargin->mMargin.GetTop(top),
mComputedMargin.top);
}
if (eStyleUnit_Inherit == mStyleSpacing->mMargin.GetBottomUnit()) {
if (eStyleUnit_Inherit == mStyleMargin->mMargin.GetBottomUnit()) {
mComputedMargin.bottom = aContainingBlockRS->mComputedMargin.bottom;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mMargin.GetBottomUnit(),
mStyleSpacing->mMargin.GetBottom(bottom),
mStyleMargin->mMargin.GetBottomUnit(),
mStyleMargin->mMargin.GetBottom(bottom),
mComputedMargin.bottom);
}
}
@ -2393,43 +2397,43 @@ nsHTMLReflowState::ComputePadding(nscoord aContainingBlockWidth,
{
// If style can provide us the padding directly, then use it.
if (!mStyleSpacing->GetPadding(mComputedPadding)) {
if (!mStylePadding->GetPadding(mComputedPadding)) {
// We have to compute the value
nsStyleCoord left, right, top, bottom;
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetLeftUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetLeftUnit()) {
mComputedPadding.left = aContainingBlockRS->mComputedPadding.left;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetLeftUnit(),
mStyleSpacing->mPadding.GetLeft(left),
mStylePadding->mPadding.GetLeftUnit(),
mStylePadding->mPadding.GetLeft(left),
mComputedPadding.left);
}
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetRightUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetRightUnit()) {
mComputedPadding.right = aContainingBlockRS->mComputedPadding.right;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetRightUnit(),
mStyleSpacing->mPadding.GetRight(right),
mStylePadding->mPadding.GetRightUnit(),
mStylePadding->mPadding.GetRight(right),
mComputedPadding.right);
}
// According to the CSS2 spec, percentages are calculated with respect to
// containing block width for padding-top and padding-bottom
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetTopUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetTopUnit()) {
mComputedPadding.top = aContainingBlockRS->mComputedPadding.top;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetTopUnit(),
mStyleSpacing->mPadding.GetTop(top),
mStylePadding->mPadding.GetTopUnit(),
mStylePadding->mPadding.GetTop(top),
mComputedPadding.top);
}
if (eStyleUnit_Inherit == mStyleSpacing->mPadding.GetBottomUnit()) {
if (eStyleUnit_Inherit == mStylePadding->mPadding.GetBottomUnit()) {
mComputedPadding.bottom = aContainingBlockRS->mComputedPadding.bottom;
} else {
ComputeHorizontalValue(aContainingBlockWidth,
mStyleSpacing->mPadding.GetBottomUnit(),
mStyleSpacing->mPadding.GetBottom(bottom),
mStylePadding->mPadding.GetBottomUnit(),
mStylePadding->mPadding.GetBottom(bottom),
mComputedPadding.bottom);
}
}

View File

@ -491,9 +491,9 @@ nsImageFrame::DisplayAltText(nsIPresContext* aPresContext,
NS_RELEASE(fm);
}
struct nsRecessedBorder : public nsStyleSpacing {
struct nsRecessedBorder : public nsStyleBorder {
nsRecessedBorder(nscoord aBorderWidth)
: nsStyleSpacing()
: nsStyleBorder()
{
nsStyleCoord styleCoord(aBorderWidth);
@ -512,7 +512,7 @@ struct nsRecessedBorder : public nsStyleSpacing {
mBorderColor[2] = 0;
mBorderColor[3] = 0;
mHasCachedMargin = mHasCachedPadding = mHasCachedBorder = PR_FALSE;
mHasCachedBorder = PR_FALSE;
}
};

View File

@ -51,17 +51,19 @@ nsLeafFrame::Paint(nsIPresContext* aPresContext,
if (disp->IsVisibleOrCollapsed()) {
const nsStyleColor* myColor = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* myOutline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *myColor, *mySpacing, 0, 0);
aDirtyRect, rect, *myColor, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mStyleContext, 0);
aDirtyRect, rect, *myBorder, mStyleContext, 0);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mStyleContext, 0);
aDirtyRect, rect, *myBorder, *myOutline, mStyleContext, 0);
}
}
return NS_OK;

View File

@ -1570,15 +1570,31 @@ nsLineLayout::IsPercentageAwareReplacedElement(nsIPresContext *aPresContext,
if (nsLayoutAtoms::brFrame != frameType.get() &&
nsLayoutAtoms::textFrame != frameType.get())
{
const nsStyleSpacing* space;
nsresult rv = aFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct*&) space);
nsresult rv;
const nsStyleMargin* margin;
rv = aFrame->GetStyleData(eStyleStruct_Margin,(const nsStyleStruct*&) margin);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (IsPercentageUnitSides(&margin->mMargin)) {
return PR_TRUE;
}
if (IsPercentageUnitSides(&space->mMargin)
|| IsPercentageUnitSides(&space->mPadding)
|| IsPercentageUnitSides(&space->mBorderRadius)) {
const nsStylePadding* padding;
rv = aFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct*&) padding);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (IsPercentageUnitSides(&padding->mPadding)) {
return PR_TRUE;
}
const nsStyleBorder* border;
rv = aFrame->GetStyleData(eStyleStruct_Border,(const nsStyleStruct*&) border);
if (NS_FAILED(rv)) {
return PR_TRUE; // just to be on the safe side
}
if (IsPercentageUnitSides(&border->mBorder)) {
return PR_TRUE;
}
@ -2705,19 +2721,19 @@ nsLineLayout::HorizontalAlignFrames(nsRect& aLineBounds,
if (nsLayoutAtoms::hrFrame == frameType.get()) {
// get the alignment from the HR frame
{
const nsStyleSpacing* spacing;
psd->mFirstFrame->mFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&)spacing);
const nsStyleMargin* margin;
psd->mFirstFrame->mFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&)margin);
textAlign = NS_STYLE_TEXT_ALIGN_CENTER;
nsStyleCoord zero(nscoord(0));
nsStyleCoord temp;
if ((eStyleUnit_Coord==spacing->mMargin.GetLeftUnit()) &&
(zero==spacing->mMargin.GetLeft(temp)))
if ((eStyleUnit_Coord==margin->mMargin.GetLeftUnit()) &&
(zero==margin->mMargin.GetLeft(temp)))
{
textAlign = NS_STYLE_TEXT_ALIGN_LEFT;
}
else if ((eStyleUnit_Coord==spacing->mMargin.GetRightUnit()) &&
(zero==spacing->mMargin.GetRight(temp))) {
else if ((eStyleUnit_Coord==margin->mMargin.GetRightUnit()) &&
(zero==margin->mMargin.GetRight(temp))) {
textAlign = NS_STYLE_TEXT_ALIGN_RIGHT;
}
}

View File

@ -413,8 +413,8 @@ nsScrollFrame::CreateScrollingView(nsIPresContext* aPresContext)
mStyleContext->GetStyleData(eStyleStruct_Position);
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* borderStyle = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleDisplay* display = (const nsStyleDisplay*)
mStyleContext->GetStyleData(eStyleStruct_Display);
@ -503,7 +503,7 @@ nsScrollFrame::CreateScrollingView(nsIPresContext* aPresContext)
// Set the scrolling view's insets to whatever our border is
nsMargin border;
if (!spacing->GetBorder(border)) {
if (!borderStyle->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
border.SizeTo(0, 0, 0, 0);
}
@ -675,7 +675,7 @@ nsScrollFrame::Reflow(nsIPresContext* aPresContext,
// Calculate the amount of space needed for borders
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
border.SizeTo(0, 0, 0, 0);
}
@ -947,14 +947,17 @@ nsScrollFrame::Paint(nsIPresContext* aPresContext,
if (display->IsVisible()) {
// Paint our border only (no background)
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, mStyleContext, 0);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
}

View File

@ -723,28 +723,28 @@ nsGenericHTMLElement::GetOffsetRect(nsRect& aRect,
}
// For the origin, add in the border for the frame
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
nsStyleCoord coord;
frame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
frame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
if (border) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
}
}
// And subtract out the border for the parent
if (parent) {
const nsStyleSpacing* parentSpacing;
parent->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)parentSpacing);
if (parentSpacing) {
if (eStyleUnit_Coord == parentSpacing->mBorder.GetLeftUnit()) {
origin.x -= parentSpacing->mBorder.GetLeft(coord).GetCoordValue();
const nsStyleBorder* parentBorder;
parent->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)parentBorder);
if (parentBorder) {
if (eStyleUnit_Coord == parentBorder->mBorder.GetLeftUnit()) {
origin.x -= parentBorder->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == parentSpacing->mBorder.GetTopUnit()) {
origin.y -= parentSpacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == parentBorder->mBorder.GetTopUnit()) {
origin.y -= parentBorder->mBorder.GetTop(coord).GetCoordValue();
}
}
}
@ -2919,8 +2919,8 @@ nsGenericHTMLElement::MapImageAttributesInto(const nsIHTMLMappedAttributes* aAtt
aPresContext->GetScaledPixelsToTwips(&p2t);
nsStylePosition* pos = (nsStylePosition*)
aContext->GetMutableStyleData(eStyleStruct_Position);
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
// width: value
aAttributes->GetAttribute(nsHTMLAtoms::width, value);
@ -2947,13 +2947,13 @@ nsGenericHTMLElement::MapImageAttributesInto(const nsIHTMLMappedAttributes* aAtt
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
nsStyleCoord c(twips);
spacing->mMargin.SetLeft(c);
spacing->mMargin.SetRight(c);
margin->mMargin.SetLeft(c);
margin->mMargin.SetRight(c);
}
else if (value.GetUnit() == eHTMLUnit_Percent) {
nsStyleCoord c(value.GetPercentValue(), eStyleUnit_Percent);
spacing->mMargin.SetLeft(c);
spacing->mMargin.SetRight(c);
margin->mMargin.SetLeft(c);
margin->mMargin.SetRight(c);
}
// vspace: value
@ -2961,13 +2961,13 @@ nsGenericHTMLElement::MapImageAttributesInto(const nsIHTMLMappedAttributes* aAtt
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), p2t);
nsStyleCoord c(twips);
spacing->mMargin.SetTop(c);
spacing->mMargin.SetBottom(c);
margin->mMargin.SetTop(c);
margin->mMargin.SetBottom(c);
}
else if (value.GetUnit() == eHTMLUnit_Percent) {
nsStyleCoord c(value.GetPercentValue(), eStyleUnit_Percent);
spacing->mMargin.SetTop(c);
spacing->mMargin.SetBottom(c);
margin->mMargin.SetTop(c);
margin->mMargin.SetBottom(c);
}
}
@ -2998,21 +2998,21 @@ nsGenericHTMLElement::MapImageAlignAttributeInto(const nsIHTMLMappedAttributes*
aContext->GetMutableStyleData(eStyleStruct_Display);
nsStyleText* text = (nsStyleText*)
aContext->GetMutableStyleData(eStyleStruct_Text);
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
float p2t;
aPresContext->GetScaledPixelsToTwips(&p2t);
nsStyleCoord three(NSIntPixelsToTwips(3, p2t));
switch (align) {
case NS_STYLE_TEXT_ALIGN_LEFT:
display->mFloats = NS_STYLE_FLOAT_LEFT;
spacing->mMargin.SetLeft(three);
spacing->mMargin.SetRight(three);
margin->mMargin.SetLeft(three);
margin->mMargin.SetRight(three);
break;
case NS_STYLE_TEXT_ALIGN_RIGHT:
display->mFloats = NS_STYLE_FLOAT_RIGHT;
spacing->mMargin.SetLeft(three);
spacing->mMargin.SetRight(three);
margin->mMargin.SetLeft(three);
margin->mMargin.SetRight(three);
break;
default:
text->mVerticalAlign.SetIntValue(align, eStyleUnit_Enumerated);
@ -3061,38 +3061,39 @@ nsGenericHTMLElement::MapImageBorderAttributeInto(const nsIHTMLMappedAttributes*
// Fixup border-padding sums: subtract out the old size and then
// add in the new size.
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleCoord coord;
coord.SetCoordValue(twips);
spacing->mBorder.SetTop(coord);
spacing->mBorder.SetRight(coord);
spacing->mBorder.SetBottom(coord);
spacing->mBorder.SetLeft(coord);
border->mBorder.SetTop(coord);
border->mBorder.SetRight(coord);
border->mBorder.SetBottom(coord);
border->mBorder.SetLeft(coord);
spacing->SetBorderStyle(0,NS_STYLE_BORDER_STYLE_SOLID);
spacing->SetBorderStyle(1,NS_STYLE_BORDER_STYLE_SOLID);
spacing->SetBorderStyle(2,NS_STYLE_BORDER_STYLE_SOLID);
spacing->SetBorderStyle(3,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(0,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(1,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(2,NS_STYLE_BORDER_STYLE_SOLID);
border->SetBorderStyle(3,NS_STYLE_BORDER_STYLE_SOLID);
// Use supplied colors if provided, otherwise use color for border
// color
if (nsnull != aBorderColors) {
spacing->SetBorderColor(0, aBorderColors[0]);
spacing->SetBorderColor(1, aBorderColors[1]);
spacing->SetBorderColor(2, aBorderColors[2]);
spacing->SetBorderColor(3, aBorderColors[3]);
border->SetBorderColor(0, aBorderColors[0]);
border->SetBorderColor(1, aBorderColors[1]);
border->SetBorderColor(2, aBorderColors[2]);
border->SetBorderColor(3, aBorderColors[3]);
}
else {
// Color is inherited from "color"
const nsStyleColor* styleColor = (const nsStyleColor*)
aContext->GetStyleData(eStyleStruct_Color);
nscolor color = styleColor->mColor;
spacing->SetBorderColor(0, color);
spacing->SetBorderColor(1, color);
spacing->SetBorderColor(2, color);
spacing->SetBorderColor(3, color);
border->SetBorderColor(0, color);
border->SetBorderColor(1, color);
border->SetBorderColor(2, color);
border->SetBorderColor(3, color);
}
}

View File

@ -294,9 +294,9 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
nsIPresContext* aPresContext)
{
if (mPart) {
nsStyleSpacing* styleSpacing = (nsStyleSpacing*)(aContext->GetMutableStyleData(eStyleStruct_Spacing));
nsStyleMargin* marginStyle = (nsStyleMargin*)(aContext->GetMutableStyleData(eStyleStruct_Margin));
if (nsnull != styleSpacing) {
if (nsnull != marginStyle) {
nsHTMLValue value;
PRInt32 attrCount;
float p2t;
@ -314,8 +314,8 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
bodyMarginWidth = 0;
}
nsStyleCoord widthCoord(bodyMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
marginStyle->mMargin.SetLeft(widthCoord);
marginStyle->mMargin.SetRight(widthCoord);
}
mPart->GetHTMLAttribute(nsHTMLAtoms::marginheight, value);
@ -326,8 +326,8 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
}
nsStyleCoord heightCoord(bodyMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
marginStyle->mMargin.SetTop(heightCoord);
marginStyle->mMargin.SetBottom(heightCoord);
}
}
@ -364,14 +364,14 @@ BodyRule::MapStyleInto(nsIMutableStyleContext* aContext,
if ((0 > bodyMarginWidth) && (frameMarginWidth >= 0)) {
nsStyleCoord widthCoord(frameMarginWidth);
styleSpacing->mMargin.SetLeft(widthCoord);
styleSpacing->mMargin.SetRight(widthCoord);
marginStyle->mMargin.SetLeft(widthCoord);
marginStyle->mMargin.SetRight(widthCoord);
}
if ((0 > bodyMarginHeight) && (frameMarginHeight >= 0)) {
nsStyleCoord heightCoord(frameMarginHeight);
styleSpacing->mMargin.SetTop(heightCoord);
styleSpacing->mMargin.SetBottom(heightCoord);
marginStyle->mMargin.SetTop(heightCoord);
marginStyle->mMargin.SetBottom(heightCoord);
}
}
NS_RELEASE(container);

View File

@ -207,22 +207,22 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
aAttributes->GetAttribute(nsHTMLAtoms::align, value);
if (eHTMLUnit_Enumerated == value.GetUnit()) {
// Map align attribute into auto side margins
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
nsStyleCoord otto(eStyleUnit_Auto);
nsStyleCoord zero(nscoord(0));
switch (value.GetIntValue()) {
case NS_STYLE_TEXT_ALIGN_LEFT:
spacing->mMargin.SetLeft(zero);
spacing->mMargin.SetRight(otto);
margin->mMargin.SetLeft(zero);
margin->mMargin.SetRight(otto);
break;
case NS_STYLE_TEXT_ALIGN_RIGHT:
spacing->mMargin.SetLeft(otto);
spacing->mMargin.SetRight(zero);
margin->mMargin.SetLeft(otto);
margin->mMargin.SetRight(zero);
break;
case NS_STYLE_TEXT_ALIGN_CENTER:
spacing->mMargin.SetLeft(otto);
spacing->mMargin.SetRight(otto);
margin->mMargin.SetLeft(otto);
margin->mMargin.SetRight(otto);
break;
}
}

View File

@ -314,15 +314,15 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if (NS_STYLE_FRAME_0 == frameborder ||
NS_STYLE_FRAME_NO == frameborder ||
NS_STYLE_FRAME_OFF == frameborder) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (spacing) {
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
if (border) {
nsStyleCoord coord;
coord.SetCoordValue(0);
spacing->mBorder.SetTop(coord);
spacing->mBorder.SetRight(coord);
spacing->mBorder.SetBottom(coord);
spacing->mBorder.SetLeft(coord);
border->mBorder.SetTop(coord);
border->mBorder.SetRight(coord);
border->mBorder.SetBottom(coord);
border->mBorder.SetLeft(coord);
}
}
}

View File

@ -1335,23 +1335,23 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
nscoord pad = NSIntPixelsToTwips(3, p2t);
// add left and right padding around the radio button via css
nsStyleSpacing* spacing = (nsStyleSpacing*) aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (eStyleUnit_Null == spacing->mMargin.GetLeftUnit()) {
nsStyleMargin* margin = (nsStyleMargin*) aContext->GetMutableStyleData(eStyleStruct_Margin);
if (eStyleUnit_Null == margin->mMargin.GetLeftUnit()) {
nsStyleCoord left(pad);
spacing->mMargin.SetLeft(left);
margin->mMargin.SetLeft(left);
}
if (eStyleUnit_Null == spacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Null == margin->mMargin.GetRightUnit()) {
nsStyleCoord right(NSIntPixelsToTwips(5, p2t));
spacing->mMargin.SetRight(right);
margin->mMargin.SetRight(right);
}
// add bottom padding if backward mode
// XXX why isn't this working?
nsCompatibility mode;
aPresContext->GetCompatibilityMode(&mode);
if (eCompatibility_NavQuirks == mode) {
if (eStyleUnit_Null == spacing->mMargin.GetBottomUnit()) {
if (eStyleUnit_Null == margin->mMargin.GetBottomUnit()) {
nsStyleCoord bottom(pad);
spacing->mMargin.SetBottom(bottom);
margin->mMargin.SetBottom(bottom);
}
}
break;

View File

@ -1063,13 +1063,13 @@ static void
MapTableFrameInto(const nsIHTMLMappedAttributes* aAttributes,
nsIMutableStyleContext* aContext,
nsIPresContext* aPresContext,
nsStyleSpacing* aSpacing,
nsStyleBorder* aBorder,
PRUint8 aBorderStyle)
{
// set up defaults
for (PRInt32 sideX = NS_SIDE_TOP; sideX <= NS_SIDE_LEFT; sideX++) {
if (aSpacing->GetBorderStyle(sideX) == NS_STYLE_BORDER_STYLE_NONE) {
aSpacing->SetBorderStyle(sideX, aBorderStyle);
if (aBorder->GetBorderStyle(sideX) == NS_STYLE_BORDER_STYLE_NONE) {
aBorder->SetBorderStyle(sideX, aBorderStyle);
}
}
@ -1082,44 +1082,44 @@ MapTableFrameInto(const nsIHTMLMappedAttributes* aAttributes,
switch (frameValue.GetIntValue())
{
case NS_STYLE_TABLE_FRAME_NONE:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_ABOVE:
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_BELOW:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_HSIDES:
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_LEFT:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_RIGHT:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_FRAME_VSIDES:
aSpacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorder->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
break;
// BOX and BORDER are ignored, the caller has already set all the border sides
@ -1151,8 +1151,8 @@ MapTableBorderInto(const nsIHTMLMappedAttributes* aAttributes,
}
if (borderValue.GetUnit() != eHTMLUnit_Null) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleTable *tableStyle = (nsStyleTable*)
aContext->GetMutableStyleData(eStyleStruct_Table);
nsStyleCoord twips;
@ -1183,12 +1183,12 @@ MapTableBorderInto(const nsIHTMLMappedAttributes* aAttributes,
}
// by default, set all border sides to the specified width
spacing->mBorder.SetTop(twips);
spacing->mBorder.SetRight(twips);
spacing->mBorder.SetBottom(twips);
spacing->mBorder.SetLeft(twips);
border->mBorder.SetTop(twips);
border->mBorder.SetRight(twips);
border->mBorder.SetBottom(twips);
border->mBorder.SetLeft(twips);
// then account for the frame attribute
MapTableFrameInto(aAttributes, aContext, aPresContext, spacing,
MapTableFrameInto(aAttributes, aContext, aPresContext, border,
aBorderStyle);
}
}
@ -1219,14 +1219,14 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
aPresContext->GetPixelsToTwips(&p2t);
nscoord onePixel = NSIntPixelsToTwips(1, p2t);
nsStyleSpacing* spacingStyle = (nsStyleSpacing*)aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* borderStyleData = (nsStyleBorder*)aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleCoord width;
width.SetCoordValue(onePixel);
spacingStyle->mBorder.SetTop(width);
spacingStyle->mBorder.SetLeft(width);
spacingStyle->mBorder.SetBottom(width);
spacingStyle->mBorder.SetRight(width);
borderStyleData->mBorder.SetTop(width);
borderStyleData->mBorder.SetLeft(width);
borderStyleData->mBorder.SetBottom(width);
borderStyleData->mBorder.SetRight(width);
nsCompatibility mode;
aPresContext->GetCompatibilityMode(&mode);
@ -1235,10 +1235,10 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
// BG_INSET results in a border color based on background colors
// used for NavQuirks only...
spacingStyle->SetBorderStyle(NS_SIDE_TOP, borderStyle);
spacingStyle->SetBorderStyle(NS_SIDE_LEFT, borderStyle);
spacingStyle->SetBorderStyle(NS_SIDE_BOTTOM, borderStyle);
spacingStyle->SetBorderStyle(NS_SIDE_RIGHT, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_TOP, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_LEFT, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_BOTTOM, borderStyle);
borderStyleData->SetBorderStyle(NS_SIDE_RIGHT, borderStyle);
}
}
else { // handle attributes for table
@ -1289,8 +1289,10 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
}
}
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* borderStyleData = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleMargin* marginStyleData = (nsStyleMargin*)
aContext->GetMutableStyleData(eStyleStruct_Margin);
// default border style is the Nav4.6 extension which uses the
// background color as the basis of the outset border. If the
@ -1312,10 +1314,10 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if ((eHTMLUnit_Color == value.GetUnit()) ||
(eHTMLUnit_ColorName == value.GetUnit())) {
nscolor color = value.GetColorValue();
spacing->SetBorderColor(0, color);
spacing->SetBorderColor(1, color);
spacing->SetBorderColor(2, color);
spacing->SetBorderColor(3, color);
borderStyleData->SetBorderColor(0, color);
borderStyleData->SetBorderColor(1, color);
borderStyleData->SetBorderColor(2, color);
borderStyleData->SetBorderColor(3, color);
borderStyle = NS_STYLE_BORDER_STYLE_OUTSET; // use css outset
}
@ -1330,8 +1332,8 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if ((NS_STYLE_TEXT_ALIGN_CENTER == value.GetIntValue()) ||
(NS_STYLE_TEXT_ALIGN_MOZ_CENTER == value.GetIntValue())) {
nsStyleCoord otto(eStyleUnit_Auto);
spacing->mMargin.SetLeft(otto);
spacing->mMargin.SetRight(otto);
marginStyleData->mMargin.SetLeft(otto);
marginStyleData->mMargin.SetRight(otto);
}
else {
nsStyleDisplay* display = (nsStyleDisplay*)
@ -1415,8 +1417,8 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), sp2t);
nsStyleCoord hspace(twips);
spacing->mMargin.SetLeft(hspace);
spacing->mMargin.SetRight(hspace);
marginStyleData->mMargin.SetLeft(hspace);
marginStyleData->mMargin.SetRight(hspace);
}
aAttributes->GetAttribute(nsHTMLAtoms::vspace, value);
@ -1424,8 +1426,8 @@ MapAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
if (value.GetUnit() == eHTMLUnit_Pixel) {
nscoord twips = NSIntPixelsToTwips(value.GetPixelValue(), sp2t);
nsStyleCoord vspace(twips);
spacing->mMargin.SetTop(vspace);
spacing->mMargin.SetBottom(vspace);
marginStyleData->mMargin.SetTop(vspace);
marginStyleData->mMargin.SetBottom(vspace);
}
}

View File

@ -144,10 +144,10 @@ nsButtonFrameRenderer::PaintOutlineAndFocusBorders(nsIPresContext* aPresContext,
GetButtonOuterFocusRect(aRect, rect);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mOuterFocusStyle ->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)mOuterFocusStyle ->GetStyleData(eStyleStruct_Border);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
aDirtyRect, rect, *spacing, mOuterFocusStyle, 0);
aDirtyRect, rect, *border, mOuterFocusStyle, 0);
}
// ---------- paint the inner focus border -------------
@ -155,10 +155,10 @@ nsButtonFrameRenderer::PaintOutlineAndFocusBorders(nsIPresContext* aPresContext,
GetButtonInnerFocusRect(aRect, rect);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Border);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
aDirtyRect, rect, *spacing, mInnerFocusStyle, 0);
aDirtyRect, rect, *border, mInnerFocusStyle, 0);
}
}
@ -186,8 +186,8 @@ nsButtonFrameRenderer::PaintBorderAndBackground(nsIPresContext* aPresContext,
// get the styles
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)context->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)context->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)context->GetStyleData(eStyleStruct_Color);
@ -195,10 +195,10 @@ nsButtonFrameRenderer::PaintBorderAndBackground(nsIPresContext* aPresContext,
// paint the border and background
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, mFrame,
aDirtyRect, buttonRect, *color, *spacing, 0, 0);
aDirtyRect, buttonRect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, mFrame,
aDirtyRect, buttonRect, *spacing, context, 0);
aDirtyRect, buttonRect, *border, context, 0);
}
@ -247,9 +247,9 @@ nsButtonFrameRenderer::GetButtonOuterFocusBorderAndPadding()
nsMargin focusBorderAndPadding(0,0,0,0);
if (mOuterFocusStyle) {
// get the outer focus border and padding
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mOuterFocusStyle ->GetStyleData(eStyleStruct_Spacing);
if (!spacing->GetBorderPadding(focusBorderAndPadding)) {
nsStyleBorderPadding bPad;
mOuterFocusStyle->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (!bPad.GetBorderPadding(focusBorderAndPadding)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
}
@ -263,12 +263,13 @@ nsButtonFrameRenderer::GetButtonBorderAndPadding()
nsCOMPtr<nsIStyleContext> context;
mFrame->GetStyleContext(getter_AddRefs(context));
nsMargin borderAndPadding(0,0,0,0);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)context ->GetStyleData(eStyleStruct_Spacing);
if (!spacing->GetBorderPadding(borderAndPadding)) {
nsMargin innerFocusBorderAndPadding(0,0,0,0);
nsStyleBorderPadding bPad;
context->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (!bPad.GetBorderPadding(innerFocusBorderAndPadding)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
return borderAndPadding;
return innerFocusBorderAndPadding;
}
/**
@ -281,8 +282,8 @@ nsButtonFrameRenderer::GetButtonInnerFocusMargin()
if (mInnerFocusStyle) {
// get the outer focus border and padding
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Spacing);
spacing->GetMargin(innerFocusMargin);
const nsStyleMargin* margin = (const nsStyleMargin*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Margin);
margin->GetMargin(innerFocusMargin);
}
return innerFocusMargin;
@ -295,8 +296,9 @@ nsButtonFrameRenderer::GetButtonInnerFocusBorderAndPadding()
if (mInnerFocusStyle) {
// get the outer focus border and padding
const nsStyleSpacing* spacing = (const nsStyleSpacing*)mInnerFocusStyle ->GetStyleData(eStyleStruct_Spacing);
if (!spacing->GetBorderPadding(innerFocusBorderAndPadding)) {
nsStyleBorderPadding bPad;
mInnerFocusStyle->GetStyle(eStyleStruct_BorderPaddingShortcut, (nsStyleStruct&)bPad);
if (!bPad.GetBorderPadding(innerFocusBorderAndPadding)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
}

View File

@ -830,11 +830,8 @@ nsComboboxControlFrame::ReflowItems(nsIPresContext* aPresContext,
delete [] str;
// get the borderPadding for the display area
const nsStyleSpacing* dspSpacing;
mDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(mDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
nscoord frmWidth = maxWidth+dspBorderPadding.left+dspBorderPadding.right+
aReflowState.mComputedBorderPadding.left + aReflowState.mComputedBorderPadding.right;
@ -886,11 +883,8 @@ nsComboboxControlFrame::ReflowCombobox(nsIPresContext * aPresContext,
REFLOW_NOISY_MSG3("mCacheSize.height:%d - %d\n", PX(mCacheSize.height), PX((aBorderPadding.top + aBorderPadding.bottom)));
// get the border and padding for the DisplayArea (block frame & textframe)
const nsStyleSpacing* dspSpacing;
aDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(aDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
// adjust the height
if (mCacheSize.height == kSizeNotSet) {
@ -1154,11 +1148,8 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
bailOnWidth, bailOnHeight);
if (bailOnWidth) {
#ifdef DO_REFLOW_DEBUG // check or size
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
nsMargin borderPadding;
borderPadding.SizeTo(0, 0, 0, 0);
spacing->CalcBorderPaddingFor(this, borderPadding);
nsMargin borderPadding(0, 0, 0, 0);
CalcBorderPadding(borderPadding);
UNCONSTRAINED_CHECK();
#endif
REFLOW_DEBUG_MSG3("^** Done nsCCF DW: %d DH: %d\n\n", PX(aDesiredSize.width), PX(aDesiredSize.height));
@ -1199,11 +1190,8 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
// get our border and padding,
// XXX - should be the same mComputedBorderPadding?
// maybe we should use that?
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
nsMargin borderPadding;
borderPadding.SizeTo(0, 0, 0, 0);
spacing->CalcBorderPaddingFor(this, borderPadding);
nsMargin borderPadding(0, 0, 0, 0);
CalcBorderPadding(borderPadding);
// Get the current sizes of the combo box child frames
mDisplayFrame->GetRect(displayRect);
@ -1480,18 +1468,12 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
}
// Get the border and padding for the dropdown
const nsStyleSpacing* dropSpacing;
mDropdownFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dropSpacing);
nsMargin dropBorderPadding;
dropBorderPadding.SizeTo(0, 0, 0, 0);
dropSpacing->CalcBorderPaddingFor(mDropdownFrame, dropBorderPadding);
nsMargin dropBorderPadding(0, 0, 0, 0);
mDropdownFrame->CalcBorderPadding(dropBorderPadding);
// get the borderPadding for the display area
const nsStyleSpacing* dspSpacing;
mDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(mDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
// Substract dropdown's borderPadding from the width of the dropdown rect
// to get the size of the content area
@ -1571,12 +1553,8 @@ nsComboboxControlFrame::Reflow(nsIPresContext* aPresContext,
}
// get the borderPadding for the display area
const nsStyleSpacing* dspSpacing;
mDisplayFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)dspSpacing);
nsMargin dspBorderPadding;
dspBorderPadding.SizeTo(0, 0, 0, 0);
dspSpacing->CalcBorderPaddingFor(mDisplayFrame, dspBorderPadding);
nsMargin dspBorderPadding(0, 0, 0, 0);
mDisplayFrame->CalcBorderPadding(dspBorderPadding);
if (NS_UNCONSTRAINEDSIZE == firstPassState.mComputedWidth) {
mItemDisplayWidth = aDesiredSize.width - (dspBorderPadding.left + dspBorderPadding.right);

View File

@ -162,11 +162,11 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* borderStyle =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
nsMargin border;
if (!spacing->GetBorder(border)) {
if (!borderStyle->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
@ -180,7 +180,7 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
nsRect rect(0, yoff, mRect.width, mRect.height - yoff);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *borderStyle, 0, 0);
if (mLegendFrame) {
@ -197,7 +197,7 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
aRenderingContext.PushState();
aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect, clipState);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *borderStyle, mStyleContext, skipSides);
aRenderingContext.PopState(clipState);
@ -211,7 +211,7 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
aRenderingContext.PushState();
aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect, clipState);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *borderStyle, mStyleContext, skipSides);
aRenderingContext.PopState(clipState);
@ -225,14 +225,14 @@ nsFieldSetFrame::Paint(nsIPresContext* aPresContext,
aRenderingContext.PushState();
aRenderingContext.SetClipRect(clipRect, nsClipCombine_kIntersect, clipState);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *borderStyle, mStyleContext, skipSides);
aRenderingContext.PopState(clipState);
} else {
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, nsRect(0,0,mRect.width, mRect.height), *spacing, mStyleContext, skipSides);
aDirtyRect, nsRect(0,0,mRect.width, mRect.height), *borderStyle, mStyleContext, skipSides);
}
}
}
@ -346,10 +346,10 @@ nsFieldSetFrame::Reflow(nsIPresContext* aPresContext,
nsMargin legendMargin(0,0,0,0);
// reflow the legend only if needed
if (mLegendFrame) {
const nsStyleSpacing* legendSpacing;
mLegendFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) legendSpacing);
legendSpacing->GetMargin(legendMargin);
const nsStyleMargin* marginStyle;
mLegendFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) marginStyle);
marginStyle->GetMargin(legendMargin);
if (reflowLegend) {
nsHTMLReflowState legendReflowState(aPresContext, aReflowState,
@ -481,12 +481,12 @@ nsFieldSetFrame::Reflow(nsIPresContext* aPresContext,
} else {
// if we don't need to reflow just get the old size
mContentFrame->GetRect(contentRect);
const nsStyleSpacing* spacing;
mContentFrame->GetStyleData(eStyleStruct_Spacing,
(const nsStyleStruct*&) spacing);
const nsStyleMargin* marginStyle;
mContentFrame->GetStyleData(eStyleStruct_Margin,
(const nsStyleStruct*&) marginStyle);
nsMargin m(0,0,0,0);
spacing->GetMargin(m);
marginStyle->GetMargin(m);
contentRect.Inflate(m);
}
}

View File

@ -929,9 +929,9 @@ nsresult nsFormControlFrame::PaintSpecialBorder(nsIPresContext* aPresContext,
if (specialBorderStyle){
// paint the border
const nsStyleSpacing* spacing = (const nsStyleSpacing*)specialBorderStyle ->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)specialBorderStyle ->GetStyleData(eStyleStruct_Border);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aFrame,
aDirtyRect, aRect, *spacing, specialBorderStyle, 0);
aDirtyRect, aRect, *border, specialBorderStyle, 0);
}
} else {

View File

@ -268,13 +268,10 @@ nsGfxCheckboxControlFrame::PaintCheckBox(nsIPresContext* aPresContext,
float p2t;
aPresContext->GetScaledPixelsToTwips(&p2t);
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
nsMargin borderPadding(0,0,0,0);
CalcBorderPadding(borderPadding);
nsRect checkRect(0,0, mRect.width, mRect.height);
nsMargin borderPadding;
spacing->CalcBorderPaddingFor(this, borderPadding);
checkRect.Deflate(borderPadding);
const nsStyleColor* color = (const nsStyleColor*)
@ -382,8 +379,8 @@ nsGfxCheckboxControlFrame::Paint(nsIPresContext* aPresContext,
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Color);
if (myColor->mBackgroundImage.Length() > 0) {
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Border);
const nsStylePosition* myPosition = (const nsStylePosition*)
mCheckButtonFaceStyle->GetStyleData(eStyleStruct_Position);
@ -395,9 +392,9 @@ nsGfxCheckboxControlFrame::Paint(nsIPresContext* aPresContext,
nsRect rect(x, y, width, height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *myColor, *mySpacing, 0, 0);
aDirtyRect, rect, *myColor, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mCheckButtonFaceStyle, 0);
aDirtyRect, rect, *myBorder, mCheckButtonFaceStyle, 0);
doDefaultPainting = PR_FALSE;
}
}

View File

@ -554,11 +554,8 @@ nsGfxListControlFrame::Reflow(nsIPresContext* aPresContext,
} else if (targetFrame == firstChildFrame) {
nsRect rect;
firstChildFrame->GetRect(rect);
const nsStyleSpacing* scrollSpacing;
firstChildFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)scrollSpacing);
nsMargin scrollBorderPadding;
scrollBorderPadding.SizeTo(0, 0, 0, 0);
scrollSpacing->CalcBorderPaddingFor(firstChildFrame, scrollBorderPadding);
nsMargin scrollBorderPadding(0, 0, 0, 0);
firstChildFrame->CalcBorderPadding(scrollBorderPadding);
rect.width -= (scrollBorderPadding.left + scrollBorderPadding.right);
rect.height -= (scrollBorderPadding.top + scrollBorderPadding.bottom)*2;
printf("Inc Pass CW: %d CH: %d\n", rect.width, rect.height);
@ -741,22 +738,19 @@ nsGfxListControlFrame::Reflow(nsIPresContext* aPresContext,
// Subtract out the borders
nsMargin border;
if (!aReflowState.mStyleSpacing->GetBorder(border)) {
if (!aReflowState.mStyleBorder->GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
border.SizeTo(0, 0, 0, 0);
}
nsMargin padding;
if (!aReflowState.mStyleSpacing->GetPadding(padding)) {
if (!aReflowState.mStylePadding->GetPadding(padding)) {
NS_NOTYETIMPLEMENTED("percentage padding");
padding.SizeTo(0, 0, 0, 0);
}
const nsStyleSpacing* scrollSpacing;
firstChildFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)scrollSpacing);
nsMargin scrollBorderPadding;
scrollBorderPadding.SizeTo(0, 0, 0, 0);
scrollSpacing->CalcBorderPaddingFor(firstChildFrame, scrollBorderPadding);
nsMargin scrollBorderPadding(0, 0, 0, 0);
firstChildFrame->CalcBorderPadding(scrollBorderPadding);
mMaxWidth -= (scrollBorderPadding.left + scrollBorderPadding.right);

View File

@ -282,8 +282,8 @@ nsGfxRadioControlFrame::PaintRadioButton(nsIPresContext* aPresContext,
if (nsnull != mRadioButtonFaceStyle) {
const nsStyleColor* myColor = (const nsStyleColor*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Border);
const nsStylePosition* myPosition = (const nsStylePosition*)
mRadioButtonFaceStyle->GetStyleData(eStyleStruct_Position);
@ -300,9 +300,9 @@ nsGfxRadioControlFrame::PaintRadioButton(nsIPresContext* aPresContext,
nsStyleColor tmpColor = *myColor;
tmpColor.mBackgroundColor = myColor->mColor;
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, tmpColor, *mySpacing, 0, 0);
aDirtyRect, rect, tmpColor, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mRadioButtonFaceStyle, 0);
aDirtyRect, rect, *myBorder, mRadioButtonFaceStyle, 0);
}
}
}

View File

@ -1022,10 +1022,12 @@ nsGfxTextControlFrame::RedispatchMouseEventToSubDoc(nsIPresContext* aPresContext
nsMargin padding;
border.SizeTo(0, 0, 0, 0);
padding.SizeTo(0, 0, 0, 0);
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
spacing->CalcBorderFor(this, border);
spacing->CalcPaddingFor(this, padding);
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)paddingStyle);
borderStyle->CalcBorderFor(this, border);
paddingStyle->CalcPaddingFor(this, padding);
CalcSizeOfSubDocInTwips(border, padding, size, subBounds);
event.point.x -= (border.left + padding.left);
if (0>event.point.x) {
@ -1343,10 +1345,12 @@ nsGfxTextControlFrame::CreateSubDoc(nsRect *aSizeOfSubdocContainer)
border.SizeTo(0, 0, 0, 0);
padding.SizeTo(0, 0, 0, 0);
// Get the CSS border
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
spacing->CalcBorderFor(this, border);
spacing->CalcPaddingFor(this, padding);
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)paddingStyle);
borderStyle->CalcBorderFor(this, border);
paddingStyle->CalcPaddingFor(this, padding);
CalcSizeOfSubDocInTwips(border, padding, size, subBounds);
float t2p;
mFramePresContext->GetTwipsToPixels(&t2p);
@ -1620,14 +1624,14 @@ nsGfxTextControlFrame::PaintTextControl(nsIPresContext* aPresContext,
{
nsCompatibility mode;
aPresContext->GetCompatibilityMode(&mode);
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)aStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder = (const nsStyleBorder*)aStyleContext->GetStyleData(eStyleStruct_Border);
PRIntn skipSides = 0;
nsRect rect(0, 0, mRect.width, mRect.height);
const nsStyleColor* color = (const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *mySpacing, 0, 0);
aDirtyRect, rect, *color, *myBorder, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, aStyleContext, skipSides);
aDirtyRect, rect, *myBorder, aStyleContext, skipSides);
if (!mDocShell)
{
if (mDisplayFrame) {
@ -1961,10 +1965,10 @@ nsGfxTextControlFrame::CreateDocShell(nsIPresContext* aPresContext,
view->SetVisibility(nsViewVisibility_kHide);
}
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
const nsStyleBorder* borderStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
nsMargin border;
spacing->CalcBorderFor(this, border);
borderStyle->CalcBorderFor(this, border);
nsCOMPtr<nsIWidget> widget;
view->GetWidget(*getter_AddRefs(widget));
@ -2091,12 +2095,6 @@ nsGfxTextControlFrame::ReflowNavQuirks(nsIPresContext* aPresContext,
nsMargin& aBorder,
nsMargin& aPadding)
{
nsMargin borderPadding;
borderPadding.SizeTo(0, 0, 0, 0);
// Get the CSS border
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
// This calculates the reflow size
// get the css size and let the frame use or override it
nsSize styleSize;
@ -2146,9 +2144,10 @@ nsGfxTextControlFrame::ReflowNavQuirks(nsIPresContext* aPresContext,
}
// In Nav Quirks mode we only add in extra size for padding
nsMargin padding;
padding.SizeTo(0, 0, 0, 0);
spacing->CalcPaddingFor(this, padding);
nsMargin padding(0, 0, 0, 0);
const nsStylePadding* paddingStyle;
GetStyleData(nsStylePadding, (const nsStyleStruct *&)paddingStyle);
paddingStyle->CalcPaddingFor(this, padding);
// Check to see if style was responsible
// for setting the height or the width
@ -2165,9 +2164,9 @@ nsGfxTextControlFrame::ReflowNavQuirks(nsIPresContext* aPresContext,
if (addBorder) {
if (CSS_NOTSET != styleSize.width ||
CSS_NOTSET != styleSize.height) { // css provides width
nsMargin border;
border.SizeTo(0, 0, 0, 0);
spacing->CalcBorderFor(this, border);
nsMargin border(0, 0, 0, 0);
GetStyleData(nsStyleBorder, (const nsStyleStruct *&)borderStyle);
borderStyle->CalcBorderFor(this, border);
if (CSS_NOTSET != styleSize.width) { // css provides width
aDesiredSize.width += border.left + border.right;
}
@ -2456,10 +2455,12 @@ nsGfxTextControlFrame::Reflow(nsIPresContext* aPresContext,
nsMargin padding;
padding.SizeTo(0, 0, 0, 0);
// Get the CSS border
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
spacing->CalcBorderFor(this, border);
spacing->CalcPaddingFor(this, padding);
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
GetStyleData(eStyleStruct_Padding, (const nsStyleStruct *&)paddingStyle);
borderStyle->CalcBorderFor(this, border);
paddingStyle->CalcPaddingFor(this, padding);
// calculate the the desired size for the text control
// use the suggested size if it has been set

View File

@ -2074,10 +2074,12 @@ nsGfxTextControlFrame2::GetPrefSize(nsBoxLayoutState& aState, nsSize& aSize)
padding.SizeTo(0, 0, 0, 0);
// Get the CSS border
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
spacing->CalcBorderFor(this, border);
spacing->CalcPaddingFor(this, padding);
const nsStyleBorder* borderStyle;
const nsStylePadding* paddingStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
GetStyleData(eStyleStruct_Padding, (const nsStyleStruct *&)paddingStyle);
borderStyle->CalcBorderFor(this, border);
paddingStyle->CalcPaddingFor(this, padding);
nsresult rv;
if (navQuirksMode) {

View File

@ -492,11 +492,11 @@ nsHTMLButtonControlFrame::Paint(nsIPresContext* aPresContext,
// but the real problem is the FirstChild (the AreaFrame)
// isn't being constrained properly
// Bug #17474
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct *&)spacing);
const nsStyleBorder* borderStyle;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct *&)borderStyle);
nsMargin border;
border.SizeTo(0, 0, 0, 0);
spacing->CalcBorderFor(this, border);
borderStyle->CalcBorderFor(this, border);
rect.Deflate(border);
aRenderingContext.PushState();

View File

@ -593,10 +593,8 @@ nsLabelFrame::Reflow(nsIPresContext* aPresContext,
nsSize availSize(aReflowState.availableWidth, aReflowState.availableHeight);
// get border and padding
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
nsMargin borderPadding;
spacing->CalcBorderPaddingFor(this, borderPadding);
nsMargin borderPadding(0,0,0,0);
CalcBorderPadding(borderPadding);
if (NS_INTRINSICSIZE != availSize.width) {
availSize.width -= borderPadding.left + borderPadding.right;

View File

@ -9320,10 +9320,10 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
if (! view) { // if frame has view, will already be invalidated
// XXX Instead of calling this we should really be calling
// Invalidate on on the nsFrame (which does this)
const nsStyleSpacing* spacing;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
const nsStyleOutline* outline;
aFrame->GetStyleData(eStyleStruct_Outline, (const nsStyleStruct*&)outline);
nscoord width;
spacing->GetOutlineWidth(width);
outline->GetOutlineWidth(width);
if (width > 0) {
invalidRect.Inflate(width, width);
}

View File

@ -740,21 +740,26 @@ nscoord xstart,xwidth,ystart,ywidth;
void nsCSSRendering::DrawDashedSides(PRIntn startSide,
nsIRenderingContext& aContext,
const nsRect& aDirtyRect,
const nsStyleSpacing& aSpacing,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
PRBool aDoOutline,
const nsRect& borderOutside,
const nsRect& borderInside,
PRIntn aSkipSides,
nsRect* aGap)
{
PRIntn dashLength;
nsRect dashRect, currRect;
nscoord xstart,xwidth,ystart,ywidth,temp,temp1,adjust;
PRBool bSolid = PR_TRUE;
float over = 0.0f;
PRUint8 style = aDoOutline?aSpacing.GetOutlineStyle():aSpacing.GetBorderStyle(startSide);
PRBool skippedSide = PR_FALSE;
NS_ASSERTION((aDoOutline && aOutlineStyle) || (!aDoOutline && aBorderStyle), "null params not allowed");
PRUint8 style = aDoOutline
? aOutlineStyle->GetOutlineStyle()
: aBorderStyle->GetBorderStyle(startSide);
// find out were x and y start
if(aDirtyRect.x > borderInside.x) {
@ -777,7 +782,9 @@ PRBool skippedSide = PR_FALSE;
for (PRIntn whichSide = startSide; whichSide < 4; whichSide++) {
PRUint8 prevStyle = style;
style = aDoOutline?aSpacing.GetOutlineStyle():aSpacing.GetBorderStyle(whichSide);
style = aDoOutline
? aOutlineStyle->GetOutlineStyle()
: aBorderStyle->GetBorderStyle(whichSide);
if ((1<<whichSide) & aSkipSides) {
// Skipped side
skippedSide = PR_TRUE;
@ -800,9 +807,9 @@ PRBool skippedSide = PR_FALSE;
nscolor sideColor;
if (aDoOutline) {
aSpacing.GetOutlineColor(sideColor);
aOutlineStyle->GetOutlineColor(sideColor);
} else {
if (!aSpacing.GetBorderColor(whichSide, sideColor)) {
if (!aBorderStyle->GetBorderColor(whichSide, sideColor)) {
continue; // side is transparent
}
}
@ -1488,7 +1495,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext* aPresContext,
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap,
@ -1569,7 +1576,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext* aPresContext,
// check for any corner that is rounded
for(i=0;i<4;i++){
if(borderRadii[i] > 0){
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aBorderStyle,aStyleContext,aSkipSides,borderRadii,aGap,PR_FALSE);
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,&aBorderStyle,nsnull,aStyleContext,aSkipSides,borderRadii,aGap,PR_FALSE);
return;
}
}
@ -1600,7 +1607,7 @@ void nsCSSRendering::PaintBorder(nsIPresContext* aPresContext,
}
}
if (cnt < 4) {
DrawDashedSides(cnt, aRenderingContext,aDirtyRect,aBorderStyle, PR_FALSE,
DrawDashedSides(cnt, aRenderingContext,aDirtyRect,&aBorderStyle,nsnull, PR_FALSE,
inside, outside, aSkipSides, aGap);
}
@ -1670,7 +1677,8 @@ void nsCSSRendering::PaintOutline(nsIPresContext* aPresContext,
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
const nsStyleOutline& aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap)
@ -1682,7 +1690,7 @@ const nsStyleColor* bgColor = nsStyleUtil::FindNonTransparentBackground(aStyleCo
nscoord width;
aBorderStyle.GetOutlineWidth(width);
aOutlineStyle.GetOutlineWidth(width);
if (0 == width) {
// Empty outline
@ -1690,10 +1698,10 @@ nscoord width;
}
// get the radius for our border
aBorderStyle.mOutlineRadius.GetTop(bordStyleRadius[0]); //topleft
aBorderStyle.mOutlineRadius.GetRight(bordStyleRadius[1]); //topright
aBorderStyle.mOutlineRadius.GetBottom(bordStyleRadius[2]); //bottomright
aBorderStyle.mOutlineRadius.GetLeft(bordStyleRadius[3]); //bottomleft
aOutlineStyle.mOutlineRadius.GetTop(bordStyleRadius[0]); //topleft
aOutlineStyle.mOutlineRadius.GetRight(bordStyleRadius[1]); //topright
aOutlineStyle.mOutlineRadius.GetBottom(bordStyleRadius[2]); //bottomright
aOutlineStyle.mOutlineRadius.GetLeft(bordStyleRadius[3]); //bottomleft
for(i=0;i<4;i++) {
borderRadii[i] = 0;
@ -1744,18 +1752,18 @@ nscoord width;
// rounded version of the border
for(i=0;i<4;i++){
if(borderRadii[i] > 0){
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aBorderStyle,aStyleContext,aSkipSides,borderRadii,aGap,PR_TRUE);
PaintRoundedBorder(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,nsnull,&aOutlineStyle,aStyleContext,aSkipSides,borderRadii,aGap,PR_TRUE);
aRenderingContext.PopState(clipState);
return;
}
}
PRUint8 outlineStyle = aBorderStyle.GetOutlineStyle();
PRUint8 outlineStyle = aOutlineStyle.GetOutlineStyle();
//see if any sides are dotted or dashed
if ((outlineStyle == NS_STYLE_BORDER_STYLE_DOTTED) ||
(outlineStyle == NS_STYLE_BORDER_STYLE_DASHED)) {
DrawDashedSides(0, aRenderingContext, aDirtyRect, aBorderStyle, PR_TRUE,
DrawDashedSides(0, aRenderingContext, aDirtyRect, nsnull, &aOutlineStyle, PR_TRUE,
outside, inside, aSkipSides, aGap);
aRenderingContext.PopState(clipState);
return;
@ -1771,7 +1779,7 @@ nscoord width;
nscolor outlineColor;
if (aBorderStyle.GetOutlineColor(outlineColor)) {
if (aOutlineStyle.GetOutlineColor(outlineColor)) {
DrawSide(aRenderingContext, NS_SIDE_BOTTOM,
outlineStyle,
outlineColor,
@ -2070,7 +2078,7 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aSpacing,
const nsStyleBorder& aBorder,
nscoord aDX,
nscoord aDY)
{
@ -2125,7 +2133,7 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
nsRect paddingArea(aBorderArea);
nsMargin border;
if (!aSpacing.GetBorder(border)) {
if (!aBorder.GetBorder(border)) {
NS_NOTYETIMPLEMENTED("percentage border");
}
paddingArea.Deflate(border);
@ -2483,10 +2491,10 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
// is rendered over the 'border' 'padding' and 'content' areas
if (!transparentBG) {
// get the radius for our border
aSpacing.mBorderRadius.GetTop(bordStyleRadius[0]); //topleft
aSpacing.mBorderRadius.GetRight(bordStyleRadius[1]); //topright
aSpacing.mBorderRadius.GetBottom(bordStyleRadius[2]); //bottomright
aSpacing.mBorderRadius.GetLeft(bordStyleRadius[3]); //bottomleft
aBorder.mBorderRadius.GetTop(bordStyleRadius[0]); //topleft
aBorder.mBorderRadius.GetRight(bordStyleRadius[1]); //topright
aBorder.mBorderRadius.GetBottom(bordStyleRadius[2]); //bottomright
aBorder.mBorderRadius.GetLeft(bordStyleRadius[3]); //bottomleft
for(i=0;i<4;i++) {
borderRadii[i] = 0;
@ -2509,7 +2517,7 @@ nsCSSRendering::PaintBackground(nsIPresContext* aPresContext,
// rounded version of the border
for(i=0;i<4;i++){
if (borderRadii[i] > 0){
PaintRoundedBackground(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aColor,aSpacing,aDX,aDY,borderRadii);
PaintRoundedBackground(aPresContext,aRenderingContext,aForFrame,aDirtyRect,aBorderArea,aColor,aDX,aDY,borderRadii);
return;
}
}
@ -2563,7 +2571,6 @@ nsCSSRendering::PaintRoundedBackground(nsIPresContext* aPresContext,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aSpacing,
nscoord aDX,
nscoord aDY,
PRInt16 aTheRadius[4])
@ -2652,7 +2659,8 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
PRInt16 aBorderRadius[4],
@ -2670,16 +2678,16 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
nscoord twipsPerPixel,qtwips;
float p2t;
NS_ASSERTION((aIsOutline && aOutlineStyle) || (!aIsOutline && aBorderStyle), "null params not allowed");
if (!aIsOutline) {
aBorderStyle.CalcBorderFor(aForFrame, border);
aBorderStyle->CalcBorderFor(aForFrame, border);
if ((0 == border.left) && (0 == border.right) &&
(0 == border.top) && (0 == border.bottom)) {
return;
}
} else {
nscoord width;
if (!aBorderStyle.GetOutlineWidth(width)) {
if (!aOutlineStyle->GetOutlineWidth(width)) {
return;
}
border.left = width;
@ -2720,7 +2728,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr2.mAnc2.x, Icr2.mAnc2.y);
thePath[np++].MoveTo(Icr2.mCon.x, Icr2.mCon.y);
thePath[np++].MoveTo(Icr2.mAnc1.x, Icr2.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_TOP,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_TOP,border,qtwips, aIsOutline);
}
// RIGHT LINE ----------------------------------------------------------------
LR.MidPointDivide(&cr2,&cr3);
@ -2740,7 +2748,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr4.mAnc2.x,Icr4.mAnc2.y);
thePath[np++].MoveTo(Icr4.mCon.x, Icr4.mCon.y);
thePath[np++].MoveTo(Icr4.mAnc1.x,Icr4.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_RIGHT,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_RIGHT,border,qtwips, aIsOutline);
}
// bottom line ----------------------------------------------------------------
@ -2761,7 +2769,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr3.mAnc2.x, Icr3.mAnc2.y);
thePath[np++].MoveTo(Icr3.mCon.x, Icr3.mCon.y);
thePath[np++].MoveTo(Icr3.mAnc1.x, Icr3.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_BOTTOM,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_BOTTOM,border,qtwips, aIsOutline);
}
// left line ----------------------------------------------------------------
if(0==border.left)
@ -2782,7 +2790,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
thePath[np++].MoveTo(Icr4.mCon.x, Icr4.mCon.y);
thePath[np++].MoveTo(Icr4.mAnc1.x, Icr4.mAnc1.y);
RenderSide(thePath,aRenderingContext,aBorderStyle,aStyleContext,NS_SIDE_LEFT,border,qtwips, aIsOutline);
RenderSide(thePath,aRenderingContext,aBorderStyle,aOutlineStyle,aStyleContext,NS_SIDE_LEFT,border,qtwips, aIsOutline);
}
@ -2792,7 +2800,7 @@ nsCSSRendering::PaintRoundedBorder(nsIPresContext* aPresContext,
*/
void
nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderingContext,
const nsStyleSpacing& aBorderStyle,nsIStyleContext* aStyleContext,
const nsStyleBorder* aBorderStyle,const nsStyleOutline* aOutlineStyle,nsIStyleContext* aStyleContext,
PRUint8 aSide,nsMargin &aBorThick,nscoord aTwipsPerPixel,
PRBool aIsOutline)
{
@ -2803,11 +2811,12 @@ nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderin
PRInt8 border_Style;
PRInt16 thickness;
NS_ASSERTION((aIsOutline && aOutlineStyle) || (!aIsOutline && aBorderStyle), "null params not allowed");
// set the style information
if (!aIsOutline) {
aBorderStyle.GetBorderColor(aSide,sideColor);
aBorderStyle->GetBorderColor(aSide,sideColor);
} else {
aBorderStyle.GetOutlineColor(sideColor);
aOutlineStyle->GetOutlineColor(sideColor);
}
aRenderingContext.SetColor ( sideColor );
@ -2838,16 +2847,15 @@ nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderin
} else {
if (!aIsOutline) {
border_Style = aBorderStyle.GetBorderStyle(aSide);
border_Style = aBorderStyle->GetBorderStyle(aSide);
} else {
border_Style = aBorderStyle.GetOutlineStyle();
border_Style = aOutlineStyle->GetOutlineStyle();
}
switch (border_Style){
case NS_STYLE_BORDER_STYLE_OUTSET:
case NS_STYLE_BORDER_STYLE_INSET:
{
const nsStyleColor* bgColor = nsStyleUtil::FindNonTransparentBackground(aStyleContext);
aBorderStyle.GetBorderColor(aSide,sideColor);
aRenderingContext.SetColor ( MakeBevelColor (aSide, border_Style, bgColor->mBackgroundColor,sideColor, PR_TRUE));
}
case NS_STYLE_BORDER_STYLE_DOTTED:
@ -2892,7 +2900,6 @@ nsCSSRendering::RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderin
case NS_STYLE_BORDER_STYLE_GROOVE:
{
const nsStyleColor* bgColor = nsStyleUtil::FindNonTransparentBackground(aStyleContext);
aBorderStyle.GetBorderColor(aSide,sideColor);
aRenderingContext.SetColor ( MakeBevelColor (aSide, border_Style, bgColor->mBackgroundColor,sideColor, PR_TRUE));
polypath[0].x = NSToCoordRound(aPoints[0].x);

View File

@ -41,7 +41,7 @@ public:
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap = 0,
@ -61,7 +61,8 @@ public:
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder& aBorderStyle,
const nsStyleOutline& aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
nsRect* aGap = 0);
@ -101,7 +102,7 @@ public:
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aStyle,
const nsStyleBorder& aBorder,
nscoord aDX,
nscoord aDY);
@ -118,7 +119,8 @@ public:
static void DrawDashedSides(PRIntn startSide,
nsIRenderingContext& aContext,
const nsRect& aDirtyRect,
const nsStyleSpacing& aSpacing,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
PRBool aDoOutline,
const nsRect& borderOutside,
const nsRect& borderInside,
@ -147,7 +149,8 @@ protected:
nsIFrame* aForFrame,
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleSpacing& aBorderStyle,
const nsStyleBorder* aBorderStyle,
const nsStyleOutline* aOutlineStyle,
nsIStyleContext* aStyleContext,
PRIntn aSkipSides,
PRInt16 aBorderRadius[4],nsRect* aGap = 0,
@ -155,7 +158,7 @@ protected:
static void RenderSide(nsFloatPoint aPoints[],nsIRenderingContext& aRenderingContext,
const nsStyleSpacing& aBorderStyle,nsIStyleContext* aStyleContext,
const nsStyleBorder* aBorderStyle,const nsStyleOutline* aOutlineStyle,nsIStyleContext* aStyleContext,
PRUint8 aSide,nsMargin &aBorThick,nscoord aTwipsPerPixel,
PRBool aIsOutline=PR_FALSE);
@ -165,7 +168,6 @@ protected:
const nsRect& aDirtyRect,
const nsRect& aBorderArea,
const nsStyleColor& aColor,
const nsStyleSpacing& aStyle,
nscoord aDX,
nscoord aDY,
PRInt16 aTheRadius[4]);

View File

@ -2371,33 +2371,41 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsCSSMargin* ourMargin;
if (NS_OK == aDeclaration->GetData(kCSSMarginSID, (nsCSSStruct**)&ourMargin)) {
if (nsnull != ourMargin) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)aContext->GetMutableStyleData(eStyleStruct_Margin);
nsStylePadding* padding = (nsStylePadding*)aContext->GetMutableStyleData(eStyleStruct_Padding);
nsStyleBorder* border = (nsStyleBorder*)aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleOutline* outline = (nsStyleOutline*)aContext->GetMutableStyleData(eStyleStruct_Outline);
const nsStyleSpacing* parentSpacing = spacing;
const nsStyleMargin* parentMargin = margin;
const nsStylePadding* parentPadding = padding;
const nsStyleBorder* parentBorder = border;
const nsStyleOutline* parentOutline = outline;
if (nsnull != aParentContext) {
parentSpacing = (const nsStyleSpacing*)aParentContext->GetStyleData(eStyleStruct_Spacing);
parentMargin = (const nsStyleMargin*)aParentContext->GetStyleData(eStyleStruct_Margin);
parentPadding = (const nsStylePadding*)aParentContext->GetStyleData(eStyleStruct_Padding);
parentBorder = (const nsStyleBorder*)aParentContext->GetStyleData(eStyleStruct_Border);
parentOutline = (const nsStyleOutline*)aParentContext->GetStyleData(eStyleStruct_Outline);
}
// margin: length, percent, auto, inherit
if (nsnull != ourMargin->mMargin) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mMargin.GetLeft(parentCoord);
parentMargin->mMargin.GetLeft(parentCoord);
if (SetCoord(ourMargin->mMargin->mLeft, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetLeft(coord);
margin->mMargin.SetLeft(coord);
}
parentSpacing->mMargin.GetTop(parentCoord);
parentMargin->mMargin.GetTop(parentCoord);
if (SetCoord(ourMargin->mMargin->mTop, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetTop(coord);
margin->mMargin.SetTop(coord);
}
parentSpacing->mMargin.GetRight(parentCoord);
parentMargin->mMargin.GetRight(parentCoord);
if (SetCoord(ourMargin->mMargin->mRight, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetRight(coord);
margin->mMargin.SetRight(coord);
}
parentSpacing->mMargin.GetBottom(parentCoord);
parentMargin->mMargin.GetBottom(parentCoord);
if (SetCoord(ourMargin->mMargin->mBottom, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetBottom(coord);
margin->mMargin.SetBottom(coord);
}
}
@ -2405,21 +2413,21 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mPadding) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mPadding.GetLeft(parentCoord);
parentPadding->mPadding.GetLeft(parentCoord);
if (SetCoord(ourMargin->mPadding->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetLeft(coord);
padding->mPadding.SetLeft(coord);
}
parentSpacing->mPadding.GetTop(parentCoord);
parentPadding->mPadding.GetTop(parentCoord);
if (SetCoord(ourMargin->mPadding->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetTop(coord);
padding->mPadding.SetTop(coord);
}
parentSpacing->mPadding.GetRight(parentCoord);
parentPadding->mPadding.GetRight(parentCoord);
if (SetCoord(ourMargin->mPadding->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetRight(coord);
padding->mPadding.SetRight(coord);
}
parentSpacing->mPadding.GetBottom(parentCoord);
parentPadding->mPadding.GetBottom(parentCoord);
if (SetCoord(ourMargin->mPadding->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetBottom(coord);
padding->mPadding.SetBottom(coord);
}
}
@ -2428,31 +2436,31 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsStyleCoord coord;
nsStyleCoord parentCoord;
if (SetCoord(ourMargin->mBorderWidth->mLeft, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetLeft(coord);
border->mBorder.SetLeft(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mLeft.GetUnit()) {
spacing->mBorder.SetLeft(parentSpacing->mBorder.GetLeft(coord));
border->mBorder.SetLeft(parentBorder->mBorder.GetLeft(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mTop, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetTop(coord);
border->mBorder.SetTop(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mTop.GetUnit()) {
spacing->mBorder.SetTop(parentSpacing->mBorder.GetTop(coord));
border->mBorder.SetTop(parentBorder->mBorder.GetTop(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mRight, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetRight(coord);
border->mBorder.SetRight(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mRight.GetUnit()) {
spacing->mBorder.SetRight(parentSpacing->mBorder.GetRight(coord));
border->mBorder.SetRight(parentBorder->mBorder.GetRight(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mBottom, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetBottom(coord);
border->mBorder.SetBottom(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mBottom.GetUnit()) {
spacing->mBorder.SetBottom(parentSpacing->mBorder.GetBottom(coord));
border->mBorder.SetBottom(parentBorder->mBorder.GetBottom(coord));
}
}
@ -2460,43 +2468,43 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mBorderStyle) {
nsCSSRect* ourStyle = ourMargin->mBorderStyle;
if (eCSSUnit_Enumerated == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, ourStyle->mTop.GetIntValue());
border->SetBorderStyle(NS_SIDE_TOP, ourStyle->mTop.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, parentSpacing->GetBorderStyle(NS_SIDE_TOP));
border->SetBorderStyle(NS_SIDE_TOP, parentBorder->GetBorderStyle(NS_SIDE_TOP));
}
if (eCSSUnit_Enumerated == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, ourStyle->mRight.GetIntValue());
border->SetBorderStyle(NS_SIDE_RIGHT, ourStyle->mRight.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, parentSpacing->GetBorderStyle(NS_SIDE_RIGHT));
border->SetBorderStyle(NS_SIDE_RIGHT, parentBorder->GetBorderStyle(NS_SIDE_RIGHT));
}
if (eCSSUnit_Enumerated == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, ourStyle->mBottom.GetIntValue());
border->SetBorderStyle(NS_SIDE_BOTTOM, ourStyle->mBottom.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, parentSpacing->GetBorderStyle(NS_SIDE_BOTTOM));
border->SetBorderStyle(NS_SIDE_BOTTOM, parentBorder->GetBorderStyle(NS_SIDE_BOTTOM));
}
if (eCSSUnit_Enumerated == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, ourStyle->mLeft.GetIntValue());
border->SetBorderStyle(NS_SIDE_LEFT, ourStyle->mLeft.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, parentSpacing->GetBorderStyle(NS_SIDE_LEFT));
border->SetBorderStyle(NS_SIDE_LEFT, parentBorder->GetBorderStyle(NS_SIDE_LEFT));
}
}
@ -2507,63 +2515,63 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nscolor unused = NS_RGB(0,0,0);
if (eCSSUnit_Inherit == ourBorderColor->mTop.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_TOP, borderColor)) {
spacing->SetBorderColor(NS_SIDE_TOP, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_TOP, borderColor)) {
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_TOP);
border->SetBorderTransparent(NS_SIDE_TOP);
}
}
else if (SetColor(ourBorderColor->mTop, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_TOP, borderColor);
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_TOP);
border->SetBorderTransparent(NS_SIDE_TOP);
}
if (eCSSUnit_Inherit == ourBorderColor->mRight.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
spacing->SetBorderColor(NS_SIDE_RIGHT, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_RIGHT);
border->SetBorderTransparent(NS_SIDE_RIGHT);
}
}
else if (SetColor(ourBorderColor->mRight, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_RIGHT, borderColor);
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mRight.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_RIGHT);
border->SetBorderTransparent(NS_SIDE_RIGHT);
}
if (eCSSUnit_Inherit == ourBorderColor->mBottom.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
spacing->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_BOTTOM);
border->SetBorderTransparent(NS_SIDE_BOTTOM);
}
}
else if (SetColor(ourBorderColor->mBottom, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mBottom.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_BOTTOM);
border->SetBorderTransparent(NS_SIDE_BOTTOM);
}
if (eCSSUnit_Inherit == ourBorderColor->mLeft.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
spacing->SetBorderColor(NS_SIDE_LEFT, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_LEFT);
border->SetBorderTransparent(NS_SIDE_LEFT);
}
}
else if (SetColor(ourBorderColor->mLeft, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_LEFT, borderColor);
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mLeft.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_LEFT);
border->SetBorderTransparent(NS_SIDE_LEFT);
}
}
@ -2571,21 +2579,21 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mBorderRadius) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mBorderRadius.GetLeft(parentCoord);
parentBorder->mBorderRadius.GetLeft(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetLeft(coord);
border->mBorderRadius.SetLeft(coord);
}
parentSpacing->mBorderRadius.GetTop(parentCoord);
parentBorder->mBorderRadius.GetTop(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetTop(coord);
border->mBorderRadius.SetTop(coord);
}
parentSpacing->mBorderRadius.GetRight(parentCoord);
parentBorder->mBorderRadius.GetRight(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetRight(coord);
border->mBorderRadius.SetRight(coord);
}
parentSpacing->mBorderRadius.GetBottom(parentCoord);
parentBorder->mBorderRadius.GetBottom(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetBottom(coord);
border->mBorderRadius.SetBottom(coord);
}
}
@ -2593,26 +2601,26 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mOutlineRadius) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mOutlineRadius.GetLeft(parentCoord);
parentOutline->mOutlineRadius.GetLeft(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetLeft(coord);
outline->mOutlineRadius.SetLeft(coord);
}
parentSpacing->mOutlineRadius.GetTop(parentCoord);
parentOutline->mOutlineRadius.GetTop(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetTop(coord);
outline->mOutlineRadius.SetTop(coord);
}
parentSpacing->mOutlineRadius.GetRight(parentCoord);
parentOutline->mOutlineRadius.GetRight(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetRight(coord);
outline->mOutlineRadius.SetRight(coord);
}
parentSpacing->mOutlineRadius.GetBottom(parentCoord);
parentOutline->mOutlineRadius.GetBottom(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetBottom(coord);
outline->mOutlineRadius.SetBottom(coord);
}
}
// outline-width: length, enum, inherit
if (! SetCoord(ourMargin->mOutlineWidth, spacing->mOutlineWidth, parentSpacing->mOutlineWidth,
if (! SetCoord(ourMargin->mOutlineWidth, outline->mOutlineWidth, parentOutline->mOutlineWidth,
SETCOORD_LEH, aFont->mFont, aPresContext)) {
}
@ -2620,37 +2628,37 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nscolor outlineColor;
nscolor unused = NS_RGB(0,0,0);
if (eCSSUnit_Inherit == ourMargin->mOutlineColor.GetUnit()) {
if (parentSpacing->GetOutlineColor(outlineColor)) {
spacing->SetOutlineColor(outlineColor);
if (parentOutline->GetOutlineColor(outlineColor)) {
outline->SetOutlineColor(outlineColor);
}
else {
spacing->SetOutlineInvert();
outline->SetOutlineInvert();
}
}
else if (SetColor(ourMargin->mOutlineColor, unused, aPresContext, outlineColor)) {
spacing->SetOutlineColor(outlineColor);
outline->SetOutlineColor(outlineColor);
}
else if (eCSSUnit_Enumerated == ourMargin->mOutlineColor.GetUnit()) {
spacing->SetOutlineInvert();
outline->SetOutlineInvert();
}
// outline-style: enum, none, inherit
if (eCSSUnit_Enumerated == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(ourMargin->mOutlineStyle.GetIntValue());
outline->SetOutlineStyle(ourMargin->mOutlineStyle.GetIntValue());
}
else if (eCSSUnit_None == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(NS_STYLE_BORDER_STYLE_NONE);
outline->SetOutlineStyle(NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(parentSpacing->GetOutlineStyle());
outline->SetOutlineStyle(parentOutline->GetOutlineStyle());
}
// float-edge: enum, inherit
if (eCSSUnit_Enumerated == ourMargin->mFloatEdge.GetUnit()) {
spacing->mFloatEdge = ourMargin->mFloatEdge.GetIntValue();
border->mFloatEdge = ourMargin->mFloatEdge.GetIntValue();
}
else if (eCSSUnit_Inherit == ourMargin->mFloatEdge.GetUnit()) {
spacing->mFloatEdge = parentSpacing->mFloatEdge;
border->mFloatEdge = parentBorder->mFloatEdge;
}
}
}

View File

@ -844,15 +844,15 @@ nsComputedDOMStyle::GetMargin(nsAWritableString& aMargin)
nsresult GetMargins(nsIFrame *aFrame, nscoord& left, nscoord& top,
nscoord& right, nscoord& bottom)
{
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
nsStyleCoord coord;
frame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
frame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
if (border) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
}
}
}
@ -1267,31 +1267,33 @@ nsComputedDOMStyle::GetAbsoluteFrameRect(nsIFrame *aFrame, nsRect& aRect)
}
// For the origin, add in the border for the frame
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
const nsStylePadding* padding;
nsStyleCoord coord;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
aRect.width -= spacing->mBorder.GetLeft(coord).GetCoordValue();
//aRect.width -= spacing->mMargin.GetLeft(coord).GetCoordValue();
aRect.width -= spacing->mPadding.GetLeft(coord).GetCoordValue();
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)padding);
if (border && padding) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
aRect.width -= border->mBorder.GetLeft(coord).GetCoordValue();
//aRect.width -= margin->mMargin.GetLeft(coord).GetCoordValue();
aRect.width -= padding->mPadding.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
aRect.height -= spacing->mBorder.GetTop(coord).GetCoordValue();
//aRect.height -= spacing->mMargin.GetTop(coord).GetCoordValue();
aRect.height -= spacing->mPadding.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
aRect.height -= border->mBorder.GetTop(coord).GetCoordValue();
//aRect.height -= margin->mMargin.GetTop(coord).GetCoordValue();
aRect.height -= padding->mPadding.GetTop(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetRightUnit()) {
aRect.width -= spacing->mBorder.GetRight(coord).GetCoordValue();
//aRect.width -= spacing->mMargin.GetRight(coord).GetCoordValue();
aRect.width -= spacing->mPadding.GetRight(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetRightUnit()) {
aRect.width -= border->mBorder.GetRight(coord).GetCoordValue();
//aRect.width -= margin->mMargin.GetRight(coord).GetCoordValue();
aRect.width -= padding->mPadding.GetRight(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetBottomUnit()) {
aRect.height -= spacing->mBorder.GetBottom(coord).GetCoordValue();
//aRect.height -= spacing->mMargin.GetBottom(coord).GetCoordValue();
aRect.height -= spacing->mPadding.GetBottom(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetBottomUnit()) {
aRect.height -= border->mBorder.GetBottom(coord).GetCoordValue();
//aRect.height -= margin->mMargin.GetBottom(coord).GetCoordValue();
aRect.height -= padding->mPadding.GetBottom(coord).GetCoordValue();
}
}

View File

@ -132,13 +132,13 @@ CSSFirstLineRule::MapStyleInto(nsIMutableStyleContext* aContext,
parentContext = aContext->GetParent();
// Disable border
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (spacing) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
if (border) {
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
}
// Undo any change made to "direction"

View File

@ -187,19 +187,19 @@ void nsTableBorderCollapser::ComputeLeftBorderForEdgeAt(nsIPresContext* aPresCon
nsVoidArray styles;
// styles are added to the array in the order least dominant -> most dominant
// 1. table
const nsStyleSpacing *spacing;
mTableFrame.GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
const nsStyleBorder *borderStyleData;
mTableFrame.GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 2. colgroup
nsTableColFrame* colFrame;
mTableFrame.GetColumnFrame(aColIndex, colFrame);
nsIFrame* colGroupFrame;
colFrame->GetParent(&colGroupFrame);
colGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 3. col
colFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 4. rowgroup
nsTableCellFrame* cellFrame = mTableFrame.GetCellInfoAt(aRowIndex, aColIndex);
nsRect rowRect(0,0,0,0);
@ -209,14 +209,14 @@ void nsTableBorderCollapser::ComputeLeftBorderForEdgeAt(nsIPresContext* aPresCon
rowFrame->GetRect(rowRect);
nsIFrame* rowGroupFrame;
rowFrame->GetParent(&rowGroupFrame);
rowGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 5. row
rowFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 6. cell (need to do something smart for rowspanner with row frame)
cellFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
cellFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
ComputeBorderSegment(NS_SIDE_LEFT, &styles, *border, PR_FALSE);
// now give half the computed border to the table segment, and half to the cell
@ -293,21 +293,21 @@ void nsTableBorderCollapser::ComputeRightBorderForEdgeAt(nsIPresContext* aPresCo
}
}
}
const nsStyleSpacing *spacing;
const nsStyleBorder *borderStyleData;
if (!rightNeighborFrame) {
// if rightNeighborFrame is null, our right neighbor is the table
mTableFrame.GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
mTableFrame.GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
// 2. colgroup //XXX: need to test if we're really on a colgroup border
nsTableColFrame* colFrame = mTableFrame.GetColFrame(aColIndex);
nsIFrame* colGroupFrame;
colFrame->GetParent(&colGroupFrame);
colGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 3. col
colFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 4. rowgroup
nsTableCellFrame* cellFrame = cellMap->GetCellInfoAt(aRowIndex, aColIndex);
nsRect rowRect(0,0,0,0);
@ -319,20 +319,20 @@ void nsTableBorderCollapser::ComputeRightBorderForEdgeAt(nsIPresContext* aPresCo
rowFrame->GetParent(&rowGroupFrame);
if (!rightNeighborFrame) {
// if rightNeighborFrame is null, our right neighbor is the table so we include the rowgroup and row
rowGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 5. row
rowFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
// 6. cell (need to do something smart for rowspanner with row frame)
cellFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
cellFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
// 7. left edge of rightNeighborCell, if there is one
if (rightNeighborFrame) {
rightNeighborFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rightNeighborFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
ComputeBorderSegment(NS_SIDE_RIGHT, &styles, border, (nsnull != rightNeighborFrame));
// now give half the computed border to each of the two neighbors
@ -393,18 +393,18 @@ void nsTableBorderCollapser::ComputeTopBorderForEdgeAt(nsIPresContext* aPresCont
nsVoidArray styles;
// styles are added to the array in the order least dominant -> most dominant
// 1. table
const nsStyleSpacing *spacing;
mTableFrame.GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
const nsStyleBorder *borderStyleData;
mTableFrame.GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 2. colgroup
nsTableColFrame* colFrame = mTableFrame.GetColFrame(aColIndex);
nsIFrame* colGroupFrame;
colFrame->GetParent(&colGroupFrame);
colGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 3. col
colFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 4. rowgroup
nsTableCellFrame* cellFrame = cellMap->GetCellInfoAt(aRowIndex, aColIndex);
if (cellFrame) {
@ -412,14 +412,14 @@ void nsTableBorderCollapser::ComputeTopBorderForEdgeAt(nsIPresContext* aPresCont
cellFrame->GetParent(&rowFrame);
nsIFrame* rowGroupFrame;
rowFrame->GetParent(&rowGroupFrame);
rowGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 5. row
rowFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 6. cell (need to do something smart for rowspanner with row frame)
cellFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
cellFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
ComputeBorderSegment(NS_SIDE_TOP, &styles, *border, PR_FALSE);
// now give half the computed border to the table segment, and half to the cell
@ -505,21 +505,21 @@ void nsTableBorderCollapser::ComputeBottomBorderForEdgeAt(nsIPresContext* aPresC
}
}
}
const nsStyleSpacing *spacing;
const nsStyleBorder *borderStyleData;
if (!bottomNeighborFrame) {
// if bottomNeighborFrame is null, our bottom neighbor is the table
mTableFrame.GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
mTableFrame.GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 2. colgroup // XXX: need to deterine if we're on a colgroup boundary
nsTableColFrame* colFrame = mTableFrame.GetColFrame(aColIndex);
nsIFrame* colGroupFrame;
colFrame->GetParent(&colGroupFrame);
colGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 3. col
colFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
colFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
// 4. rowgroup // XXX: use rowgroup only if we're on a table edge
nsTableCellFrame* cellFrame = cellMap->GetCellInfoAt(aRowIndex, aColIndex);
@ -530,19 +530,19 @@ void nsTableBorderCollapser::ComputeBottomBorderForEdgeAt(nsIPresContext* aPresC
rowFrame->GetRect(rowRect);
nsIFrame* rowGroupFrame;
rowFrame->GetParent(&rowGroupFrame);
rowGroupFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowGroupFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 5. row
rowFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
rowFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
// 6. cell (need to do something smart for rowspanner with row frame)
cellFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
cellFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
// 7. top edge of bottomNeighborCell, if there is one
if (bottomNeighborFrame) {
bottomNeighborFrame->GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)spacing));
styles.AppendElement((void*)spacing);
bottomNeighborFrame->GetStyleData(eStyleStruct_Border, ((const nsStyleStruct *&)borderStyleData));
styles.AppendElement((void*)borderStyleData);
}
ComputeBorderSegment(NS_SIDE_BOTTOM, &styles, border, (nsnull != bottomNeighborFrame));
// now give half the computed border to each of the two neighbors
@ -740,33 +740,33 @@ void nsTableBorderCollapser::ComputeBorderSegment(PRUint8 aSide,
PRInt32 styleCount = aStyles->Count();
if (0 != styleCount) {
nsVoidArray sameWidthBorders;
nsStyleSpacing * spacing;
nsStyleSpacing * lastSpacing=nsnull;
nsStyleBorder * borderStyleData;
nsStyleBorder * lastBorderStyleData=nsnull;
nsMargin border;
PRInt32 maxWidth=0;
PRUint8 side = aSide;
PRInt32 i;
for (i = 0; i < styleCount; i++) {
spacing = (nsStyleSpacing *)(aStyles->ElementAt(i));
borderStyleData = (nsStyleBorder *)(aStyles->ElementAt(i));
if (aFlipLastSide && (i == styleCount-1)) {
side = GetOpposingEdge(aSide);
lastSpacing = spacing;
lastBorderStyleData = borderStyleData;
}
if (spacing->GetBorderStyle(side) == NS_STYLE_BORDER_STYLE_HIDDEN) {
if (borderStyleData->GetBorderStyle(side) == NS_STYLE_BORDER_STYLE_HIDDEN) {
aBorder.mStyle=NS_STYLE_BORDER_STYLE_HIDDEN;
aBorder.mWidth=0;
return;
}
else if (spacing->GetBorderStyle(side)!=NS_STYLE_BORDER_STYLE_NONE) {
if (spacing->GetBorder(border)) {
else if (borderStyleData->GetBorderStyle(side)!=NS_STYLE_BORDER_STYLE_NONE) {
if (borderStyleData->GetBorder(border)) {
nscoord borderWidth = GetWidthForSide(border, side);
if (borderWidth == maxWidth) {
sameWidthBorders.AppendElement(spacing);
sameWidthBorders.AppendElement(borderStyleData);
}
else if (borderWidth > maxWidth) {
maxWidth = borderWidth;
sameWidthBorders.Clear();
sameWidthBorders.AppendElement(spacing);
sameWidthBorders.AppendElement(borderStyleData);
}
}
}
@ -782,38 +782,38 @@ void nsTableBorderCollapser::ComputeBorderSegment(PRUint8 aSide,
return;
}
else if (1 == styleCount) { // there was just one border of the largest width
spacing = (nsStyleSpacing *)(sameWidthBorders.ElementAt(0));
borderStyleData = (nsStyleBorder *)(sameWidthBorders.ElementAt(0));
side = aSide;
if (spacing == lastSpacing)
if (borderStyleData == lastBorderStyleData)
side = GetOpposingEdge(aSide);
if (!spacing->GetBorderColor(side, aBorder.mColor)) {
if (!borderStyleData->GetBorderColor(side, aBorder.mColor)) {
// XXX EEEK handle transparent border color somehow...
}
aBorder.mStyle = spacing->GetBorderStyle(side);
aBorder.mStyle = borderStyleData->GetBorderStyle(side);
return;
}
else {
nsStyleSpacing* winningStyleBorder;
nsStyleBorder* winningStyleBorder;
PRUint8 winningStyle=NS_STYLE_BORDER_STYLE_NONE;
for (i = 0; i < styleCount; i++) {
spacing = (nsStyleSpacing *)(sameWidthBorders.ElementAt(i));
borderStyleData = (nsStyleBorder *)(sameWidthBorders.ElementAt(i));
side = aSide;
if (spacing == lastSpacing)
if (borderStyleData == lastBorderStyleData)
side = GetOpposingEdge(aSide);
PRUint8 thisStyle = spacing->GetBorderStyle(side);
PRUint8 thisStyle = borderStyleData->GetBorderStyle(side);
PRUint8 borderCompare = CompareBorderStyles(thisStyle, winningStyle);
if (BORDER_PRECEDENT_HIGHER == borderCompare) {
winningStyle = thisStyle;
winningStyleBorder = spacing;
winningStyleBorder = borderStyleData;
}
else if (BORDER_PRECEDENT_EQUAL == borderCompare) {
// we're in lowest-to-highest precedence order, so later border styles win
winningStyleBorder=spacing;
winningStyleBorder=borderStyleData;
}
}
aBorder.mStyle = winningStyle;
side = aSide;
if (winningStyleBorder == lastSpacing)
if (winningStyleBorder == lastBorderStyleData)
side = GetOpposingEdge(aSide);
if (!winningStyleBorder->GetBorderColor(side, aBorder.mColor)) {
// XXX handle transparent border colors somehow

View File

@ -302,10 +302,10 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext* aPresContext,
}
//END SELECTION
const nsStyleSpacing* mySpacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* myBorder =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
NS_ASSERTION(nsnull!=myColor, "bad style color");
NS_ASSERTION(nsnull!=mySpacing, "bad style spacing");
NS_ASSERTION(nsnull!=myBorder, "bad style spacing");
const nsStyleTable* cellTableStyle;
GetStyleData(eStyleStruct_Table, ((const nsStyleStruct *&)cellTableStyle));
@ -314,7 +314,7 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext* aPresContext,
// only non empty cells render their background
if (PR_FALSE == GetContentEmpty()) {
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *myColor, *mySpacing, 0, 0);
aDirtyRect, rect, *myColor, *myBorder, 0, 0);
}
// empty cells do not render their border
@ -336,7 +336,7 @@ NS_METHOD nsTableCellFrame::Paint(nsIPresContext* aPresContext,
if (NS_STYLE_BORDER_SEPARATE == tableFrame->GetBorderCollapseStyle())
{
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *mySpacing, mStyleContext, skipSides);
aDirtyRect, rect, *myBorder, mStyleContext, skipSides);
}
else
{
@ -782,7 +782,7 @@ NS_METHOD nsTableCellFrame::Reflow(nsIPresContext* aPresContext,
kidOrigin.MoveTo(leftInset, topInset);
} else {
// handle percent padding-left which was 0 during initial reflow
if (eStyleUnit_Percent == aReflowState.mStyleSpacing->mPadding.GetLeftUnit()) {
if (eStyleUnit_Percent == aReflowState.mStylePadding->mPadding.GetLeftUnit()) {
nsRect kidRect;
firstKid->GetRect(kidRect);
// only move in the x direction for the same reason as above
@ -932,7 +932,7 @@ NS_METHOD nsTableCellFrame::Reflow(nsIPresContext* aPresContext,
*
*/
void nsTableCellFrame::MapHTMLBorderStyle(nsIPresContext* aPresContext,
nsStyleSpacing& aSpacingStyle,
nsStyleBorder& aBorderStyle,
nsTableFrame* aTableFrame)
{
//adjust the border style based on the table rules attribute
@ -946,20 +946,20 @@ void nsTableCellFrame::MapHTMLBorderStyle(nsIPresContext* aPresContext,
switch (tableStyle->mRules)
{
case NS_STYLE_TABLE_RULES_NONE:
aSpacingStyle.SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacingStyle.SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aSpacingStyle.SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aSpacingStyle.SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_RULES_COLS:
aSpacingStyle.SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aSpacingStyle.SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
break;
case NS_STYLE_TABLE_RULES_ROWS:
aSpacingStyle.SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aSpacingStyle.SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
aBorderStyle.SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
break;
default:
@ -1000,9 +1000,9 @@ void nsTableCellFrame::MapBorderPadding(nsIPresContext* aPresContext)
// get the table frame style context, and from it get cellpadding, cellspacing, and border info
const nsStyleTable* tableStyle;
tableFrame->GetStyleData(eStyleStruct_Table, (const nsStyleStruct *&)tableStyle);
const nsStyleSpacing* tableSpacingStyle;
tableFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct *&)tableSpacingStyle);
nsStyleSpacing* spacingData = (nsStyleSpacing*)mStyleContext->GetMutableStyleData(eStyleStruct_Spacing);
const nsStylePadding* tablePaddingStyle;
tableFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct *&)tablePaddingStyle);
nsStylePadding* paddingData = (nsStylePadding*)mStyleContext->GetMutableStyleData(eStyleStruct_Padding);
float p2t;
aPresContext->GetPixelsToTwips(&p2t);
@ -1015,16 +1015,17 @@ void nsTableCellFrame::MapBorderPadding(nsIPresContext* aPresContext)
}
// if the padding is not already set, set it to the table's cellpadding
if (eStyleUnit_Null == spacingData->mPadding.GetTopUnit())
spacingData->mPadding.SetTop(defaultPadding);
if (eStyleUnit_Null == spacingData->mPadding.GetRightUnit())
spacingData->mPadding.SetRight(defaultPadding);
if (eStyleUnit_Null == spacingData->mPadding.GetBottomUnit())
spacingData->mPadding.SetBottom(defaultPadding);
if (eStyleUnit_Null == spacingData->mPadding.GetLeftUnit())
spacingData->mPadding.SetLeft(defaultPadding);
if (eStyleUnit_Null == paddingData->mPadding.GetTopUnit())
paddingData->mPadding.SetTop(defaultPadding);
if (eStyleUnit_Null == paddingData->mPadding.GetRightUnit())
paddingData->mPadding.SetRight(defaultPadding);
if (eStyleUnit_Null == paddingData->mPadding.GetBottomUnit())
paddingData->mPadding.SetBottom(defaultPadding);
if (eStyleUnit_Null == paddingData->mPadding.GetLeftUnit())
paddingData->mPadding.SetLeft(defaultPadding);
MapHTMLBorderStyle(aPresContext, *spacingData, tableFrame);
nsStyleBorder* borderData = (nsStyleBorder*)mStyleContext->GetMutableStyleData(eStyleStruct_Border);
MapHTMLBorderStyle(aPresContext, *borderData, tableFrame);
MapVAlignAttribute(aPresContext, tableFrame);
MapHAlignAttribute(aPresContext, tableFrame);
@ -1275,9 +1276,9 @@ nsTableCellFrame::GetCellBorder(nsMargin& aBorder,
NS_PRECONDITION(mBorderEdges, "haven't allocated border edges struct");
aBorder = mBorderEdges->mMaxBorderWidth;
} else {
const nsStyleSpacing* spacing;
GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
spacing->GetBorder(aBorder);
const nsStyleBorder* borderData;
GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderData);
borderData->GetBorder(aBorder);
}
}

View File

@ -28,7 +28,6 @@
#include "nsTableRowFrame.h" // need to actually include this here to inline GetRowIndex
#include "nsIStyleContext.h"
struct nsStyleSpacing;
class nsTableFrame;
class nsHTMLValue;
@ -257,7 +256,7 @@ protected:
void MapBorderPadding(nsIPresContext* aPresContext);
void MapHTMLBorderStyle(nsIPresContext* aPresContext,
nsStyleSpacing& aSpacingStyle,
nsStyleBorder& aBorderStyle,
nsTableFrame* aTableFrame);
void MapVAlignAttribute(nsIPresContext* aPresContext, nsTableFrame *aTableFrame);

View File

@ -119,13 +119,13 @@ NS_METHOD nsTableColFrame::Paint(nsIPresContext* aPresContext,
const nsStyleDisplay* disp =
(const nsStyleDisplay*)mStyleContext->GetStyleData(eStyleStruct_Display);
if (disp->IsVisibleOrCollapsed()) {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
}
}
}

View File

@ -445,13 +445,13 @@ NS_METHOD nsTableColGroupFrame::Paint(nsIPresContext* aPresContext,
const nsStyleDisplay* disp =
(const nsStyleDisplay*)mStyleContext->GetStyleData(eStyleStruct_Display);
if (disp->IsVisibleOrCollapsed()) {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
}
}
}

View File

@ -571,16 +571,16 @@ void nsTableFrame::ProcessGroupRules(nsIPresContext* aPresContext)
if (originates) {
nsCOMPtr<nsIStyleContext> styleContext;
cell->GetStyleContext(getter_AddRefs(styleContext));
nsStyleSpacing* spacing = (nsStyleSpacing*)styleContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* border = (nsStyleBorder*)styleContext->GetMutableStyleData(eStyleStruct_Border);
if (rowX == startRow) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
}
else if (rowX == endRow) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
}
else {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
}
styleContext->RecalcAutomaticData(aPresContext);
}
@ -1326,8 +1326,8 @@ NS_METHOD nsTableFrame::Paint(nsIPresContext* aPresContext,
const nsStyleDisplay* disp =
(const nsStyleDisplay*)mStyleContext->GetStyleData(eStyleStruct_Display);
if (disp->IsVisibleOrCollapsed()) {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
@ -1337,7 +1337,7 @@ NS_METHOD nsTableFrame::Paint(nsIPresContext* aPresContext,
aPresContext->GetCompatibilityMode(&mode);
if (eCompatibility_NavQuirks != mode) {
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
}
// paint the column groups and columns
nsIFrame* colGroupFrame = mColGroups.FirstChild();
@ -1350,7 +1350,7 @@ NS_METHOD nsTableFrame::Paint(nsIPresContext* aPresContext,
if (NS_STYLE_BORDER_SEPARATE == GetBorderCollapseStyle())
{
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *border, mStyleContext, skipSides);
}
else
{
@ -1511,8 +1511,6 @@ nsresult nsTableFrame::AdjustSiblingsAfterReflow(nsIPresContext* aPresCon
// Update the max element size
//XXX: this should call into layout strategy to get the width field
if (aMaxElementSize) {
const nsStyleSpacing* tableSpacing;
GetStyleData(eStyleStruct_Spacing , ((const nsStyleStruct *&)tableSpacing));
nsMargin borderPadding;
GetTableBorder (borderPadding); // gets the max border thickness for each edge
borderPadding += aReflowState.reflowState.mComputedPadding;
@ -1853,10 +1851,10 @@ NS_METHOD nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresContext,
// Get the table's border padding
nsMargin borderPadding;
GetTableBorderForRowGroup(GetRowGroupFrame(kidFrame), borderPadding);
const nsStyleSpacing* tableSpacing;
GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)tableSpacing));
const nsStylePadding* tablePadding;
GetStyleData(eStyleStruct_Padding, ((const nsStyleStruct *&)tablePadding));
nsMargin padding;
tableSpacing->GetPadding(padding);
tablePadding->GetPadding(padding);
borderPadding += padding;
y += cellSpacingY;
@ -1911,12 +1909,12 @@ NS_METHOD nsTableFrame::ResizeReflowPass1(nsIPresContext* aPresContext,
}
// Get the table's border/padding
const nsStyleSpacing* mySpacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStylePadding* myPadding = (const nsStylePadding*)
mStyleContext->GetStyleData(eStyleStruct_Padding);
nsMargin tableBorderPadding;
GetTableBorder (tableBorderPadding); // this gets the max border thickness at each edge
nsMargin tablePadding;
mySpacing->GetPadding(tablePadding);
myPadding->GetPadding(tablePadding);
tableBorderPadding += tablePadding;
aDesiredSize.width = kidSize.width;
@ -2778,8 +2776,6 @@ nsTableFrame::RecoverState(InnerTableReflowState& aReflowState,
//XXX: this should call into layout strategy to get the width field
if (nsnull != aMaxElementSize)
{
const nsStyleSpacing* tableSpacing;
GetStyleData(eStyleStruct_Spacing , ((const nsStyleStruct *&)tableSpacing));
nsMargin borderPadding;
GetTableBorder (borderPadding); // gets the max border thickness for each edge
borderPadding += aReflowState.reflowState.mComputedPadding;
@ -2840,8 +2836,6 @@ NS_METHOD nsTableFrame::IR_TargetIsChild(nsIPresContext* aPresContext,
//XXX: this should call into layout strategy to get the width field
if (nsnull != aDesiredSize.maxElementSize)
{
const nsStyleSpacing* tableSpacing;
GetStyleData(eStyleStruct_Spacing , ((const nsStyleStruct *&)tableSpacing));
nsMargin borderPadding;
GetTableBorder (borderPadding); // gets the max border thickness for each edge
borderPadding += aReflowState.reflowState.mComputedPadding;
@ -2960,8 +2954,6 @@ void nsTableFrame::PlaceChild(nsIPresContext* aPresContext,
//XXX: this should call into layout strategy to get the width field
if (nsnull != aMaxElementSize) {
const nsStyleSpacing* tableSpacing;
GetStyleData(eStyleStruct_Spacing , ((const nsStyleStruct *&)tableSpacing));
nsMargin borderPadding;
GetTableBorder (borderPadding); // gets the max border thickness for each edge
borderPadding += aReflowState.reflowState.mComputedPadding;
@ -3094,8 +3086,6 @@ NS_METHOD nsTableFrame::ReflowMappedChildren(nsIPresContext* aPresContext
nsMargin borderPadding;
GetTableBorderForRowGroup(GetRowGroupFrame(kidFrame), borderPadding);
const nsStyleSpacing* tableSpacing;
GetStyleData(eStyleStruct_Spacing, ((const nsStyleStruct *&)tableSpacing));
borderPadding += aReflowState.reflowState.mComputedPadding;
// Reflow the child into the available space
@ -3777,19 +3767,19 @@ void nsTableFrame::SetColumnWidth(PRInt32 aColIndex, nscoord aWidth)
* Update the border style to map to the HTML border style
*
*/
void nsTableFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth)
void nsTableFrame::MapHTMLBorderStyle(nsStyleBorder& aBorderStyle, nscoord aBorderWidth)
{
nsStyleCoord width;
width.SetCoordValue(aBorderWidth);
aSpacingStyle.mBorder.SetTop(width);
aSpacingStyle.mBorder.SetLeft(width);
aSpacingStyle.mBorder.SetBottom(width);
aSpacingStyle.mBorder.SetRight(width);
aBorderStyle.mBorder.SetTop(width);
aBorderStyle.mBorder.SetLeft(width);
aBorderStyle.mBorder.SetBottom(width);
aBorderStyle.mBorder.SetRight(width);
aSpacingStyle.SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aSpacingStyle.SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aSpacingStyle.SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aSpacingStyle.SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aBorderStyle.SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aBorderStyle.SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aBorderStyle.SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_BG_OUTSET);
aBorderStyle.SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_BG_OUTSET);
nsIStyleContext* styleContext = mStyleContext;
const nsStyleColor* colorData = (const nsStyleColor*)
@ -3827,10 +3817,10 @@ void nsTableFrame::MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBo
if (borderColor == 0xFFFFFFFF)
borderColor = 0xFFC0C0C0;
aSpacingStyle.SetBorderColor(NS_SIDE_TOP, borderColor);
aSpacingStyle.SetBorderColor(NS_SIDE_LEFT, borderColor);
aSpacingStyle.SetBorderColor(NS_SIDE_BOTTOM, borderColor);
aSpacingStyle.SetBorderColor(NS_SIDE_RIGHT, borderColor);
aBorderStyle.SetBorderColor(NS_SIDE_TOP, borderColor);
aBorderStyle.SetBorderColor(NS_SIDE_LEFT, borderColor);
aBorderStyle.SetBorderColor(NS_SIDE_BOTTOM, borderColor);
aBorderStyle.SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
@ -3878,7 +3868,7 @@ void nsTableFrame::MapBorderMarginPadding(nsIPresContext* aPresContext)
if (!table)
return;
nsStyleSpacing* spacingData = (nsStyleSpacing*)mStyleContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleBorder* borderData = (nsStyleBorder*)mStyleContext->GetMutableStyleData(eStyleStruct_Border);
border_result = table->GetAttribute(nsHTMLAtoms::border,border_value);
if (border_result == NS_CONTENT_ATTR_HAS_VALUE)
@ -3888,7 +3878,7 @@ void nsTableFrame::MapBorderMarginPadding(nsIPresContext* aPresContext)
if (ConvertToPixelValue(border_value,1,intValue)) //XXX this is busted if this code is ever used again. MMP
border = NSIntPixelsToTwips(intValue, p2t);
}
MapHTMLBorderStyle(*spacingData,border);
MapHTMLBorderStyle(*borderData,border);
#endif
}
@ -3903,39 +3893,39 @@ CalcPercentPadding(nscoord aBasis,
void
GetPaddingFor(const nsSize& aBasis,
const nsStyleSpacing& aSpacing,
const nsStylePadding& aPaddingData,
nsMargin& aPadding)
{
nsStyleCoord styleCoord;
aSpacing.mPadding.GetTop(styleCoord);
if (eStyleUnit_Percent == aSpacing.mPadding.GetTopUnit()) {
aPaddingData.mPadding.GetTop(styleCoord);
if (eStyleUnit_Percent == aPaddingData.mPadding.GetTopUnit()) {
aPadding.top = CalcPercentPadding(aBasis.height, styleCoord);
}
else if (eStyleUnit_Coord == aSpacing.mPadding.GetTopUnit()) {
else if (eStyleUnit_Coord == aPaddingData.mPadding.GetTopUnit()) {
aPadding.top = styleCoord.GetCoordValue();
}
aSpacing.mPadding.GetRight(styleCoord);
if (eStyleUnit_Percent == aSpacing.mPadding.GetRightUnit()) {
aPaddingData.mPadding.GetRight(styleCoord);
if (eStyleUnit_Percent == aPaddingData.mPadding.GetRightUnit()) {
aPadding.right = CalcPercentPadding(aBasis.width, styleCoord);
}
else if (eStyleUnit_Coord == aSpacing.mPadding.GetTopUnit()) {
else if (eStyleUnit_Coord == aPaddingData.mPadding.GetTopUnit()) {
aPadding.right = styleCoord.GetCoordValue();
}
aSpacing.mPadding.GetBottom(styleCoord);
if (eStyleUnit_Percent == aSpacing.mPadding.GetBottomUnit()) {
aPaddingData.mPadding.GetBottom(styleCoord);
if (eStyleUnit_Percent == aPaddingData.mPadding.GetBottomUnit()) {
aPadding.bottom = CalcPercentPadding(aBasis.height, styleCoord);
}
else if (eStyleUnit_Coord == aSpacing.mPadding.GetTopUnit()) {
else if (eStyleUnit_Coord == aPaddingData.mPadding.GetTopUnit()) {
aPadding.bottom = styleCoord.GetCoordValue();
}
aSpacing.mPadding.GetLeft(styleCoord);
if (eStyleUnit_Percent == aSpacing.mPadding.GetLeftUnit()) {
aPaddingData.mPadding.GetLeft(styleCoord);
if (eStyleUnit_Percent == aPaddingData.mPadding.GetLeftUnit()) {
aPadding.left = CalcPercentPadding(aBasis.width, styleCoord);
}
else if (eStyleUnit_Coord == aSpacing.mPadding.GetTopUnit()) {
else if (eStyleUnit_Coord == aPaddingData.mPadding.GetTopUnit()) {
aPadding.left = styleCoord.GetCoordValue();
}
}
@ -3944,10 +3934,10 @@ nsMargin
nsTableFrame::GetPadding(const nsHTMLReflowState& aReflowState,
const nsTableCellFrame* aCellFrame)
{
const nsStyleSpacing* spacing;
aCellFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct *&)spacing);
const nsStylePadding* paddingData;
aCellFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct *&)paddingData);
nsMargin padding(0,0,0,0);
if (!spacing->GetPadding(padding)) {
if (!paddingData->GetPadding(padding)) {
const nsHTMLReflowState* parentRS = aReflowState.parentReflowState;
while (parentRS) {
if (parentRS->frame) {
@ -3955,7 +3945,7 @@ nsTableFrame::GetPadding(const nsHTMLReflowState& aReflowState,
parentRS->frame->GetFrameType(getter_AddRefs(frameType));
if (nsLayoutAtoms::tableFrame == frameType.get()) {
nsSize basis(parentRS->mComputedWidth, parentRS->mComputedHeight);
GetPaddingFor(basis, *spacing, padding);
GetPaddingFor(basis, *paddingData, padding);
break;
}
}
@ -3969,11 +3959,11 @@ nsMargin
nsTableFrame::GetPadding(const nsSize& aBasis,
const nsTableCellFrame* aCellFrame)
{
const nsStyleSpacing* spacing;
aCellFrame->GetStyleData(eStyleStruct_Spacing,(const nsStyleStruct *&)spacing);
const nsStylePadding* paddingData;
aCellFrame->GetStyleData(eStyleStruct_Padding,(const nsStyleStruct *&)paddingData);
nsMargin padding(0,0,0,0);
if (!spacing->GetPadding(padding)) {
GetPaddingFor(aBasis, *spacing, padding);
if (!paddingData->GetPadding(padding)) {
GetPaddingFor(aBasis, *paddingData, padding);
}
return padding;
}
@ -3985,9 +3975,9 @@ void nsTableFrame::GetTableBorder(nsMargin &aBorder)
mBorderCollapser->GetBorder(aBorder);
}
else {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
spacing->GetBorder(aBorder);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
border->GetBorder(aBorder);
}
}
@ -4007,9 +3997,9 @@ void nsTableFrame::GetTableBorderAt(PRInt32 aRowIndex,
}
}
else {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
spacing->GetBorder(aBorder);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
border->GetBorder(aBorder);
}
}
@ -4199,13 +4189,16 @@ nscoord nsTableFrame::CalcBorderBoxWidth(const nsHTMLReflowState& aState)
}
if (NS_UNCONSTRAINEDSIZE != aState.availableWidth) {
nsMargin margin(0,0,0,0);
aState.mStyleSpacing->GetMargin(margin);
aState.mStyleMargin->GetMargin(margin);
width = aState.availableWidth - margin.left - margin.right;
}
}
else if (width != NS_UNCONSTRAINEDSIZE) {
nsMargin border(0,0,0,0);
aState.mStyleBorder->GetBorder(border);
nsMargin borderPadding(0,0,0,0);
aState.mStyleSpacing->GetBorderPadding(borderPadding);
aState.mStylePadding->GetPadding(borderPadding);
borderPadding += border;
width += borderPadding.left + borderPadding.right;
}
width = PR_MAX(width, 0);

View File

@ -44,7 +44,6 @@ class nsHTMLValue;
struct InnerTableReflowState;
struct nsStylePosition;
struct nsStyleSpacing;
#ifdef DEBUG_TABLE_REFLOW_TIMING
#ifdef WIN32
@ -778,7 +777,7 @@ protected:
/** Support methods for DidSetStyleContext */
void MapBorderMarginPadding(nsIPresContext* aPresContext);
void MapHTMLBorderStyle(nsStyleSpacing& aSpacingStyle, nscoord aBorderWidth);
void MapHTMLBorderStyle(nsStyleBorder& aBorderStyle, nscoord aBorderWidth);
PRBool ConvertToPixelValue(nsHTMLValue& aValue, PRInt32 aDefault, PRInt32& aResult);
public:

View File

@ -443,10 +443,10 @@ void
nsTableOuterFrame::ZeroAutoMargin(nsHTMLReflowState& aReflowState,
nsMargin& aMargin)
{
if (eStyleUnit_Auto == aReflowState.mStyleSpacing->mMargin.GetLeftUnit()) {
if (eStyleUnit_Auto == aReflowState.mStyleMargin->mMargin.GetLeftUnit()) {
aMargin.left = 0;
}
if (eStyleUnit_Auto == aReflowState.mStyleSpacing->mMargin.GetRightUnit()) {
if (eStyleUnit_Auto == aReflowState.mStyleMargin->mMargin.GetRightUnit()) {
aMargin.right = 0;
}
}
@ -456,8 +456,8 @@ FixAutoMargins(nscoord aAvailWidth,
nsHTMLReflowState& aReflowState)
{
// see if there are auto margins. they may have been set to 0 in mComputedMargin
PRBool hasAutoMargin = eStyleUnit_Auto == aReflowState.mStyleSpacing->mMargin.GetLeftUnit() ||
eStyleUnit_Auto == aReflowState.mStyleSpacing->mMargin.GetRightUnit();
PRBool hasAutoMargin = eStyleUnit_Auto == aReflowState.mStyleMargin->mMargin.GetLeftUnit() ||
eStyleUnit_Auto == aReflowState.mStyleMargin->mMargin.GetRightUnit();
if (hasAutoMargin) {
nsRect rect;
aReflowState.frame->GetRect(rect);

View File

@ -525,8 +525,8 @@ NS_METHOD nsTableRowFrame::Paint(nsIPresContext* aPresContext,
const nsStyleDisplay* disp =
(const nsStyleDisplay*)mStyleContext->GetStyleData(eStyleStruct_Display);
if (disp->IsVisibleOrCollapsed()) {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
nsTableFrame* tableFrame = nsnull;
@ -539,7 +539,7 @@ NS_METHOD nsTableRowFrame::Paint(nsIPresContext* aPresContext,
nsRect rect(0, 0, mRect.width + cellSpacingX, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
}
}
}

View File

@ -217,8 +217,8 @@ NS_METHOD nsTableRowGroupFrame::Paint(nsIPresContext* aPresContext,
const nsStyleDisplay* disp =
(const nsStyleDisplay*)mStyleContext->GetStyleData(eStyleStruct_Display);
if (disp->IsVisibleOrCollapsed()) {
const nsStyleSpacing* spacing =
(const nsStyleSpacing*)mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border =
(const nsStyleBorder*)mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleColor* color =
(const nsStyleColor*)mStyleContext->GetStyleData(eStyleStruct_Color);
nsTableFrame* tableFrame = nsnull;
@ -228,7 +228,7 @@ NS_METHOD nsTableRowGroupFrame::Paint(nsIPresContext* aPresContext,
}
nsRect rect(0,0,mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
}
}
}

View File

@ -1434,16 +1434,18 @@ nsMathMLChar::Paint(nsIPresContext* aPresContext,
if (mRect.width && mRect.height) {
// Paint our background and border
PRIntn skipSides = 0; //aForFrame->GetSkipSides();
nsStyleSpacing spacing;
styleContext->GetStyle(eStyleStruct_Spacing, spacing);
nsStyleBorder border;
mStyleContext->GetStyle(eStyleStruct_Border, border);
nsStyleOutline outline;
mStyleContext->GetStyle(eStyleStruct_Outline, outline);
nsRect rect(mRect); //0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, aForFrame,
aDirtyRect, rect, color, spacing, 0, 0);
aDirtyRect, rect, color, border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, aForFrame,
aDirtyRect, rect, spacing, styleContext, skipSides);
aDirtyRect, rect, border, styleContext, skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, aForFrame,
aDirtyRect, rect, spacing, styleContext, 0);
aDirtyRect, rect, border, outline, styleContext, 0);
}
}

View File

@ -309,16 +309,18 @@ nsMathMLmactionFrame::Paint(nsIPresContext* aPresContext,
PRIntn skipSides = GetSkipSides();
const nsStyleColor* color = (const nsStyleColor*)
mStyleContext->GetStyleData(eStyleStruct_Color);
const nsStyleSpacing* spacing = (const nsStyleSpacing*)
mStyleContext->GetStyleData(eStyleStruct_Spacing);
const nsStyleBorder* border = (const nsStyleBorder*)
mStyleContext->GetStyleData(eStyleStruct_Border);
const nsStyleOutline* outline = (const nsStyleOutline*)
mStyleContext->GetStyleData(eStyleStruct_Outline);
nsRect rect(0, 0, mRect.width, mRect.height);
nsCSSRendering::PaintBackground(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *color, *spacing, 0, 0);
aDirtyRect, rect, *color, *border, 0, 0);
nsCSSRendering::PaintBorder(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, skipSides);
aDirtyRect, rect, *border, mStyleContext, skipSides);
nsCSSRendering::PaintOutline(aPresContext, aRenderingContext, this,
aDirtyRect, rect, *spacing, mStyleContext, 0);
aDirtyRect, rect, *border, *outline, mStyleContext, 0);
}
}

View File

@ -2371,33 +2371,41 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsCSSMargin* ourMargin;
if (NS_OK == aDeclaration->GetData(kCSSMarginSID, (nsCSSStruct**)&ourMargin)) {
if (nsnull != ourMargin) {
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
nsStyleMargin* margin = (nsStyleMargin*)aContext->GetMutableStyleData(eStyleStruct_Margin);
nsStylePadding* padding = (nsStylePadding*)aContext->GetMutableStyleData(eStyleStruct_Padding);
nsStyleBorder* border = (nsStyleBorder*)aContext->GetMutableStyleData(eStyleStruct_Border);
nsStyleOutline* outline = (nsStyleOutline*)aContext->GetMutableStyleData(eStyleStruct_Outline);
const nsStyleSpacing* parentSpacing = spacing;
const nsStyleMargin* parentMargin = margin;
const nsStylePadding* parentPadding = padding;
const nsStyleBorder* parentBorder = border;
const nsStyleOutline* parentOutline = outline;
if (nsnull != aParentContext) {
parentSpacing = (const nsStyleSpacing*)aParentContext->GetStyleData(eStyleStruct_Spacing);
parentMargin = (const nsStyleMargin*)aParentContext->GetStyleData(eStyleStruct_Margin);
parentPadding = (const nsStylePadding*)aParentContext->GetStyleData(eStyleStruct_Padding);
parentBorder = (const nsStyleBorder*)aParentContext->GetStyleData(eStyleStruct_Border);
parentOutline = (const nsStyleOutline*)aParentContext->GetStyleData(eStyleStruct_Outline);
}
// margin: length, percent, auto, inherit
if (nsnull != ourMargin->mMargin) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mMargin.GetLeft(parentCoord);
parentMargin->mMargin.GetLeft(parentCoord);
if (SetCoord(ourMargin->mMargin->mLeft, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetLeft(coord);
margin->mMargin.SetLeft(coord);
}
parentSpacing->mMargin.GetTop(parentCoord);
parentMargin->mMargin.GetTop(parentCoord);
if (SetCoord(ourMargin->mMargin->mTop, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetTop(coord);
margin->mMargin.SetTop(coord);
}
parentSpacing->mMargin.GetRight(parentCoord);
parentMargin->mMargin.GetRight(parentCoord);
if (SetCoord(ourMargin->mMargin->mRight, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetRight(coord);
margin->mMargin.SetRight(coord);
}
parentSpacing->mMargin.GetBottom(parentCoord);
parentMargin->mMargin.GetBottom(parentCoord);
if (SetCoord(ourMargin->mMargin->mBottom, coord, parentCoord, SETCOORD_LPAH, aFont->mFont, aPresContext)) {
spacing->mMargin.SetBottom(coord);
margin->mMargin.SetBottom(coord);
}
}
@ -2405,21 +2413,21 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mPadding) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mPadding.GetLeft(parentCoord);
parentPadding->mPadding.GetLeft(parentCoord);
if (SetCoord(ourMargin->mPadding->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetLeft(coord);
padding->mPadding.SetLeft(coord);
}
parentSpacing->mPadding.GetTop(parentCoord);
parentPadding->mPadding.GetTop(parentCoord);
if (SetCoord(ourMargin->mPadding->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetTop(coord);
padding->mPadding.SetTop(coord);
}
parentSpacing->mPadding.GetRight(parentCoord);
parentPadding->mPadding.GetRight(parentCoord);
if (SetCoord(ourMargin->mPadding->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetRight(coord);
padding->mPadding.SetRight(coord);
}
parentSpacing->mPadding.GetBottom(parentCoord);
parentPadding->mPadding.GetBottom(parentCoord);
if (SetCoord(ourMargin->mPadding->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mPadding.SetBottom(coord);
padding->mPadding.SetBottom(coord);
}
}
@ -2428,31 +2436,31 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsStyleCoord coord;
nsStyleCoord parentCoord;
if (SetCoord(ourMargin->mBorderWidth->mLeft, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetLeft(coord);
border->mBorder.SetLeft(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mLeft.GetUnit()) {
spacing->mBorder.SetLeft(parentSpacing->mBorder.GetLeft(coord));
border->mBorder.SetLeft(parentBorder->mBorder.GetLeft(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mTop, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetTop(coord);
border->mBorder.SetTop(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mTop.GetUnit()) {
spacing->mBorder.SetTop(parentSpacing->mBorder.GetTop(coord));
border->mBorder.SetTop(parentBorder->mBorder.GetTop(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mRight, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetRight(coord);
border->mBorder.SetRight(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mRight.GetUnit()) {
spacing->mBorder.SetRight(parentSpacing->mBorder.GetRight(coord));
border->mBorder.SetRight(parentBorder->mBorder.GetRight(coord));
}
if (SetCoord(ourMargin->mBorderWidth->mBottom, coord, parentCoord, SETCOORD_LE, aFont->mFont, aPresContext)) {
spacing->mBorder.SetBottom(coord);
border->mBorder.SetBottom(coord);
}
else if (eCSSUnit_Inherit == ourMargin->mBorderWidth->mBottom.GetUnit()) {
spacing->mBorder.SetBottom(parentSpacing->mBorder.GetBottom(coord));
border->mBorder.SetBottom(parentBorder->mBorder.GetBottom(coord));
}
}
@ -2460,43 +2468,43 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mBorderStyle) {
nsCSSRect* ourStyle = ourMargin->mBorderStyle;
if (eCSSUnit_Enumerated == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, ourStyle->mTop.GetIntValue());
border->SetBorderStyle(NS_SIDE_TOP, ourStyle->mTop.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mTop.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_TOP, parentSpacing->GetBorderStyle(NS_SIDE_TOP));
border->SetBorderStyle(NS_SIDE_TOP, parentBorder->GetBorderStyle(NS_SIDE_TOP));
}
if (eCSSUnit_Enumerated == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, ourStyle->mRight.GetIntValue());
border->SetBorderStyle(NS_SIDE_RIGHT, ourStyle->mRight.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mRight.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_RIGHT, parentSpacing->GetBorderStyle(NS_SIDE_RIGHT));
border->SetBorderStyle(NS_SIDE_RIGHT, parentBorder->GetBorderStyle(NS_SIDE_RIGHT));
}
if (eCSSUnit_Enumerated == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, ourStyle->mBottom.GetIntValue());
border->SetBorderStyle(NS_SIDE_BOTTOM, ourStyle->mBottom.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mBottom.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_BOTTOM, parentSpacing->GetBorderStyle(NS_SIDE_BOTTOM));
border->SetBorderStyle(NS_SIDE_BOTTOM, parentBorder->GetBorderStyle(NS_SIDE_BOTTOM));
}
if (eCSSUnit_Enumerated == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, ourStyle->mLeft.GetIntValue());
border->SetBorderStyle(NS_SIDE_LEFT, ourStyle->mLeft.GetIntValue());
}
else if (eCSSUnit_None == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourStyle->mLeft.GetUnit()) {
spacing->SetBorderStyle(NS_SIDE_LEFT, parentSpacing->GetBorderStyle(NS_SIDE_LEFT));
border->SetBorderStyle(NS_SIDE_LEFT, parentBorder->GetBorderStyle(NS_SIDE_LEFT));
}
}
@ -2507,63 +2515,63 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nscolor unused = NS_RGB(0,0,0);
if (eCSSUnit_Inherit == ourBorderColor->mTop.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_TOP, borderColor)) {
spacing->SetBorderColor(NS_SIDE_TOP, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_TOP, borderColor)) {
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_TOP);
border->SetBorderTransparent(NS_SIDE_TOP);
}
}
else if (SetColor(ourBorderColor->mTop, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_TOP, borderColor);
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_TOP);
border->SetBorderTransparent(NS_SIDE_TOP);
}
if (eCSSUnit_Inherit == ourBorderColor->mRight.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
spacing->SetBorderColor(NS_SIDE_RIGHT, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_RIGHT);
border->SetBorderTransparent(NS_SIDE_RIGHT);
}
}
else if (SetColor(ourBorderColor->mRight, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_RIGHT, borderColor);
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mRight.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_RIGHT);
border->SetBorderTransparent(NS_SIDE_RIGHT);
}
if (eCSSUnit_Inherit == ourBorderColor->mBottom.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
spacing->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_BOTTOM);
border->SetBorderTransparent(NS_SIDE_BOTTOM);
}
}
else if (SetColor(ourBorderColor->mBottom, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mBottom.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_BOTTOM);
border->SetBorderTransparent(NS_SIDE_BOTTOM);
}
if (eCSSUnit_Inherit == ourBorderColor->mLeft.GetUnit()) {
if (parentSpacing->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
spacing->SetBorderColor(NS_SIDE_LEFT, borderColor);
if (parentBorder->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else {
spacing->SetBorderTransparent(NS_SIDE_LEFT);
border->SetBorderTransparent(NS_SIDE_LEFT);
}
}
else if (SetColor(ourBorderColor->mLeft, unused, aPresContext, borderColor)) {
spacing->SetBorderColor(NS_SIDE_LEFT, borderColor);
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mLeft.GetUnit()) {
spacing->SetBorderTransparent(NS_SIDE_LEFT);
border->SetBorderTransparent(NS_SIDE_LEFT);
}
}
@ -2571,21 +2579,21 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mBorderRadius) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mBorderRadius.GetLeft(parentCoord);
parentBorder->mBorderRadius.GetLeft(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetLeft(coord);
border->mBorderRadius.SetLeft(coord);
}
parentSpacing->mBorderRadius.GetTop(parentCoord);
parentBorder->mBorderRadius.GetTop(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetTop(coord);
border->mBorderRadius.SetTop(coord);
}
parentSpacing->mBorderRadius.GetRight(parentCoord);
parentBorder->mBorderRadius.GetRight(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetRight(coord);
border->mBorderRadius.SetRight(coord);
}
parentSpacing->mBorderRadius.GetBottom(parentCoord);
parentBorder->mBorderRadius.GetBottom(parentCoord);
if (SetCoord(ourMargin->mBorderRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mBorderRadius.SetBottom(coord);
border->mBorderRadius.SetBottom(coord);
}
}
@ -2593,26 +2601,26 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
if (nsnull != ourMargin->mOutlineRadius) {
nsStyleCoord coord;
nsStyleCoord parentCoord;
parentSpacing->mOutlineRadius.GetLeft(parentCoord);
parentOutline->mOutlineRadius.GetLeft(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetLeft(coord);
outline->mOutlineRadius.SetLeft(coord);
}
parentSpacing->mOutlineRadius.GetTop(parentCoord);
parentOutline->mOutlineRadius.GetTop(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetTop(coord);
outline->mOutlineRadius.SetTop(coord);
}
parentSpacing->mOutlineRadius.GetRight(parentCoord);
parentOutline->mOutlineRadius.GetRight(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetRight(coord);
outline->mOutlineRadius.SetRight(coord);
}
parentSpacing->mOutlineRadius.GetBottom(parentCoord);
parentOutline->mOutlineRadius.GetBottom(parentCoord);
if (SetCoord(ourMargin->mOutlineRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
spacing->mOutlineRadius.SetBottom(coord);
outline->mOutlineRadius.SetBottom(coord);
}
}
// outline-width: length, enum, inherit
if (! SetCoord(ourMargin->mOutlineWidth, spacing->mOutlineWidth, parentSpacing->mOutlineWidth,
if (! SetCoord(ourMargin->mOutlineWidth, outline->mOutlineWidth, parentOutline->mOutlineWidth,
SETCOORD_LEH, aFont->mFont, aPresContext)) {
}
@ -2620,37 +2628,37 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nscolor outlineColor;
nscolor unused = NS_RGB(0,0,0);
if (eCSSUnit_Inherit == ourMargin->mOutlineColor.GetUnit()) {
if (parentSpacing->GetOutlineColor(outlineColor)) {
spacing->SetOutlineColor(outlineColor);
if (parentOutline->GetOutlineColor(outlineColor)) {
outline->SetOutlineColor(outlineColor);
}
else {
spacing->SetOutlineInvert();
outline->SetOutlineInvert();
}
}
else if (SetColor(ourMargin->mOutlineColor, unused, aPresContext, outlineColor)) {
spacing->SetOutlineColor(outlineColor);
outline->SetOutlineColor(outlineColor);
}
else if (eCSSUnit_Enumerated == ourMargin->mOutlineColor.GetUnit()) {
spacing->SetOutlineInvert();
outline->SetOutlineInvert();
}
// outline-style: enum, none, inherit
if (eCSSUnit_Enumerated == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(ourMargin->mOutlineStyle.GetIntValue());
outline->SetOutlineStyle(ourMargin->mOutlineStyle.GetIntValue());
}
else if (eCSSUnit_None == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(NS_STYLE_BORDER_STYLE_NONE);
outline->SetOutlineStyle(NS_STYLE_BORDER_STYLE_NONE);
}
else if (eCSSUnit_Inherit == ourMargin->mOutlineStyle.GetUnit()) {
spacing->SetOutlineStyle(parentSpacing->GetOutlineStyle());
outline->SetOutlineStyle(parentOutline->GetOutlineStyle());
}
// float-edge: enum, inherit
if (eCSSUnit_Enumerated == ourMargin->mFloatEdge.GetUnit()) {
spacing->mFloatEdge = ourMargin->mFloatEdge.GetIntValue();
border->mFloatEdge = ourMargin->mFloatEdge.GetIntValue();
}
else if (eCSSUnit_Inherit == ourMargin->mFloatEdge.GetUnit()) {
spacing->mFloatEdge = parentSpacing->mFloatEdge;
border->mFloatEdge = parentBorder->mFloatEdge;
}
}
}

View File

@ -844,15 +844,15 @@ nsComputedDOMStyle::GetMargin(nsAWritableString& aMargin)
nsresult GetMargins(nsIFrame *aFrame, nscoord& left, nscoord& top,
nscoord& right, nscoord& bottom)
{
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
nsStyleCoord coord;
frame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
frame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
if (border) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
}
}
}
@ -1267,31 +1267,33 @@ nsComputedDOMStyle::GetAbsoluteFrameRect(nsIFrame *aFrame, nsRect& aRect)
}
// For the origin, add in the border for the frame
const nsStyleSpacing* spacing;
const nsStyleBorder* border;
const nsStylePadding* padding;
nsStyleCoord coord;
aFrame->GetStyleData(eStyleStruct_Spacing, (const nsStyleStruct*&)spacing);
if (spacing) {
if (eStyleUnit_Coord == spacing->mBorder.GetLeftUnit()) {
origin.x += spacing->mBorder.GetLeft(coord).GetCoordValue();
aRect.width -= spacing->mBorder.GetLeft(coord).GetCoordValue();
//aRect.width -= spacing->mMargin.GetLeft(coord).GetCoordValue();
aRect.width -= spacing->mPadding.GetLeft(coord).GetCoordValue();
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)border);
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)padding);
if (border && padding) {
if (eStyleUnit_Coord == border->mBorder.GetLeftUnit()) {
origin.x += border->mBorder.GetLeft(coord).GetCoordValue();
aRect.width -= border->mBorder.GetLeft(coord).GetCoordValue();
//aRect.width -= margin->mMargin.GetLeft(coord).GetCoordValue();
aRect.width -= padding->mPadding.GetLeft(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetTopUnit()) {
origin.y += spacing->mBorder.GetTop(coord).GetCoordValue();
aRect.height -= spacing->mBorder.GetTop(coord).GetCoordValue();
//aRect.height -= spacing->mMargin.GetTop(coord).GetCoordValue();
aRect.height -= spacing->mPadding.GetTop(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetTopUnit()) {
origin.y += border->mBorder.GetTop(coord).GetCoordValue();
aRect.height -= border->mBorder.GetTop(coord).GetCoordValue();
//aRect.height -= margin->mMargin.GetTop(coord).GetCoordValue();
aRect.height -= padding->mPadding.GetTop(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetRightUnit()) {
aRect.width -= spacing->mBorder.GetRight(coord).GetCoordValue();
//aRect.width -= spacing->mMargin.GetRight(coord).GetCoordValue();
aRect.width -= spacing->mPadding.GetRight(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetRightUnit()) {
aRect.width -= border->mBorder.GetRight(coord).GetCoordValue();
//aRect.width -= margin->mMargin.GetRight(coord).GetCoordValue();
aRect.width -= padding->mPadding.GetRight(coord).GetCoordValue();
}
if (eStyleUnit_Coord == spacing->mBorder.GetBottomUnit()) {
aRect.height -= spacing->mBorder.GetBottom(coord).GetCoordValue();
//aRect.height -= spacing->mMargin.GetBottom(coord).GetCoordValue();
aRect.height -= spacing->mPadding.GetBottom(coord).GetCoordValue();
if (eStyleUnit_Coord == border->mBorder.GetBottomUnit()) {
aRect.height -= border->mBorder.GetBottom(coord).GetCoordValue();
//aRect.height -= margin->mMargin.GetBottom(coord).GetCoordValue();
aRect.height -= padding->mPadding.GetBottom(coord).GetCoordValue();
}
}

View File

@ -132,13 +132,13 @@ CSSFirstLineRule::MapStyleInto(nsIMutableStyleContext* aContext,
parentContext = aContext->GetParent();
// Disable border
nsStyleSpacing* spacing = (nsStyleSpacing*)
aContext->GetMutableStyleData(eStyleStruct_Spacing);
if (spacing) {
spacing->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
spacing->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
nsStyleBorder* border = (nsStyleBorder*)
aContext->GetMutableStyleData(eStyleStruct_Border);
if (border) {
border->SetBorderStyle(NS_SIDE_TOP, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_RIGHT, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_BOTTOM, NS_STYLE_BORDER_STYLE_NONE);
border->SetBorderStyle(NS_SIDE_LEFT, NS_STYLE_BORDER_STYLE_NONE);
}
// Undo any change made to "direction"

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More