14448 'border' property not resetting 'border-color' to initial value. tested=dbaron/hixie

This commit is contained in:
pierre%netscape.com 2001-05-02 10:31:31 +00:00
Родитель 6371fbf24f
Коммит ed7431771d
8 изменённых файлов: 94 добавлений и 26 удалений

Просмотреть файл

@ -3953,8 +3953,8 @@ PRBool CSSParserImpl::ParseBorder(PRInt32& aErrorCode, nsICSSDeclaration* aDecla
values[1].SetNoneValue();
}
if (0 == (found & 4)) { // clear missing color values so color property will be used
values[2].Reset();
if (0 == (found & 4)) { // text color will be used
values[2].SetIntValue(NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR, eCSSUnit_Enumerated);
}
PRInt32 index;

Просмотреть файл

@ -2662,7 +2662,7 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsCSSRect* ourBorderColor = ourMargin->mBorderColor;
nscolor borderColor;
nscolor unused = NS_RGB(0,0,0);
// top
if (eCSSUnit_Inherit == ourBorderColor->mTop.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_TOP, borderColor)) {
border->SetBorderColor(NS_SIDE_TOP, borderColor);
@ -2675,9 +2675,17 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_TOP);
switch (ourBorderColor->mTop.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_TOP);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_TOP, ourColor->mColor);
break;
}
}
// right
if (eCSSUnit_Inherit == ourBorderColor->mRight.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
@ -2689,10 +2697,18 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
else if (SetColor(ourBorderColor->mRight, unused, aPresContext, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mRight.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_RIGHT);
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
switch (ourBorderColor->mRight.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_RIGHT);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_RIGHT, ourColor->mColor);
break;
}
}
// bottom
if (eCSSUnit_Inherit == ourBorderColor->mBottom.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
@ -2704,10 +2720,18 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
else if (SetColor(ourBorderColor->mBottom, unused, aPresContext, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mBottom.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_BOTTOM);
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
switch (ourBorderColor->mBottom.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_BOTTOM);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_BOTTOM, ourColor->mColor);
break;
}
}
// left
if (eCSSUnit_Inherit == ourBorderColor->mLeft.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
@ -2719,8 +2743,16 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
else if (SetColor(ourBorderColor->mLeft, unused, aPresContext, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mLeft.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_LEFT);
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
switch (ourBorderColor->mLeft.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_LEFT);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_LEFT, ourColor->mColor);
break;
}
}
}

Просмотреть файл

@ -72,6 +72,7 @@ CSS_KEY(-moz-pre-wrap, _moz_pre_wrap)
CSS_KEY(-moz-scrollbars-none, _moz_scrollbars_none)
CSS_KEY(-moz-scrollbars-horizontal, _moz_scrollbars_horizontal)
CSS_KEY(-moz-scrollbars-vertical, _moz_scrollbars_vertical)
CSS_KEY(-moz-use-text-color, _moz_use_text_color)
CSS_KEY(-moz-xul-box, _moz_xul_box)
CSS_KEY(-moz-xul-inline-box, _moz_xul_inline_box)
CSS_KEY(-moz-xul-bulletinboard, _moz_xul_bulletinboard)

Просмотреть файл

