static nsresult GetColorFromTheme(nsUXThemeClass cls, PRInt32 aPart, PRInt32 aState, PRInt32 aPropId, nscolor &aColor) { COLORREF color; HRESULT hr = nsUXThemeData::GetThemeColor(cls, aPart, aState, aPropId, &color); if (hr == S_OK) { aColor = COLOREF_2_NSRGB(color); return NS_OK; } return NS_ERROR_FAILURE; }
nsresult nsLookAndFeel::GetColorFromTheme(const PRUnichar* aClassList, void* aTheme, PRInt32 aPart, PRInt32 aState, PRInt32 aPropId, nscolor &aColor) { COLORREF color; HRESULT hr; hr = getThemeColor(aTheme, aPart, aState, aPropId, &color); // Since we don't get theme changed messages, check if we lost the handle if (hr == E_HANDLE) { closeTheme(aTheme); aTheme = openTheme(NULL, (LPCWSTR)aClassList); hr = getThemeColor(aTheme, aPart, aState, aPropId, &color); } if (hr == S_OK) { aColor = COLOREF_2_NSRGB(color); return NS_OK; } return NS_ERROR_FAILURE; }
nsresult nsLookAndFeel::NativeGetColor(const nsColorID aID, nscolor &aColor) { nsresult res = NS_OK; int idx; switch (aID) { case eColor_WindowBackground: idx = COLOR_WINDOW; break; case eColor_WindowForeground: idx = COLOR_WINDOWTEXT; break; case eColor_WidgetBackground: idx = COLOR_BTNFACE; break; case eColor_WidgetForeground: idx = COLOR_BTNTEXT; break; case eColor_WidgetSelectBackground: idx = COLOR_HIGHLIGHT; break; case eColor_WidgetSelectForeground: idx = COLOR_HIGHLIGHTTEXT; break; case eColor_Widget3DHighlight: idx = COLOR_BTNHIGHLIGHT; break; case eColor_Widget3DShadow: idx = COLOR_BTNSHADOW; break; case eColor_TextBackground: idx = COLOR_WINDOW; break; case eColor_TextForeground: idx = COLOR_WINDOWTEXT; break; case eColor_TextSelectBackground: case eColor_IMESelectedRawTextBackground: case eColor_IMESelectedConvertedTextBackground: idx = COLOR_HIGHLIGHT; break; case eColor_TextSelectForeground: case eColor_IMESelectedRawTextForeground: case eColor_IMESelectedConvertedTextForeground: idx = COLOR_HIGHLIGHTTEXT; break; case eColor_IMERawInputBackground: case eColor_IMEConvertedTextBackground: aColor = NS_TRANSPARENT; return NS_OK; case eColor_IMERawInputForeground: case eColor_IMEConvertedTextForeground: aColor = NS_SAME_AS_FOREGROUND_COLOR; return NS_OK; case eColor_IMERawInputUnderline: case eColor_IMEConvertedTextUnderline: aColor = NS_SAME_AS_FOREGROUND_COLOR; return NS_OK; case eColor_IMESelectedRawTextUnderline: case eColor_IMESelectedConvertedTextUnderline: aColor = NS_TRANSPARENT; return NS_OK; // New CSS 2 Color definitions case eColor_activeborder: idx = COLOR_ACTIVEBORDER; break; case eColor_activecaption: idx = COLOR_ACTIVECAPTION; break; case eColor_appworkspace: idx = COLOR_APPWORKSPACE; break; case eColor_background: idx = COLOR_BACKGROUND; break; case eColor_buttonface: case eColor__moz_buttonhoverface: idx = COLOR_BTNFACE; break; case eColor_buttonhighlight: idx = COLOR_BTNHIGHLIGHT; break; case eColor_buttonshadow: idx = COLOR_BTNSHADOW; break; case eColor_buttontext: case eColor__moz_buttonhovertext: idx = COLOR_BTNTEXT; break; case eColor_captiontext: idx = COLOR_CAPTIONTEXT; break; case eColor_graytext: idx = COLOR_GRAYTEXT; break; case eColor_highlight: case eColor__moz_html_cellhighlight: case eColor__moz_menuhover: idx = COLOR_HIGHLIGHT; break; case eColor__moz_menubarhovertext:OSVERSIONINFOEX: #ifndef WINCE if (GetWindowsVersion() < VISTA_VERSION || !isAppThemed()) #endif { // GetSystemParam will return 0 on failure and we get non-flat as // desired for Windows 2000 and sometimes on XP. idx = (GetSystemParam(SPI_GETFLATMENU, 0)) ? COLOR_HIGHLIGHTTEXT : COLOR_MENUTEXT; break; } // Fall through case eColor__moz_menuhovertext: #ifndef WINCE if (isAppThemed && isAppThemed() && GetWindowsVersion() >= VISTA_VERSION) { res = GetColorFromTheme(L"Menu", gMenuTheme, MENU_POPUPITEM, MPI_HOT, TMT_TEXTCOLOR, aColor); if (NS_SUCCEEDED(res)) return res; // fall through to highlight case } #endif case eColor_highlighttext: case eColor__moz_html_cellhighlighttext: idx = COLOR_HIGHLIGHTTEXT; break; case eColor_inactiveborder: idx = COLOR_INACTIVEBORDER; break; case eColor_inactivecaption: idx = COLOR_INACTIVECAPTION; break; case eColor_inactivecaptiontext: idx = COLOR_INACTIVECAPTIONTEXT; break; case eColor_infobackground: idx = COLOR_INFOBK; break; case eColor_infotext: idx = COLOR_INFOTEXT; break; case eColor_menu: idx = COLOR_MENU; break; case eColor_menutext: idx = COLOR_MENUTEXT; break; case eColor_scrollbar: idx = COLOR_SCROLLBAR; break; case eColor_threeddarkshadow: idx = COLOR_3DDKSHADOW; break; case eColor_threedface: idx = COLOR_3DFACE; break; case eColor_threedhighlight: idx = COLOR_3DHIGHLIGHT; break; case eColor_threedlightshadow: idx = COLOR_3DLIGHT; break; case eColor_threedshadow: idx = COLOR_3DSHADOW; break; case eColor_window: idx = COLOR_WINDOW; break; case eColor_windowframe: idx = COLOR_WINDOWFRAME; break; case eColor_windowtext: idx = COLOR_WINDOWTEXT; break; case eColor__moz_eventreerow: case eColor__moz_oddtreerow: case eColor__moz_field: idx = COLOR_WINDOW; break; case eColor__moz_fieldtext: idx = COLOR_WINDOWTEXT; break; case eColor__moz_dialog: case eColor__moz_cellhighlight: idx = COLOR_3DFACE; break; case eColor__moz_win_mediatext: #ifndef WINCE if (isAppThemed && isAppThemed() && GetWindowsVersion() >= VISTA_VERSION) { res = GetColorFromTheme(L"Media::Toolbar", gMediaToolbarTheme, TP_BUTTON, TS_NORMAL, TMT_TEXTCOLOR, aColor); if (NS_SUCCEEDED(res)) return res; } // if we've gotten here just return -moz-dialogtext instead #endif idx = COLOR_WINDOWTEXT; break; case eColor__moz_win_communicationstext: #ifndef WINCE if (isAppThemed && isAppThemed() && GetWindowsVersion() >= VISTA_VERSION) { res = GetColorFromTheme(L"Communications::Toolbar", gCommunicationsToolbarTheme, TP_BUTTON, TS_NORMAL, TMT_TEXTCOLOR, aColor); if (NS_SUCCEEDED(res)) return res; } // if we've gotten here just return -moz-dialogtext instead #endif idx = COLOR_WINDOWTEXT; break; case eColor__moz_dialogtext: case eColor__moz_cellhighlighttext: idx = COLOR_WINDOWTEXT; break; case eColor__moz_dragtargetzone: idx = COLOR_HIGHLIGHTTEXT; break; case eColor__moz_buttondefault: idx = COLOR_3DDKSHADOW; break; default: idx = COLOR_WINDOW; break; } DWORD color = ::GetSysColor(idx); aColor = COLOREF_2_NSRGB(color); return res; }
nsresult nsLookAndFeel::NativeGetColor(const nsColorID aID, nscolor &aColor) { nsresult res = NS_OK; int idx; switch (aID) { case eColor_WindowBackground: idx = COLOR_WINDOW; break; case eColor_WindowForeground: idx = COLOR_WINDOWTEXT; break; case eColor_WidgetBackground: idx = COLOR_BTNFACE; break; case eColor_WidgetForeground: idx = COLOR_BTNTEXT; break; case eColor_WidgetSelectBackground: idx = COLOR_HIGHLIGHT; break; case eColor_WidgetSelectForeground: idx = COLOR_HIGHLIGHTTEXT; break; case eColor_Widget3DHighlight: idx = COLOR_BTNHIGHLIGHT; break; case eColor_Widget3DShadow: idx = COLOR_BTNSHADOW; break; case eColor_TextBackground: idx = COLOR_WINDOW; break; case eColor_TextForeground: idx = COLOR_WINDOWTEXT; break; case eColor_TextSelectBackground: case eColor_IMESelectedRawTextBackground: case eColor_IMESelectedConvertedTextBackground: idx = COLOR_HIGHLIGHT; break; case eColor_TextSelectForeground: case eColor_IMESelectedRawTextForeground: case eColor_IMESelectedConvertedTextForeground: idx = COLOR_HIGHLIGHTTEXT; break; case eColor_IMERawInputBackground: case eColor_IMEConvertedTextBackground: aColor = NS_TRANSPARENT; return NS_OK; case eColor_IMERawInputForeground: case eColor_IMEConvertedTextForeground: aColor = NS_SAME_AS_FOREGROUND_COLOR; return NS_OK; case eColor_IMERawInputUnderline: case eColor_IMEConvertedTextUnderline: aColor = NS_SAME_AS_FOREGROUND_COLOR; return NS_OK; case eColor_IMESelectedRawTextUnderline: case eColor_IMESelectedConvertedTextUnderline: aColor = NS_TRANSPARENT; return NS_OK; case eColor_SpellCheckerUnderline: aColor = NS_RGB(0xff, 0, 0); return NS_OK; // New CSS 2 Color definitions case eColor_activeborder: idx = COLOR_ACTIVEBORDER; break; case eColor_activecaption: idx = COLOR_ACTIVECAPTION; break; case eColor_appworkspace: idx = COLOR_APPWORKSPACE; break; case eColor_background: idx = COLOR_BACKGROUND; break; case eColor_buttonface: case eColor__moz_buttonhoverface: idx = COLOR_BTNFACE; break; case eColor_buttonhighlight: idx = COLOR_BTNHIGHLIGHT; break; case eColor_buttonshadow: idx = COLOR_BTNSHADOW; break; case eColor_buttontext: case eColor__moz_buttonhovertext: idx = COLOR_BTNTEXT; break; case eColor_captiontext: idx = COLOR_CAPTIONTEXT; break; case eColor_graytext: idx = COLOR_GRAYTEXT; break; case eColor_highlight: case eColor__moz_html_cellhighlight: case eColor__moz_menuhover: idx = COLOR_HIGHLIGHT; break; case eColor__moz_menubarhovertext: #ifndef WINCE if (!nsUXThemeData::sIsVistaOrLater || !nsUXThemeData::isAppThemed()) { idx = nsUXThemeData::sFlatMenus ? COLOR_HIGHLIGHTTEXT : COLOR_MENUTEXT; break; } #endif // Fall through case eColor__moz_menuhovertext: #ifndef WINCE if (nsUXThemeData::IsAppThemed() && nsUXThemeData::sIsVistaOrLater) { res = ::GetColorFromTheme(eUXMenu, MENU_POPUPITEM, MPI_HOT, TMT_TEXTCOLOR, aColor); if (NS_SUCCEEDED(res)) return res; // fall through to highlight case } #endif case eColor_highlighttext: case eColor__moz_html_cellhighlighttext: idx = COLOR_HIGHLIGHTTEXT; break; case eColor_inactiveborder: idx = COLOR_INACTIVEBORDER; break; case eColor_inactivecaption: idx = COLOR_INACTIVECAPTION; break; case eColor_inactivecaptiontext: idx = COLOR_INACTIVECAPTIONTEXT; break; case eColor_infobackground: idx = COLOR_INFOBK; break; case eColor_infotext: idx = COLOR_INFOTEXT; break; case eColor_menu: idx = COLOR_MENU; break; case eColor_menutext: case eColor__moz_menubartext: idx = COLOR_MENUTEXT; break; case eColor_scrollbar: idx = COLOR_SCROLLBAR; break; case eColor_threeddarkshadow: idx = COLOR_3DDKSHADOW; break; case eColor_threedface: idx = COLOR_3DFACE; break; case eColor_threedhighlight: idx = COLOR_3DHIGHLIGHT; break; case eColor_threedlightshadow: idx = COLOR_3DLIGHT; break; case eColor_threedshadow: idx = COLOR_3DSHADOW; break; case eColor_window: idx = COLOR_WINDOW; break; case eColor_windowframe: idx = COLOR_WINDOWFRAME; break; case eColor_windowtext: idx = COLOR_WINDOWTEXT; break; case eColor__moz_eventreerow: case eColor__moz_oddtreerow: case eColor__moz_field: case eColor__moz_combobox: idx = COLOR_WINDOW; break; case eColor__moz_fieldtext: case eColor__moz_comboboxtext: idx = COLOR_WINDOWTEXT; break; case eColor__moz_dialog: case eColor__moz_cellhighlight: idx = COLOR_3DFACE; break; case eColor__moz_win_mediatext: #ifndef WINCE if (nsUXThemeData::IsAppThemed() && nsUXThemeData::sIsVistaOrLater) { res = ::GetColorFromTheme(eUXMediaToolbar, TP_BUTTON, TS_NORMAL, TMT_TEXTCOLOR, aColor); if (NS_SUCCEEDED(res)) return res; } #endif // if we've gotten here just return -moz-dialogtext instead idx = COLOR_WINDOWTEXT; break; case eColor__moz_win_communicationstext: #ifndef WINCE if (nsUXThemeData::IsAppThemed() && nsUXThemeData::sIsVistaOrLater) { res = ::GetColorFromTheme(eUXCommunicationsToolbar, TP_BUTTON, TS_NORMAL, TMT_TEXTCOLOR, aColor); if (NS_SUCCEEDED(res)) return res; } #endif // if we've gotten here just return -moz-dialogtext instead idx = COLOR_WINDOWTEXT; break; case eColor__moz_dialogtext: case eColor__moz_cellhighlighttext: idx = COLOR_WINDOWTEXT; break; case eColor__moz_dragtargetzone: idx = COLOR_HIGHLIGHTTEXT; break; case eColor__moz_buttondefault: idx = COLOR_3DDKSHADOW; break; case eColor__moz_nativehyperlinktext: #ifndef WINCE idx = COLOR_HOTLIGHT; #else aColor = NS_RGB(0, 0, 0xee); return NS_OK; #endif break; default: idx = COLOR_WINDOW; break; } DWORD color = ::GetSysColor(idx); aColor = COLOREF_2_NSRGB(color); return res; }