Introduce 2 CSS values for color property and 1 for text-decoration retrieving the pref for anchors' color, visited anchors' color, and underline or not the anchors; b=57757, r=brade, sr=bzbarsky

This commit is contained in:
glazman%netscape.com 2002-08-06 14:39:55 +00:00
Родитель a38f7cdca4
Коммит 84869edbfb
11 изменённых файлов: 106 добавлений и 16 удалений

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

@ -354,13 +354,33 @@ static PRBool SetColor(const nsCSSValue& aValue, const nscolor aParentColor,
}
}
else if (eCSSUnit_Integer == unit) {
nsILookAndFeel* look = nsnull;
if (NS_SUCCEEDED(aPresContext->GetLookAndFeel(&look)) && look) {
nsILookAndFeel::nsColorID colorID = (nsILookAndFeel::nsColorID)aValue.GetIntValue();
if (NS_SUCCEEDED(look->GetColor(colorID, aResult))) {
result = PR_TRUE;
PRInt32 intValue = aValue.GetIntValue();
if (0 <= intValue) {
nsILookAndFeel* look = nsnull;
if (NS_SUCCEEDED(aPresContext->GetLookAndFeel(&look)) && look) {
nsILookAndFeel::nsColorID colorID = (nsILookAndFeel::nsColorID) intValue;
if (NS_SUCCEEDED(look->GetColor(colorID, aResult))) {
result = PR_TRUE;
}
NS_RELEASE(look);
}
}
else {
switch (intValue) {
case NS_COLOR_MOZ_HYPERLINKTEXT:
if (NS_SUCCEEDED(aPresContext->GetDefaultLinkColor(&aResult))) {
result = PR_TRUE;
}
break;
case NS_COLOR_MOZ_VISITEDHYPERLINKTEXT:
if (NS_SUCCEEDED(aPresContext->GetDefaultVisitedLinkColor(&aResult))) {
result = PR_TRUE;
}
break;
default:
NS_NOTREACHED("Should never have an unknown negative colorID.");
break;
}
NS_RELEASE(look);
}
}
else if (eCSSUnit_Inherit == unit) {
@ -2407,6 +2427,18 @@ nsRuleNode::ComputeTextResetData(nsStyleStruct* aStartData, const nsCSSStruct& a
if (eCSSUnit_Enumerated == textData.mDecoration.GetUnit()) {
PRInt32 td = textData.mDecoration.GetIntValue();
text->mTextDecoration = td;
if (td & NS_STYLE_TEXT_DECORATION_PREF_ANCHORS) {
PRBool underlineLinks = PR_TRUE;
nsresult res = mPresContext->GetCachedBoolPref(kPresContext_UnderlineLinks, underlineLinks);
if (NS_SUCCEEDED(res)) {
if (underlineLinks) {
text->mTextDecoration |= NS_STYLE_TEXT_DECORATION_UNDERLINE;
}
else {
text->mTextDecoration &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE;
}
}
}
}
else if (eCSSUnit_None == textData.mDecoration.GetUnit()) {
text->mTextDecoration = NS_STYLE_TEXT_DECORATION_NONE;

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

@ -65,6 +65,7 @@
CSS_KEY(-moz-alias, _moz_alias)
CSS_KEY(-moz-all, _moz_all)
CSS_KEY(-moz-anchor-decoration, _moz_anchor_decoration)
CSS_KEY(-moz-arabic-indic, _moz_arabic_indic)
CSS_KEY(-moz-bengali, _moz_bengali)
CSS_KEY(-moz-bg-inset, _moz_bg_inset)
@ -106,6 +107,7 @@ CSS_KEY(-moz-gujarati, _moz_gujarati)
CSS_KEY(-moz-gurmukhi, _moz_gurmukhi)
CSS_KEY(-moz-hangul-consonant, _moz_hangul_consonant)
CSS_KEY(-moz-hangul, _moz_hangul)
CSS_KEY(-moz-hyperlinktext, _moz_hyperlinktext)
CSS_KEY(-moz-info, _moz_info)
CSS_KEY(-moz-initial, _moz_initial)
CSS_KEY(-moz-inline-block, _moz_inline_block)
@ -156,6 +158,7 @@ CSS_KEY(-moz-trad-chinese-formal, _moz_trad_chinese_formal)
CSS_KEY(-moz-trad-chinese-informal, _moz_trad_chinese_informal)
CSS_KEY(-moz-urdu, _moz_urdu)
CSS_KEY(-moz-use-text-color, _moz_use_text_color)
CSS_KEY(-moz-visitedhyperlinktext, _moz_visitedhyperlinktext)
CSS_KEY(-moz-window, _moz_window)
CSS_KEY(-moz-workspace, _moz_workspace)
CSS_KEY(above, above)

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

@ -320,6 +320,7 @@ const PRInt32 nsCSSProps::kColorKTable[] = {
eCSSKeyword__moz_dialog, nsILookAndFeel::eColor__moz_dialog,
eCSSKeyword__moz_dialogtext, nsILookAndFeel::eColor__moz_dialogtext,
eCSSKeyword__moz_dragtargetzone, nsILookAndFeel::eColor__moz_dragtargetzone,
eCSSKeyword__moz_hyperlinktext, NS_COLOR_MOZ_HYPERLINKTEXT,
eCSSKeyword__moz_mac_focusring, nsILookAndFeel::eColor__moz_mac_focusring,
eCSSKeyword__moz_mac_menuselect, nsILookAndFeel::eColor__moz_mac_menuselect,
eCSSKeyword__moz_mac_menushadow, nsILookAndFeel::eColor__moz_mac_menushadow,
@ -331,6 +332,7 @@ const PRInt32 nsCSSProps::kColorKTable[] = {
eCSSKeyword__moz_mac_accentregularshadow, nsILookAndFeel::eColor__moz_mac_accentregularshadow,
eCSSKeyword__moz_mac_accentdarkshadow, nsILookAndFeel::eColor__moz_mac_accentdarkshadow,
eCSSKeyword__moz_mac_accentdarkestshadow, nsILookAndFeel::eColor__moz_mac_accentdarkestshadow,
eCSSKeyword__moz_visitedhyperlinktext, NS_COLOR_MOZ_VISITEDHYPERLINKTEXT,
-1,-1
};
@ -700,6 +702,7 @@ const PRInt32 nsCSSProps::kTextDecorationKTable[] = {
eCSSKeyword_overline, NS_STYLE_TEXT_DECORATION_OVERLINE,
eCSSKeyword_line_through, NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
eCSSKeyword_blink, NS_STYLE_TEXT_DECORATION_BLINK,
eCSSKeyword__moz_anchor_decoration, NS_STYLE_TEXT_DECORATION_PREF_ANCHORS,
-1,-1
};

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

@ -60,8 +60,8 @@ a:link img, a:visited img {
so we must set explicitly. This isn't good!
*/
a:link {
text-decoration: underline;
color: blue;
text-decoration: underline -moz-anchor-decoration;
color: -moz-hyperlinktext;
}
input, button, select, textarea {

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

@ -60,8 +60,8 @@ a:link img, a:visited img {
so we must set explicitly. This isn't good!
*/
a:link {
text-decoration: underline;
color: blue;
text-decoration: underline -moz-anchor-decoration;
color: -moz-hyperlinktext;
}
input, button, select, textarea {

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

@ -225,6 +225,10 @@
#define NS_STYLE_BG_REPEAT_Y 0x02
#define NS_STYLE_BG_REPEAT_XY 0x03
// See nsStyleColor
#define NS_COLOR_MOZ_HYPERLINKTEXT -1
#define NS_COLOR_MOZ_VISITEDHYPERLINKTEXT -2
// See nsStyleTable
#define NS_STYLE_BORDER_COLLAPSE 0
#define NS_STYLE_BORDER_SEPARATE 1
@ -527,6 +531,7 @@
#define NS_STYLE_TEXT_DECORATION_LINE_THROUGH NS_FONT_DECORATION_LINE_THROUGH
#define NS_STYLE_TEXT_DECORATION_BLINK 0x08
#define NS_STYLE_TEXT_DECORATION_OVERRIDE_ALL 0x10
#define NS_STYLE_TEXT_DECORATION_PREF_ANCHORS 0x20
// See nsStyleText
#define NS_STYLE_TEXT_TRANSFORM_NONE 0

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

@ -225,6 +225,10 @@
#define NS_STYLE_BG_REPEAT_Y 0x02
#define NS_STYLE_BG_REPEAT_XY 0x03
// See nsStyleColor
#define NS_COLOR_MOZ_HYPERLINKTEXT -1
#define NS_COLOR_MOZ_VISITEDHYPERLINKTEXT -2
// See nsStyleTable
#define NS_STYLE_BORDER_COLLAPSE 0
#define NS_STYLE_BORDER_SEPARATE 1
@ -527,6 +531,7 @@
#define NS_STYLE_TEXT_DECORATION_LINE_THROUGH NS_FONT_DECORATION_LINE_THROUGH
#define NS_STYLE_TEXT_DECORATION_BLINK 0x08
#define NS_STYLE_TEXT_DECORATION_OVERRIDE_ALL 0x10
#define NS_STYLE_TEXT_DECORATION_PREF_ANCHORS 0x20
// See nsStyleText
#define NS_STYLE_TEXT_TRANSFORM_NONE 0

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

@ -65,6 +65,7 @@
CSS_KEY(-moz-alias, _moz_alias)
CSS_KEY(-moz-all, _moz_all)
CSS_KEY(-moz-anchor-decoration, _moz_anchor_decoration)
CSS_KEY(-moz-arabic-indic, _moz_arabic_indic)
CSS_KEY(-moz-bengali, _moz_bengali)
CSS_KEY(-moz-bg-inset, _moz_bg_inset)
@ -106,6 +107,7 @@ CSS_KEY(-moz-gujarati, _moz_gujarati)
CSS_KEY(-moz-gurmukhi, _moz_gurmukhi)
CSS_KEY(-moz-hangul-consonant, _moz_hangul_consonant)
CSS_KEY(-moz-hangul, _moz_hangul)
CSS_KEY(-moz-hyperlinktext, _moz_hyperlinktext)
CSS_KEY(-moz-info, _moz_info)
CSS_KEY(-moz-initial, _moz_initial)
CSS_KEY(-moz-inline-block, _moz_inline_block)
@ -156,6 +158,7 @@ CSS_KEY(-moz-trad-chinese-formal, _moz_trad_chinese_formal)
CSS_KEY(-moz-trad-chinese-informal, _moz_trad_chinese_informal)
CSS_KEY(-moz-urdu, _moz_urdu)
CSS_KEY(-moz-use-text-color, _moz_use_text_color)
CSS_KEY(-moz-visitedhyperlinktext, _moz_visitedhyperlinktext)
CSS_KEY(-moz-window, _moz_window)
CSS_KEY(-moz-workspace, _moz_workspace)
CSS_KEY(above, above)

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

@ -320,6 +320,7 @@ const PRInt32 nsCSSProps::kColorKTable[] = {
eCSSKeyword__moz_dialog, nsILookAndFeel::eColor__moz_dialog,
eCSSKeyword__moz_dialogtext, nsILookAndFeel::eColor__moz_dialogtext,
eCSSKeyword__moz_dragtargetzone, nsILookAndFeel::eColor__moz_dragtargetzone,
eCSSKeyword__moz_hyperlinktext, NS_COLOR_MOZ_HYPERLINKTEXT,
eCSSKeyword__moz_mac_focusring, nsILookAndFeel::eColor__moz_mac_focusring,
eCSSKeyword__moz_mac_menuselect, nsILookAndFeel::eColor__moz_mac_menuselect,
eCSSKeyword__moz_mac_menushadow, nsILookAndFeel::eColor__moz_mac_menushadow,
@ -331,6 +332,7 @@ const PRInt32 nsCSSProps::kColorKTable[] = {
eCSSKeyword__moz_mac_accentregularshadow, nsILookAndFeel::eColor__moz_mac_accentregularshadow,
eCSSKeyword__moz_mac_accentdarkshadow, nsILookAndFeel::eColor__moz_mac_accentdarkshadow,
eCSSKeyword__moz_mac_accentdarkestshadow, nsILookAndFeel::eColor__moz_mac_accentdarkestshadow,
eCSSKeyword__moz_visitedhyperlinktext, NS_COLOR_MOZ_VISITEDHYPERLINKTEXT,
-1,-1
};
@ -700,6 +702,7 @@ const PRInt32 nsCSSProps::kTextDecorationKTable[] = {
eCSSKeyword_overline, NS_STYLE_TEXT_DECORATION_OVERLINE,
eCSSKeyword_line_through, NS_STYLE_TEXT_DECORATION_LINE_THROUGH,
eCSSKeyword_blink, NS_STYLE_TEXT_DECORATION_BLINK,
eCSSKeyword__moz_anchor_decoration, NS_STYLE_TEXT_DECORATION_PREF_ANCHORS,
-1,-1
};

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

@ -354,13 +354,33 @@ static PRBool SetColor(const nsCSSValue& aValue, const nscolor aParentColor,
}
}
else if (eCSSUnit_Integer == unit) {
nsILookAndFeel* look = nsnull;
if (NS_SUCCEEDED(aPresContext->GetLookAndFeel(&look)) && look) {
nsILookAndFeel::nsColorID colorID = (nsILookAndFeel::nsColorID)aValue.GetIntValue();
if (NS_SUCCEEDED(look->GetColor(colorID, aResult))) {
result = PR_TRUE;
PRInt32 intValue = aValue.GetIntValue();
if (0 <= intValue) {
nsILookAndFeel* look = nsnull;
if (NS_SUCCEEDED(aPresContext->GetLookAndFeel(&look)) && look) {
nsILookAndFeel::nsColorID colorID = (nsILookAndFeel::nsColorID) intValue;
if (NS_SUCCEEDED(look->GetColor(colorID, aResult))) {
result = PR_TRUE;
}
NS_RELEASE(look);
}
}
else {
switch (intValue) {
case NS_COLOR_MOZ_HYPERLINKTEXT:
if (NS_SUCCEEDED(aPresContext->GetDefaultLinkColor(&aResult))) {
result = PR_TRUE;
}
break;
case NS_COLOR_MOZ_VISITEDHYPERLINKTEXT:
if (NS_SUCCEEDED(aPresContext->GetDefaultVisitedLinkColor(&aResult))) {
result = PR_TRUE;
}
break;
default:
NS_NOTREACHED("Should never have an unknown negative colorID.");
break;
}
NS_RELEASE(look);
}
}
else if (eCSSUnit_Inherit == unit) {
@ -2407,6 +2427,18 @@ nsRuleNode::ComputeTextResetData(nsStyleStruct* aStartData, const nsCSSStruct& a
if (eCSSUnit_Enumerated == textData.mDecoration.GetUnit()) {
PRInt32 td = textData.mDecoration.GetIntValue();
text->mTextDecoration = td;
if (td & NS_STYLE_TEXT_DECORATION_PREF_ANCHORS) {
PRBool underlineLinks = PR_TRUE;
nsresult res = mPresContext->GetCachedBoolPref(kPresContext_UnderlineLinks, underlineLinks);
if (NS_SUCCEEDED(res)) {
if (underlineLinks) {
text->mTextDecoration |= NS_STYLE_TEXT_DECORATION_UNDERLINE;
}
else {
text->mTextDecoration &= ~NS_STYLE_TEXT_DECORATION_UNDERLINE;
}
}
}
}
else if (eCSSUnit_None == textData.mDecoration.GetUnit()) {
text->mTextDecoration = NS_STYLE_TEXT_DECORATION_NONE;

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

@ -57,6 +57,10 @@ public:
// When modifying this list, also modify nsXPLookAndFeel::sColorPrefs
// in widget/src/xpwidgts/nsXPLookAndFeel.cpp.
typedef enum {
// WARNING : NO NEGATIVE VALUE IN THIS ENUMERATION
// see patch in bug 57757 for more information
eColor_WindowBackground,
eColor_WindowForeground,
eColor_WidgetBackground,