@ -150,6 +150,7 @@ const PRInt32 nsCSSProps::kBorderCollapseKTable[] = {
const PRInt32 nsCSSProps::kBorderColorKTable[] = {
eCSSKeyword_transparent, NS_STYLE_COLOR_TRANSPARENT,
eCSSKeyword__moz_use_text_color, NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR,
-1,-1
};

Просмотреть файл

@ -72,6 +72,7 @@ CSS_KEY(-moz-pre-wrap, _moz_pre_wrap)
CSS_KEY(-moz-scrollbars-none, _moz_scrollbars_none)
CSS_KEY(-moz-scrollbars-horizontal, _moz_scrollbars_horizontal)
CSS_KEY(-moz-scrollbars-vertical, _moz_scrollbars_vertical)
CSS_KEY(-moz-use-text-color, _moz_use_text_color)
CSS_KEY(-moz-xul-box, _moz_xul_box)
CSS_KEY(-moz-xul-inline-box, _moz_xul_inline_box)
CSS_KEY(-moz-xul-bulletinboard, _moz_xul_bulletinboard)

Просмотреть файл

@ -3953,8 +3953,8 @@ PRBool CSSParserImpl::ParseBorder(PRInt32& aErrorCode, nsICSSDeclaration* aDecla
values[1].SetNoneValue();
}
if (0 == (found & 4)) { // clear missing color values so color property will be used
values[2].Reset();
if (0 == (found & 4)) { // text color will be used
values[2].SetIntValue(NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR, eCSSUnit_Enumerated);
}
PRInt32 index;

Просмотреть файл

@ -150,6 +150,7 @@ const PRInt32 nsCSSProps::kBorderCollapseKTable[] = {
const PRInt32 nsCSSProps::kBorderColorKTable[] = {
eCSSKeyword_transparent, NS_STYLE_COLOR_TRANSPARENT,
eCSSKeyword__moz_use_text_color, NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR,
-1,-1
};

Просмотреть файл

@ -2662,7 +2662,7 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
nsCSSRect* ourBorderColor = ourMargin->mBorderColor;
nscolor borderColor;
nscolor unused = NS_RGB(0,0,0);
// top
if (eCSSUnit_Inherit == ourBorderColor->mTop.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_TOP, borderColor)) {
border->SetBorderColor(NS_SIDE_TOP, borderColor);
@ -2675,9 +2675,17 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
border->SetBorderColor(NS_SIDE_TOP, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_TOP);
switch (ourBorderColor->mTop.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_TOP);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_TOP, ourColor->mColor);
break;
}
}
// right
if (eCSSUnit_Inherit == ourBorderColor->mRight.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_RIGHT, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
@ -2689,10 +2697,18 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
else if (SetColor(ourBorderColor->mRight, unused, aPresContext, borderColor)) {
border->SetBorderColor(NS_SIDE_RIGHT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mRight.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_RIGHT);
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
switch (ourBorderColor->mRight.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_RIGHT);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_RIGHT, ourColor->mColor);
break;
}
}
// bottom
if (eCSSUnit_Inherit == ourBorderColor->mBottom.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_BOTTOM, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
@ -2704,10 +2720,18 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
else if (SetColor(ourBorderColor->mBottom, unused, aPresContext, borderColor)) {
border->SetBorderColor(NS_SIDE_BOTTOM, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mBottom.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_BOTTOM);
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
switch (ourBorderColor->mBottom.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_BOTTOM);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_BOTTOM, ourColor->mColor);
break;
}
}
// left
if (eCSSUnit_Inherit == ourBorderColor->mLeft.GetUnit()) {
if (parentBorder->GetBorderColor(NS_SIDE_LEFT, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
@ -2719,8 +2743,16 @@ MapDeclarationMarginInto(nsICSSDeclaration* aDeclaration,
else if (SetColor(ourBorderColor->mLeft, unused, aPresContext, borderColor)) {
border->SetBorderColor(NS_SIDE_LEFT, borderColor);
}
else if (eCSSUnit_Enumerated == ourBorderColor->mLeft.GetUnit()) {
border->SetBorderTransparent(NS_SIDE_LEFT);
else if (eCSSUnit_Enumerated == ourBorderColor->mTop.GetUnit()) {
switch (ourBorderColor->mLeft.GetIntValue()) {
case NS_STYLE_COLOR_TRANSPARENT:
border->SetBorderTransparent(NS_SIDE_LEFT);
break;
case NS_STYLE_COLOR_MOZ_USE_TEXT_COLOR:
const nsStyleColor* ourColor = (const nsStyleColor*)aContext->GetStyleData(eStyleStruct_Color);
border->SetBorderColor(NS_SIDE_LEFT, ourColor->mColor);
break;
}
}
}