16381 "Need to be able to specify -moz-border-radius for each corner". Made changes in the following files in order to store the radius as a nsCSSRect and support 4 new -moz-border-radius properties (topLeft, topRight, bottomRight, bottomLeft):
nsCSSDeclaration.cpp nsCSSParser.cpp nsCSSPropList.h nsCSSStyleRule.cpp nsICSSDeclaration.h nsIStyleContext.h nsStyleContext.cpp nsCSSRendering.cpp git-svn-id: svn://10.0.0.236/trunk@56387 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
8cfc9ac289
commit
ab167ecc58
@ -566,7 +566,7 @@ void StyleSpacingImpl::ResetFrom(const nsStyleSpacing* aParent, nsIPresContext*
|
||||
mBorderColor[2] = NS_RGB(0, 0, 0);
|
||||
mBorderColor[3] = NS_RGB(0, 0, 0);
|
||||
|
||||
mBorderRadius.SetCoordValue(0);
|
||||
mBorderRadius.Reset();
|
||||
|
||||
mOutlineWidth = medium;
|
||||
mOutlineStyle = NS_STYLE_BORDER_STYLE_NONE;
|
||||
|
||||
@ -374,14 +374,13 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
|
||||
|
||||
nsCSSMargin::nsCSSMargin(void)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull)
|
||||
{
|
||||
}
|
||||
|
||||
nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull),
|
||||
mBorderRadius(aCopy.mBorderRadius),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull),
|
||||
mOutlineWidth(aCopy.mOutlineWidth),
|
||||
mOutlineColor(aCopy.mOutlineColor),
|
||||
mOutlineStyle(aCopy.mOutlineStyle),
|
||||
@ -392,6 +391,7 @@ nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
CSS_IF_COPY(mBorderWidth, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderColor, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderStyle, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderRadius, nsCSSRect);
|
||||
}
|
||||
|
||||
nsCSSMargin::~nsCSSMargin(void)
|
||||
@ -401,6 +401,7 @@ nsCSSMargin::~nsCSSMargin(void)
|
||||
CSS_IF_DELETE(mBorderWidth);
|
||||
CSS_IF_DELETE(mBorderColor);
|
||||
CSS_IF_DELETE(mBorderStyle);
|
||||
CSS_IF_DELETE(mBorderRadius);
|
||||
}
|
||||
|
||||
const nsID& nsCSSMargin::GetID(void)
|
||||
@ -443,11 +444,19 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
|
||||
if (nsnull != mBorderStyle) {
|
||||
mBorderStyle->List(out, eCSSProperty_border_style, aIndent);
|
||||
}
|
||||
if (nsnull != mBorderRadius) {
|
||||
static const nsCSSProperty trbl[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
mBorderRadius->List(out, aIndent, trbl);
|
||||
}
|
||||
|
||||
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
|
||||
|
||||
nsAutoString buffer;
|
||||
mBorderRadius.AppendToString(buffer, eCSSProperty__moz_border_radius);
|
||||
mOutlineWidth.AppendToString(buffer, eCSSProperty_outline_width);
|
||||
mOutlineColor.AppendToString(buffer, eCSSProperty_outline_color);
|
||||
mOutlineStyle.AppendToString(buffer, eCSSProperty_outline_style);
|
||||
@ -1362,14 +1371,29 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
CSS_ENSURE(Margin) {
|
||||
CSS_ENSURE_RECT(mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft = aValue; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
CSS_ENSURE(Margin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: mMargin->mBorderRadius = aValue; break;
|
||||
case eCSSProperty_outline_width: mMargin->mOutlineWidth = aValue; break;
|
||||
case eCSSProperty_outline_color: mMargin->mOutlineColor = aValue; break;
|
||||
case eCSSProperty_outline_style: mMargin->mOutlineStyle = aValue; break;
|
||||
@ -1629,6 +1653,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't append shorthand properties");
|
||||
// default: // XXX explicitly removing default case so compiler will help find missed props
|
||||
case eCSSProperty_UNKNOWN:
|
||||
@ -2015,7 +2040,27 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if (nsnull != mMargin) {
|
||||
if (nsnull != mMargin->mBorderRadius) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
CSS_ENSURE_RECT(mImportant->mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topLeft, mMargin->mBorderRadius->mTop);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topRight, mMargin->mBorderRadius->mRight);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomRight, mMargin->mBorderRadius->mBottom);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomLeft, mMargin->mBorderRadius->mLeft);
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
@ -2023,7 +2068,6 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
if (nsnull != mMargin) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius, mMargin->mBorderRadius);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_width, mMargin->mOutlineWidth);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_color, mMargin->mOutlineColor);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_style, mMargin->mOutlineStyle);
|
||||
@ -2422,6 +2466,12 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
SetValueImportant(eCSSProperty_border_bottom_width);
|
||||
SetValueImportant(eCSSProperty_border_left_width);
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topLeft);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomLeft);
|
||||
break;
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
break;
|
||||
@ -2691,14 +2741,30 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if ((nsnull != mMargin) && (nsnull != mMargin->mBorderRadius)) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: aValue = mMargin->mBorderRadius->mTop; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: aValue = mMargin->mBorderRadius->mRight; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: aValue = mMargin->mBorderRadius->mBottom; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: aValue = mMargin->mBorderRadius->mLeft; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
else {
|
||||
aValue.Reset();
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
if (nsnull != mMargin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: aValue = mMargin->mBorderRadius; break;
|
||||
case eCSSProperty_outline_width: aValue = mMargin->mOutlineWidth; break;
|
||||
case eCSSProperty_outline_color: aValue = mMargin->mOutlineColor; break;
|
||||
case eCSSProperty_outline_style: aValue = mMargin->mOutlineStyle; break;
|
||||
@ -2981,6 +3047,7 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't query for shorthand properties");
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -3344,6 +3411,14 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsString& aValue)
|
||||
AppendValueToString(eCSSProperty_border_left_style, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
if (HAS_RECT(mMargin,mBorderRadius)) {
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topLeft, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomLeft, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty_border_width:
|
||||
if (HAS_RECT(mMargin,mBorderWidth)) {
|
||||
AppendValueToString(eCSSProperty_border_top_width, aValue); aValue.Append(' ');
|
||||
|
||||
@ -205,6 +205,7 @@ protected:
|
||||
const nsCSSProperty aPropIDs[], PRInt32& aChangeHint);
|
||||
PRBool ParseBorderStyle(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseBorderWidth(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseBorderRadius(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseClip(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseContent(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseCounterData(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
@ -2632,6 +2633,8 @@ PRBool CSSParserImpl::ParseProperty(PRInt32& aErrorCode,
|
||||
return ParseBorderSide(aErrorCode, aDeclaration, kBorderTopIDs, aChangeHint);
|
||||
case eCSSProperty_border_width:
|
||||
return ParseBorderWidth(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty__moz_border_radius:
|
||||
return ParseBorderRadius(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty_clip:
|
||||
return ParseClip(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty_content:
|
||||
@ -2814,7 +2817,10 @@ PRBool CSSParserImpl::ParseSingleValueProperty(PRInt32& aErrorCode,
|
||||
case eCSSProperty_border_top_width:
|
||||
return ParseVariant(aErrorCode, aValue, VARIANT_HKL,
|
||||
nsCSSProps::kBorderWidthKTable);
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);
|
||||
case eCSSProperty_bottom:
|
||||
case eCSSProperty_top:
|
||||
@ -3290,6 +3296,12 @@ static const nsCSSProperty kBorderColorIDs[] = {
|
||||
eCSSProperty_border_bottom_color,
|
||||
eCSSProperty_border_left_color
|
||||
};
|
||||
static const nsCSSProperty kBorderRadiusIDs[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
|
||||
PRBool CSSParserImpl::ParseBorder(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
@ -3406,6 +3418,13 @@ PRBool CSSParserImpl::ParseBorderWidth(PRInt32& aErrorCode, nsICSSDeclaration* a
|
||||
return ParseBoxProperties(aErrorCode, aDeclaration, kBorderWidthIDs, aChangeHint);
|
||||
}
|
||||
|
||||
PRBool CSSParserImpl::ParseBorderRadius(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
{
|
||||
return ParseBoxProperties(aErrorCode, aDeclaration, kBorderRadiusIDs, aChangeHint);
|
||||
}
|
||||
|
||||
|
||||
PRBool CSSParserImpl::ParseClip(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
{
|
||||
|
||||
@ -43,6 +43,10 @@
|
||||
|
||||
|
||||
CSS_PROP(_moz_border_radius, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topRight, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomRight, VISUAL)
|
||||
CSS_PROP(azimuth, AURAL)
|
||||
CSS_PROP(background, VISUAL)
|
||||
CSS_PROP(background_attachment, VISUAL)
|
||||
|
||||
@ -374,14 +374,13 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
|
||||
|
||||
nsCSSMargin::nsCSSMargin(void)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull)
|
||||
{
|
||||
}
|
||||
|
||||
nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull),
|
||||
mBorderRadius(aCopy.mBorderRadius),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull),
|
||||
mOutlineWidth(aCopy.mOutlineWidth),
|
||||
mOutlineColor(aCopy.mOutlineColor),
|
||||
mOutlineStyle(aCopy.mOutlineStyle),
|
||||
@ -392,6 +391,7 @@ nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
CSS_IF_COPY(mBorderWidth, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderColor, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderStyle, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderRadius, nsCSSRect);
|
||||
}
|
||||
|
||||
nsCSSMargin::~nsCSSMargin(void)
|
||||
@ -401,6 +401,7 @@ nsCSSMargin::~nsCSSMargin(void)
|
||||
CSS_IF_DELETE(mBorderWidth);
|
||||
CSS_IF_DELETE(mBorderColor);
|
||||
CSS_IF_DELETE(mBorderStyle);
|
||||
CSS_IF_DELETE(mBorderRadius);
|
||||
}
|
||||
|
||||
const nsID& nsCSSMargin::GetID(void)
|
||||
@ -443,11 +444,19 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
|
||||
if (nsnull != mBorderStyle) {
|
||||
mBorderStyle->List(out, eCSSProperty_border_style, aIndent);
|
||||
}
|
||||
if (nsnull != mBorderRadius) {
|
||||
static const nsCSSProperty trbl[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
mBorderRadius->List(out, aIndent, trbl);
|
||||
}
|
||||
|
||||
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
|
||||
|
||||
nsAutoString buffer;
|
||||
mBorderRadius.AppendToString(buffer, eCSSProperty__moz_border_radius);
|
||||
mOutlineWidth.AppendToString(buffer, eCSSProperty_outline_width);
|
||||
mOutlineColor.AppendToString(buffer, eCSSProperty_outline_color);
|
||||
mOutlineStyle.AppendToString(buffer, eCSSProperty_outline_style);
|
||||
@ -1362,14 +1371,29 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
CSS_ENSURE(Margin) {
|
||||
CSS_ENSURE_RECT(mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft = aValue; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
CSS_ENSURE(Margin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: mMargin->mBorderRadius = aValue; break;
|
||||
case eCSSProperty_outline_width: mMargin->mOutlineWidth = aValue; break;
|
||||
case eCSSProperty_outline_color: mMargin->mOutlineColor = aValue; break;
|
||||
case eCSSProperty_outline_style: mMargin->mOutlineStyle = aValue; break;
|
||||
@ -1629,6 +1653,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't append shorthand properties");
|
||||
// default: // XXX explicitly removing default case so compiler will help find missed props
|
||||
case eCSSProperty_UNKNOWN:
|
||||
@ -2015,7 +2040,27 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if (nsnull != mMargin) {
|
||||
if (nsnull != mMargin->mBorderRadius) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
CSS_ENSURE_RECT(mImportant->mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topLeft, mMargin->mBorderRadius->mTop);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topRight, mMargin->mBorderRadius->mRight);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomRight, mMargin->mBorderRadius->mBottom);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomLeft, mMargin->mBorderRadius->mLeft);
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
@ -2023,7 +2068,6 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
if (nsnull != mMargin) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius, mMargin->mBorderRadius);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_width, mMargin->mOutlineWidth);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_color, mMargin->mOutlineColor);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_style, mMargin->mOutlineStyle);
|
||||
@ -2422,6 +2466,12 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
SetValueImportant(eCSSProperty_border_bottom_width);
|
||||
SetValueImportant(eCSSProperty_border_left_width);
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topLeft);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomLeft);
|
||||
break;
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
break;
|
||||
@ -2691,14 +2741,30 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if ((nsnull != mMargin) && (nsnull != mMargin->mBorderRadius)) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: aValue = mMargin->mBorderRadius->mTop; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: aValue = mMargin->mBorderRadius->mRight; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: aValue = mMargin->mBorderRadius->mBottom; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: aValue = mMargin->mBorderRadius->mLeft; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
else {
|
||||
aValue.Reset();
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
if (nsnull != mMargin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: aValue = mMargin->mBorderRadius; break;
|
||||
case eCSSProperty_outline_width: aValue = mMargin->mOutlineWidth; break;
|
||||
case eCSSProperty_outline_color: aValue = mMargin->mOutlineColor; break;
|
||||
case eCSSProperty_outline_style: aValue = mMargin->mOutlineStyle; break;
|
||||
@ -2981,6 +3047,7 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't query for shorthand properties");
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -3344,6 +3411,14 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsString& aValue)
|
||||
AppendValueToString(eCSSProperty_border_left_style, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
if (HAS_RECT(mMargin,mBorderRadius)) {
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topLeft, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomLeft, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty_border_width:
|
||||
if (HAS_RECT(mMargin,mBorderWidth)) {
|
||||
AppendValueToString(eCSSProperty_border_top_width, aValue); aValue.Append(' ');
|
||||
|
||||
@ -1997,9 +1997,26 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
|
||||
}
|
||||
}
|
||||
|
||||
// -moz-border-radius: length, inherit
|
||||
if (! SetCoord(ourMargin->mBorderRadius, spacing->mBorderRadius, parentSpacing->mBorderRadius,
|
||||
SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
// -moz-border-radius: length, percent, inherit
|
||||
if (nsnull != ourMargin->mBorderRadius) {
|
||||
nsStyleCoord coord;
|
||||
nsStyleCoord parentCoord;
|
||||
parentSpacing->mBorderRadius.GetLeft(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetLeft(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetTop(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetTop(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetRight(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetRight(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetBottom(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetBottom(coord);
|
||||
}
|
||||
}
|
||||
|
||||
// outline-width: length, enum, inherit
|
||||
|
||||
@ -215,7 +215,7 @@ struct nsCSSMargin : public nsCSSStruct {
|
||||
nsCSSRect* mBorderWidth;
|
||||
nsCSSRect* mBorderColor;
|
||||
nsCSSRect* mBorderStyle;
|
||||
nsCSSValue mBorderRadius; // (extension)
|
||||
nsCSSRect* mBorderRadius; // (extension)
|
||||
nsCSSValue mOutlineWidth;
|
||||
nsCSSValue mOutlineColor;
|
||||
nsCSSValue mOutlineStyle;
|
||||
|
||||
@ -43,6 +43,10 @@
|
||||
|
||||
|
||||
CSS_PROP(_moz_border_radius, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topRight, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomRight, VISUAL)
|
||||
CSS_PROP(azimuth, AURAL)
|
||||
CSS_PROP(background, VISUAL)
|
||||
CSS_PROP(background_attachment, VISUAL)
|
||||
|
||||
@ -84,7 +84,8 @@ struct nsStyleSpacing: public nsStyleStruct {
|
||||
nsStyleSides mPadding; // [reset] length, percent, inherit
|
||||
nsStyleSides mBorder; // [reset] length, enum (see nsStyleConsts.h)
|
||||
|
||||
nsStyleCoord mBorderRadius; // [reset] length, percent, inherit
|
||||
nsStyleSides mBorderRadius; // [reset] length, percent, inherit
|
||||
// (top=topLeft, right=topRight, bottom=bottomRight, left=bottomLeft)
|
||||
|
||||
nsStyleCoord mOutlineWidth; // [reset] length, enum (see nsStyleConsts.h)
|
||||
|
||||
|
||||
@ -566,7 +566,7 @@ void StyleSpacingImpl::ResetFrom(const nsStyleSpacing* aParent, nsIPresContext*
|
||||
mBorderColor[2] = NS_RGB(0, 0, 0);
|
||||
mBorderColor[3] = NS_RGB(0, 0, 0);
|
||||
|
||||
mBorderRadius.SetCoordValue(0);
|
||||
mBorderRadius.Reset();
|
||||
|
||||
mOutlineWidth = medium;
|
||||
mOutlineStyle = NS_STYLE_BORDER_STYLE_NONE;
|
||||
|
||||
@ -374,14 +374,13 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
|
||||
|
||||
nsCSSMargin::nsCSSMargin(void)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull)
|
||||
{
|
||||
}
|
||||
|
||||
nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull),
|
||||
mBorderRadius(aCopy.mBorderRadius),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull),
|
||||
mOutlineWidth(aCopy.mOutlineWidth),
|
||||
mOutlineColor(aCopy.mOutlineColor),
|
||||
mOutlineStyle(aCopy.mOutlineStyle),
|
||||
@ -392,6 +391,7 @@ nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
CSS_IF_COPY(mBorderWidth, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderColor, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderStyle, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderRadius, nsCSSRect);
|
||||
}
|
||||
|
||||
nsCSSMargin::~nsCSSMargin(void)
|
||||
@ -401,6 +401,7 @@ nsCSSMargin::~nsCSSMargin(void)
|
||||
CSS_IF_DELETE(mBorderWidth);
|
||||
CSS_IF_DELETE(mBorderColor);
|
||||
CSS_IF_DELETE(mBorderStyle);
|
||||
CSS_IF_DELETE(mBorderRadius);
|
||||
}
|
||||
|
||||
const nsID& nsCSSMargin::GetID(void)
|
||||
@ -443,11 +444,19 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
|
||||
if (nsnull != mBorderStyle) {
|
||||
mBorderStyle->List(out, eCSSProperty_border_style, aIndent);
|
||||
}
|
||||
if (nsnull != mBorderRadius) {
|
||||
static const nsCSSProperty trbl[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
mBorderRadius->List(out, aIndent, trbl);
|
||||
}
|
||||
|
||||
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
|
||||
|
||||
nsAutoString buffer;
|
||||
mBorderRadius.AppendToString(buffer, eCSSProperty__moz_border_radius);
|
||||
mOutlineWidth.AppendToString(buffer, eCSSProperty_outline_width);
|
||||
mOutlineColor.AppendToString(buffer, eCSSProperty_outline_color);
|
||||
mOutlineStyle.AppendToString(buffer, eCSSProperty_outline_style);
|
||||
@ -1362,14 +1371,29 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
CSS_ENSURE(Margin) {
|
||||
CSS_ENSURE_RECT(mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft = aValue; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
CSS_ENSURE(Margin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: mMargin->mBorderRadius = aValue; break;
|
||||
case eCSSProperty_outline_width: mMargin->mOutlineWidth = aValue; break;
|
||||
case eCSSProperty_outline_color: mMargin->mOutlineColor = aValue; break;
|
||||
case eCSSProperty_outline_style: mMargin->mOutlineStyle = aValue; break;
|
||||
@ -1629,6 +1653,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't append shorthand properties");
|
||||
// default: // XXX explicitly removing default case so compiler will help find missed props
|
||||
case eCSSProperty_UNKNOWN:
|
||||
@ -2015,7 +2040,27 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if (nsnull != mMargin) {
|
||||
if (nsnull != mMargin->mBorderRadius) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
CSS_ENSURE_RECT(mImportant->mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topLeft, mMargin->mBorderRadius->mTop);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topRight, mMargin->mBorderRadius->mRight);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomRight, mMargin->mBorderRadius->mBottom);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomLeft, mMargin->mBorderRadius->mLeft);
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
@ -2023,7 +2068,6 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
if (nsnull != mMargin) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius, mMargin->mBorderRadius);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_width, mMargin->mOutlineWidth);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_color, mMargin->mOutlineColor);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_style, mMargin->mOutlineStyle);
|
||||
@ -2422,6 +2466,12 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
SetValueImportant(eCSSProperty_border_bottom_width);
|
||||
SetValueImportant(eCSSProperty_border_left_width);
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topLeft);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomLeft);
|
||||
break;
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
break;
|
||||
@ -2691,14 +2741,30 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if ((nsnull != mMargin) && (nsnull != mMargin->mBorderRadius)) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: aValue = mMargin->mBorderRadius->mTop; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: aValue = mMargin->mBorderRadius->mRight; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: aValue = mMargin->mBorderRadius->mBottom; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: aValue = mMargin->mBorderRadius->mLeft; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
else {
|
||||
aValue.Reset();
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
if (nsnull != mMargin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: aValue = mMargin->mBorderRadius; break;
|
||||
case eCSSProperty_outline_width: aValue = mMargin->mOutlineWidth; break;
|
||||
case eCSSProperty_outline_color: aValue = mMargin->mOutlineColor; break;
|
||||
case eCSSProperty_outline_style: aValue = mMargin->mOutlineStyle; break;
|
||||
@ -2981,6 +3047,7 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't query for shorthand properties");
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -3344,6 +3411,14 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsString& aValue)
|
||||
AppendValueToString(eCSSProperty_border_left_style, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
if (HAS_RECT(mMargin,mBorderRadius)) {
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topLeft, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomLeft, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty_border_width:
|
||||
if (HAS_RECT(mMargin,mBorderWidth)) {
|
||||
AppendValueToString(eCSSProperty_border_top_width, aValue); aValue.Append(' ');
|
||||
|
||||
@ -205,6 +205,7 @@ protected:
|
||||
const nsCSSProperty aPropIDs[], PRInt32& aChangeHint);
|
||||
PRBool ParseBorderStyle(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseBorderWidth(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseBorderRadius(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseClip(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseContent(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseCounterData(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
@ -2632,6 +2633,8 @@ PRBool CSSParserImpl::ParseProperty(PRInt32& aErrorCode,
|
||||
return ParseBorderSide(aErrorCode, aDeclaration, kBorderTopIDs, aChangeHint);
|
||||
case eCSSProperty_border_width:
|
||||
return ParseBorderWidth(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty__moz_border_radius:
|
||||
return ParseBorderRadius(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty_clip:
|
||||
return ParseClip(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty_content:
|
||||
@ -2814,7 +2817,10 @@ PRBool CSSParserImpl::ParseSingleValueProperty(PRInt32& aErrorCode,
|
||||
case eCSSProperty_border_top_width:
|
||||
return ParseVariant(aErrorCode, aValue, VARIANT_HKL,
|
||||
nsCSSProps::kBorderWidthKTable);
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);
|
||||
case eCSSProperty_bottom:
|
||||
case eCSSProperty_top:
|
||||
@ -3290,6 +3296,12 @@ static const nsCSSProperty kBorderColorIDs[] = {
|
||||
eCSSProperty_border_bottom_color,
|
||||
eCSSProperty_border_left_color
|
||||
};
|
||||
static const nsCSSProperty kBorderRadiusIDs[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
|
||||
PRBool CSSParserImpl::ParseBorder(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
@ -3406,6 +3418,13 @@ PRBool CSSParserImpl::ParseBorderWidth(PRInt32& aErrorCode, nsICSSDeclaration* a
|
||||
return ParseBoxProperties(aErrorCode, aDeclaration, kBorderWidthIDs, aChangeHint);
|
||||
}
|
||||
|
||||
PRBool CSSParserImpl::ParseBorderRadius(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
{
|
||||
return ParseBoxProperties(aErrorCode, aDeclaration, kBorderRadiusIDs, aChangeHint);
|
||||
}
|
||||
|
||||
|
||||
PRBool CSSParserImpl::ParseClip(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
{
|
||||
|
||||
@ -43,6 +43,10 @@
|
||||
|
||||
|
||||
CSS_PROP(_moz_border_radius, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topRight, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomRight, VISUAL)
|
||||
CSS_PROP(azimuth, AURAL)
|
||||
CSS_PROP(background, VISUAL)
|
||||
CSS_PROP(background_attachment, VISUAL)
|
||||
|
||||
@ -1997,9 +1997,26 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
|
||||
}
|
||||
}
|
||||
|
||||
// -moz-border-radius: length, inherit
|
||||
if (! SetCoord(ourMargin->mBorderRadius, spacing->mBorderRadius, parentSpacing->mBorderRadius,
|
||||
SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
// -moz-border-radius: length, percent, inherit
|
||||
if (nsnull != ourMargin->mBorderRadius) {
|
||||
nsStyleCoord coord;
|
||||
nsStyleCoord parentCoord;
|
||||
parentSpacing->mBorderRadius.GetLeft(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetLeft(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetTop(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetTop(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetRight(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetRight(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetBottom(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetBottom(coord);
|
||||
}
|
||||
}
|
||||
|
||||
// outline-width: length, enum, inherit
|
||||
|
||||
@ -215,7 +215,7 @@ struct nsCSSMargin : public nsCSSStruct {
|
||||
nsCSSRect* mBorderWidth;
|
||||
nsCSSRect* mBorderColor;
|
||||
nsCSSRect* mBorderStyle;
|
||||
nsCSSValue mBorderRadius; // (extension)
|
||||
nsCSSRect* mBorderRadius; // (extension)
|
||||
nsCSSValue mOutlineWidth;
|
||||
nsCSSValue mOutlineColor;
|
||||
nsCSSValue mOutlineStyle;
|
||||
|
||||
@ -374,14 +374,13 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
|
||||
|
||||
nsCSSMargin::nsCSSMargin(void)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull)
|
||||
{
|
||||
}
|
||||
|
||||
nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull),
|
||||
mBorderRadius(aCopy.mBorderRadius),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull),
|
||||
mOutlineWidth(aCopy.mOutlineWidth),
|
||||
mOutlineColor(aCopy.mOutlineColor),
|
||||
mOutlineStyle(aCopy.mOutlineStyle),
|
||||
@ -392,6 +391,7 @@ nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
CSS_IF_COPY(mBorderWidth, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderColor, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderStyle, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderRadius, nsCSSRect);
|
||||
}
|
||||
|
||||
nsCSSMargin::~nsCSSMargin(void)
|
||||
@ -401,6 +401,7 @@ nsCSSMargin::~nsCSSMargin(void)
|
||||
CSS_IF_DELETE(mBorderWidth);
|
||||
CSS_IF_DELETE(mBorderColor);
|
||||
CSS_IF_DELETE(mBorderStyle);
|
||||
CSS_IF_DELETE(mBorderRadius);
|
||||
}
|
||||
|
||||
const nsID& nsCSSMargin::GetID(void)
|
||||
@ -443,11 +444,19 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
|
||||
if (nsnull != mBorderStyle) {
|
||||
mBorderStyle->List(out, eCSSProperty_border_style, aIndent);
|
||||
}
|
||||
if (nsnull != mBorderRadius) {
|
||||
static const nsCSSProperty trbl[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
mBorderRadius->List(out, aIndent, trbl);
|
||||
}
|
||||
|
||||
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
|
||||
|
||||
nsAutoString buffer;
|
||||
mBorderRadius.AppendToString(buffer, eCSSProperty__moz_border_radius);
|
||||
mOutlineWidth.AppendToString(buffer, eCSSProperty_outline_width);
|
||||
mOutlineColor.AppendToString(buffer, eCSSProperty_outline_color);
|
||||
mOutlineStyle.AppendToString(buffer, eCSSProperty_outline_style);
|
||||
@ -1362,14 +1371,29 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
CSS_ENSURE(Margin) {
|
||||
CSS_ENSURE_RECT(mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft = aValue; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
CSS_ENSURE(Margin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: mMargin->mBorderRadius = aValue; break;
|
||||
case eCSSProperty_outline_width: mMargin->mOutlineWidth = aValue; break;
|
||||
case eCSSProperty_outline_color: mMargin->mOutlineColor = aValue; break;
|
||||
case eCSSProperty_outline_style: mMargin->mOutlineStyle = aValue; break;
|
||||
@ -1629,6 +1653,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't append shorthand properties");
|
||||
// default: // XXX explicitly removing default case so compiler will help find missed props
|
||||
case eCSSProperty_UNKNOWN:
|
||||
@ -2015,7 +2040,27 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if (nsnull != mMargin) {
|
||||
if (nsnull != mMargin->mBorderRadius) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
CSS_ENSURE_RECT(mImportant->mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topLeft, mMargin->mBorderRadius->mTop);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topRight, mMargin->mBorderRadius->mRight);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomRight, mMargin->mBorderRadius->mBottom);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomLeft, mMargin->mBorderRadius->mLeft);
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
@ -2023,7 +2068,6 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
if (nsnull != mMargin) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius, mMargin->mBorderRadius);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_width, mMargin->mOutlineWidth);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_color, mMargin->mOutlineColor);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_style, mMargin->mOutlineStyle);
|
||||
@ -2422,6 +2466,12 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
SetValueImportant(eCSSProperty_border_bottom_width);
|
||||
SetValueImportant(eCSSProperty_border_left_width);
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topLeft);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomLeft);
|
||||
break;
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
break;
|
||||
@ -2691,14 +2741,30 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if ((nsnull != mMargin) && (nsnull != mMargin->mBorderRadius)) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: aValue = mMargin->mBorderRadius->mTop; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: aValue = mMargin->mBorderRadius->mRight; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: aValue = mMargin->mBorderRadius->mBottom; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: aValue = mMargin->mBorderRadius->mLeft; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
else {
|
||||
aValue.Reset();
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
if (nsnull != mMargin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: aValue = mMargin->mBorderRadius; break;
|
||||
case eCSSProperty_outline_width: aValue = mMargin->mOutlineWidth; break;
|
||||
case eCSSProperty_outline_color: aValue = mMargin->mOutlineColor; break;
|
||||
case eCSSProperty_outline_style: aValue = mMargin->mOutlineStyle; break;
|
||||
@ -2981,6 +3047,7 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't query for shorthand properties");
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -3344,6 +3411,14 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsString& aValue)
|
||||
AppendValueToString(eCSSProperty_border_left_style, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
if (HAS_RECT(mMargin,mBorderRadius)) {
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topLeft, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomLeft, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty_border_width:
|
||||
if (HAS_RECT(mMargin,mBorderWidth)) {
|
||||
AppendValueToString(eCSSProperty_border_top_width, aValue); aValue.Append(' ');
|
||||
|
||||
@ -205,6 +205,7 @@ protected:
|
||||
const nsCSSProperty aPropIDs[], PRInt32& aChangeHint);
|
||||
PRBool ParseBorderStyle(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseBorderWidth(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseBorderRadius(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseClip(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseContent(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration, PRInt32& aChangeHint);
|
||||
PRBool ParseCounterData(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
@ -2632,6 +2633,8 @@ PRBool CSSParserImpl::ParseProperty(PRInt32& aErrorCode,
|
||||
return ParseBorderSide(aErrorCode, aDeclaration, kBorderTopIDs, aChangeHint);
|
||||
case eCSSProperty_border_width:
|
||||
return ParseBorderWidth(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty__moz_border_radius:
|
||||
return ParseBorderRadius(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty_clip:
|
||||
return ParseClip(aErrorCode, aDeclaration, aChangeHint);
|
||||
case eCSSProperty_content:
|
||||
@ -2814,7 +2817,10 @@ PRBool CSSParserImpl::ParseSingleValueProperty(PRInt32& aErrorCode,
|
||||
case eCSSProperty_border_top_width:
|
||||
return ParseVariant(aErrorCode, aValue, VARIANT_HKL,
|
||||
nsCSSProps::kBorderWidthKTable);
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
return ParseVariant(aErrorCode, aValue, VARIANT_HLP, nsnull);
|
||||
case eCSSProperty_bottom:
|
||||
case eCSSProperty_top:
|
||||
@ -3290,6 +3296,12 @@ static const nsCSSProperty kBorderColorIDs[] = {
|
||||
eCSSProperty_border_bottom_color,
|
||||
eCSSProperty_border_left_color
|
||||
};
|
||||
static const nsCSSProperty kBorderRadiusIDs[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
|
||||
PRBool CSSParserImpl::ParseBorder(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
@ -3406,6 +3418,13 @@ PRBool CSSParserImpl::ParseBorderWidth(PRInt32& aErrorCode, nsICSSDeclaration* a
|
||||
return ParseBoxProperties(aErrorCode, aDeclaration, kBorderWidthIDs, aChangeHint);
|
||||
}
|
||||
|
||||
PRBool CSSParserImpl::ParseBorderRadius(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
{
|
||||
return ParseBoxProperties(aErrorCode, aDeclaration, kBorderRadiusIDs, aChangeHint);
|
||||
}
|
||||
|
||||
|
||||
PRBool CSSParserImpl::ParseClip(PRInt32& aErrorCode, nsICSSDeclaration* aDeclaration,
|
||||
PRInt32& aChangeHint)
|
||||
{
|
||||
|
||||
@ -43,6 +43,10 @@
|
||||
|
||||
|
||||
CSS_PROP(_moz_border_radius, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_topRight, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomLeft, VISUAL)
|
||||
CSS_PROP(_moz_border_radius_bottomRight, VISUAL)
|
||||
CSS_PROP(azimuth, AURAL)
|
||||
CSS_PROP(background, VISUAL)
|
||||
CSS_PROP(background_attachment, VISUAL)
|
||||
|
||||
@ -374,14 +374,13 @@ void nsCSSDisplay::List(FILE* out, PRInt32 aIndent) const
|
||||
|
||||
nsCSSMargin::nsCSSMargin(void)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull)
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull)
|
||||
{
|
||||
}
|
||||
|
||||
nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
: mMargin(nsnull), mPadding(nsnull),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull),
|
||||
mBorderRadius(aCopy.mBorderRadius),
|
||||
mBorderWidth(nsnull), mBorderColor(nsnull), mBorderStyle(nsnull), mBorderRadius(nsnull),
|
||||
mOutlineWidth(aCopy.mOutlineWidth),
|
||||
mOutlineColor(aCopy.mOutlineColor),
|
||||
mOutlineStyle(aCopy.mOutlineStyle),
|
||||
@ -392,6 +391,7 @@ nsCSSMargin::nsCSSMargin(const nsCSSMargin& aCopy)
|
||||
CSS_IF_COPY(mBorderWidth, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderColor, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderStyle, nsCSSRect);
|
||||
CSS_IF_COPY(mBorderRadius, nsCSSRect);
|
||||
}
|
||||
|
||||
nsCSSMargin::~nsCSSMargin(void)
|
||||
@ -401,6 +401,7 @@ nsCSSMargin::~nsCSSMargin(void)
|
||||
CSS_IF_DELETE(mBorderWidth);
|
||||
CSS_IF_DELETE(mBorderColor);
|
||||
CSS_IF_DELETE(mBorderStyle);
|
||||
CSS_IF_DELETE(mBorderRadius);
|
||||
}
|
||||
|
||||
const nsID& nsCSSMargin::GetID(void)
|
||||
@ -443,11 +444,19 @@ void nsCSSMargin::List(FILE* out, PRInt32 aIndent) const
|
||||
if (nsnull != mBorderStyle) {
|
||||
mBorderStyle->List(out, eCSSProperty_border_style, aIndent);
|
||||
}
|
||||
if (nsnull != mBorderRadius) {
|
||||
static const nsCSSProperty trbl[] = {
|
||||
eCSSProperty__moz_border_radius_topLeft,
|
||||
eCSSProperty__moz_border_radius_topRight,
|
||||
eCSSProperty__moz_border_radius_bottomRight,
|
||||
eCSSProperty__moz_border_radius_bottomLeft
|
||||
};
|
||||
mBorderRadius->List(out, aIndent, trbl);
|
||||
}
|
||||
|
||||
for (PRInt32 index = aIndent; --index >= 0; ) fputs(" ", out);
|
||||
|
||||
nsAutoString buffer;
|
||||
mBorderRadius.AppendToString(buffer, eCSSProperty__moz_border_radius);
|
||||
mOutlineWidth.AppendToString(buffer, eCSSProperty_outline_width);
|
||||
mOutlineColor.AppendToString(buffer, eCSSProperty_outline_color);
|
||||
mOutlineStyle.AppendToString(buffer, eCSSProperty_outline_style);
|
||||
@ -1362,14 +1371,29 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
CSS_ENSURE(Margin) {
|
||||
CSS_ENSURE_RECT(mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: mMargin->mBorderRadius->mTop = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: mMargin->mBorderRadius->mRight = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: mMargin->mBorderRadius->mBottom = aValue; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: mMargin->mBorderRadius->mLeft = aValue; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
CSS_ENSURE(Margin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: mMargin->mBorderRadius = aValue; break;
|
||||
case eCSSProperty_outline_width: mMargin->mOutlineWidth = aValue; break;
|
||||
case eCSSProperty_outline_color: mMargin->mOutlineColor = aValue; break;
|
||||
case eCSSProperty_outline_style: mMargin->mOutlineStyle = aValue; break;
|
||||
@ -1629,6 +1653,7 @@ CSSDeclarationImpl::AppendValue(nsCSSProperty aProperty, const nsCSSValue& aValu
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't append shorthand properties");
|
||||
// default: // XXX explicitly removing default case so compiler will help find missed props
|
||||
case eCSSProperty_UNKNOWN:
|
||||
@ -2015,7 +2040,27 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if (nsnull != mMargin) {
|
||||
if (nsnull != mMargin->mBorderRadius) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
CSS_ENSURE_RECT(mImportant->mMargin->mBorderRadius) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topLeft, mMargin->mBorderRadius->mTop);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_topRight, mMargin->mBorderRadius->mRight);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomRight, mMargin->mBorderRadius->mBottom);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius_bottomLeft, mMargin->mBorderRadius->mLeft);
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
@ -2023,7 +2068,6 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
if (nsnull != mMargin) {
|
||||
CSS_ENSURE_IMPORTANT(Margin) {
|
||||
switch (aProperty) {
|
||||
CSS_CASE_IMPORTANT(eCSSProperty__moz_border_radius, mMargin->mBorderRadius);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_width, mMargin->mOutlineWidth);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_color, mMargin->mOutlineColor);
|
||||
CSS_CASE_IMPORTANT(eCSSProperty_outline_style, mMargin->mOutlineStyle);
|
||||
@ -2422,6 +2466,12 @@ CSSDeclarationImpl::SetValueImportant(nsCSSProperty aProperty)
|
||||
SetValueImportant(eCSSProperty_border_bottom_width);
|
||||
SetValueImportant(eCSSProperty_border_left_width);
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topLeft);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_topRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomRight);
|
||||
SetValueImportant(eCSSProperty__moz_border_radius_bottomLeft);
|
||||
break;
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
break;
|
||||
@ -2691,14 +2741,30 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty__moz_border_radius:
|
||||
case eCSSProperty__moz_border_radius_topLeft:
|
||||
case eCSSProperty__moz_border_radius_topRight:
|
||||
case eCSSProperty__moz_border_radius_bottomRight:
|
||||
case eCSSProperty__moz_border_radius_bottomLeft:
|
||||
if ((nsnull != mMargin) && (nsnull != mMargin->mBorderRadius)) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius_topLeft: aValue = mMargin->mBorderRadius->mTop; break;
|
||||
case eCSSProperty__moz_border_radius_topRight: aValue = mMargin->mBorderRadius->mRight; break;
|
||||
case eCSSProperty__moz_border_radius_bottomRight: aValue = mMargin->mBorderRadius->mBottom; break;
|
||||
case eCSSProperty__moz_border_radius_bottomLeft: aValue = mMargin->mBorderRadius->mLeft; break;
|
||||
CSS_BOGUS_DEFAULT; // make compiler happy
|
||||
}
|
||||
}
|
||||
else {
|
||||
aValue.Reset();
|
||||
}
|
||||
break;
|
||||
|
||||
case eCSSProperty_outline_width:
|
||||
case eCSSProperty_outline_color:
|
||||
case eCSSProperty_outline_style:
|
||||
case eCSSProperty_float_edge:
|
||||
if (nsnull != mMargin) {
|
||||
switch (aProperty) {
|
||||
case eCSSProperty__moz_border_radius: aValue = mMargin->mBorderRadius; break;
|
||||
case eCSSProperty_outline_width: aValue = mMargin->mOutlineWidth; break;
|
||||
case eCSSProperty_outline_color: aValue = mMargin->mOutlineColor; break;
|
||||
case eCSSProperty_outline_style: aValue = mMargin->mOutlineStyle; break;
|
||||
@ -2981,6 +3047,7 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsCSSValue& aValue)
|
||||
case eCSSProperty_border_color:
|
||||
case eCSSProperty_border_style:
|
||||
case eCSSProperty_border_width:
|
||||
case eCSSProperty__moz_border_radius:
|
||||
NS_ERROR("can't query for shorthand properties");
|
||||
default:
|
||||
result = NS_ERROR_ILLEGAL_VALUE;
|
||||
@ -3344,6 +3411,14 @@ CSSDeclarationImpl::GetValue(nsCSSProperty aProperty, nsString& aValue)
|
||||
AppendValueToString(eCSSProperty_border_left_style, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty__moz_border_radius:
|
||||
if (HAS_RECT(mMargin,mBorderRadius)) {
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topLeft, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_topRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomRight, aValue); aValue.Append(' ');
|
||||
AppendValueToString(eCSSProperty__moz_border_radius_bottomLeft, aValue);
|
||||
}
|
||||
break;
|
||||
case eCSSProperty_border_width:
|
||||
if (HAS_RECT(mMargin,mBorderWidth)) {
|
||||
AppendValueToString(eCSSProperty_border_top_width, aValue); aValue.Append(' ');
|
||||
|
||||
@ -1997,9 +1997,26 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
|
||||
}
|
||||
}
|
||||
|
||||
// -moz-border-radius: length, inherit
|
||||
if (! SetCoord(ourMargin->mBorderRadius, spacing->mBorderRadius, parentSpacing->mBorderRadius,
|
||||
SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
// -moz-border-radius: length, percent, inherit
|
||||
if (nsnull != ourMargin->mBorderRadius) {
|
||||
nsStyleCoord coord;
|
||||
nsStyleCoord parentCoord;
|
||||
parentSpacing->mBorderRadius.GetLeft(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mLeft, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetLeft(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetTop(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mTop, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetTop(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetRight(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mRight, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetRight(coord);
|
||||
}
|
||||
parentSpacing->mBorderRadius.GetBottom(parentCoord);
|
||||
if (SetCoord(ourMargin->mBorderRadius->mBottom, coord, parentCoord, SETCOORD_LPH, aFont->mFont, aPresContext)) {
|
||||
spacing->mBorderRadius.SetBottom(coord);
|
||||
}
|
||||
}
|
||||
|
||||
// outline-width: length, enum, inherit
|
||||
|
||||
@ -566,7 +566,7 @@ void StyleSpacingImpl::ResetFrom(const nsStyleSpacing* aParent, nsIPresContext*
|
||||
mBorderColor[2] = NS_RGB(0, 0, 0);
|
||||
mBorderColor[3] = NS_RGB(0, 0, 0);
|
||||
|
||||
mBorderRadius.SetCoordValue(0);
|
||||
mBorderRadius.Reset();
|
||||
|
||||
mOutlineWidth = medium;
|
||||
mOutlineStyle = NS_STYLE_BORDER_STYLE_NONE;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user