aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-03-15 22:34:19 -0700
committerGitHub <noreply@github.com>2017-03-15 22:34:19 -0700
commit261a51a13a4a7742a7362534ae92023dfe38e630 (patch)
tree6d5f06d21beed3acac7ee5cb55799a15e4cd83e7
parentd30978246162e8a9bfad42b43ab6a05c90421c6e (diff)
parent6b9a6806b8e093d6b4d635e4a6baabbbc28716c7 (diff)
downloadservo-261a51a13a4a7742a7362534ae92023dfe38e630.tar.gz
servo-261a51a13a4a7742a7362534ae92023dfe38e630.zip
Auto merge of #15974 - Manishearth:stylo-system-colors, r=heycam
stylo: Support system colors r=heycam from https://bugzilla.mozilla.org/show_bug.cgi?id=1340696 <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15974) <!-- Reviewable:end -->
-rw-r--r--components/style/build_gecko.rs2
-rw-r--r--components/style/gecko_bindings/bindings.rs6
-rw-r--r--components/style/gecko_bindings/structs_debug.rs308
-rw-r--r--components/style/gecko_bindings/structs_release.rs308
-rw-r--r--components/style/properties/longhand/color.mako.rs89
-rw-r--r--components/style/values/computed/mod.rs1
-rw-r--r--components/style/values/specified/color.rs7
7 files changed, 720 insertions, 1 deletions
diff --git a/components/style/build_gecko.rs b/components/style/build_gecko.rs
index 6f262728954..8dbbc7f749b 100644
--- a/components/style/build_gecko.rs
+++ b/components/style/build_gecko.rs
@@ -268,6 +268,7 @@ mod bindings {
.include(add_include("mozilla/ServoElementSnapshot.h"))
.include(add_include("mozilla/dom/Element.h"))
.include(add_include("mozilla/dom/NameSpaceConstants.h"))
+ .include(add_include("mozilla/LookAndFeel.h"))
.include(add_include("mozilla/ServoBindings.h"))
.include(add_include("nsMediaFeatures.h"))
.include(add_include("nsMediaList.h"))
@@ -304,6 +305,7 @@ mod bindings {
"mozilla::TraversalRootBehavior",
"mozilla::StyleShapeRadius",
"mozilla::StyleGrid.*",
+ "mozilla::LookAndFeel",
".*ThreadSafe.*Holder",
"AnonymousContent",
"AudioContext",
diff --git a/components/style/gecko_bindings/bindings.rs b/components/style/gecko_bindings/bindings.rs
index ff8040f140f..0859b42a943 100644
--- a/components/style/gecko_bindings/bindings.rs
+++ b/components/style/gecko_bindings/bindings.rs
@@ -975,6 +975,12 @@ extern "C" {
pub fn Gecko_GetMediaFeatures() -> *const nsMediaFeature;
}
extern "C" {
+ pub fn Gecko_GetLookAndFeelSystemColor(color_id: i32,
+ pres_context:
+ RawGeckoPresContextBorrowed)
+ -> nscolor;
+}
+extern "C" {
pub fn Gecko_Construct_Default_nsStyleFont(ptr: *mut nsStyleFont,
pres_context:
RawGeckoPresContextBorrowed);
diff --git a/components/style/gecko_bindings/structs_debug.rs b/components/style/gecko_bindings/structs_debug.rs
index ef36ae06638..a91037fa567 100644
--- a/components/style/gecko_bindings/structs_debug.rs
+++ b/components/style/gecko_bindings/structs_debug.rs
@@ -7483,6 +7483,288 @@ pub mod root {
#[derive(Debug, Copy, Clone)]
pub struct ContainerLayerParameters([u8; 0]);
#[repr(C)]
+ #[derive(Debug, Copy)]
+ pub struct LookAndFeel {
+ pub _address: u8,
+ }
+ #[repr(u8)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_ColorID {
+ eColorID_WindowBackground = 0,
+ eColorID_WindowForeground = 1,
+ eColorID_WidgetBackground = 2,
+ eColorID_WidgetForeground = 3,
+ eColorID_WidgetSelectBackground = 4,
+ eColorID_WidgetSelectForeground = 5,
+ eColorID_Widget3DHighlight = 6,
+ eColorID_Widget3DShadow = 7,
+ eColorID_TextBackground = 8,
+ eColorID_TextForeground = 9,
+ eColorID_TextSelectBackground = 10,
+ eColorID_TextSelectForeground = 11,
+ eColorID_TextSelectForegroundCustom = 12,
+ eColorID_TextSelectBackgroundDisabled = 13,
+ eColorID_TextSelectBackgroundAttention = 14,
+ eColorID_TextHighlightBackground = 15,
+ eColorID_TextHighlightForeground = 16,
+ eColorID_IMERawInputBackground = 17,
+ eColorID_IMERawInputForeground = 18,
+ eColorID_IMERawInputUnderline = 19,
+ eColorID_IMESelectedRawTextBackground = 20,
+ eColorID_IMESelectedRawTextForeground = 21,
+ eColorID_IMESelectedRawTextUnderline = 22,
+ eColorID_IMEConvertedTextBackground = 23,
+ eColorID_IMEConvertedTextForeground = 24,
+ eColorID_IMEConvertedTextUnderline = 25,
+ eColorID_IMESelectedConvertedTextBackground = 26,
+ eColorID_IMESelectedConvertedTextForeground = 27,
+ eColorID_IMESelectedConvertedTextUnderline = 28,
+ eColorID_SpellCheckerUnderline = 29,
+ eColorID_activeborder = 30,
+ eColorID_activecaption = 31,
+ eColorID_appworkspace = 32,
+ eColorID_background = 33,
+ eColorID_buttonface = 34,
+ eColorID_buttonhighlight = 35,
+ eColorID_buttonshadow = 36,
+ eColorID_buttontext = 37,
+ eColorID_captiontext = 38,
+ eColorID_graytext = 39,
+ eColorID_highlight = 40,
+ eColorID_highlighttext = 41,
+ eColorID_inactiveborder = 42,
+ eColorID_inactivecaption = 43,
+ eColorID_inactivecaptiontext = 44,
+ eColorID_infobackground = 45,
+ eColorID_infotext = 46,
+ eColorID_menu = 47,
+ eColorID_menutext = 48,
+ eColorID_scrollbar = 49,
+ eColorID_threeddarkshadow = 50,
+ eColorID_threedface = 51,
+ eColorID_threedhighlight = 52,
+ eColorID_threedlightshadow = 53,
+ eColorID_threedshadow = 54,
+ eColorID_window = 55,
+ eColorID_windowframe = 56,
+ eColorID_windowtext = 57,
+ eColorID__moz_buttondefault = 58,
+ eColorID__moz_field = 59,
+ eColorID__moz_fieldtext = 60,
+ eColorID__moz_dialog = 61,
+ eColorID__moz_dialogtext = 62,
+ eColorID__moz_dragtargetzone = 63,
+ eColorID__moz_cellhighlight = 64,
+ eColorID__moz_cellhighlighttext = 65,
+ eColorID__moz_html_cellhighlight = 66,
+ eColorID__moz_html_cellhighlighttext = 67,
+ eColorID__moz_buttonhoverface = 68,
+ eColorID__moz_buttonhovertext = 69,
+ eColorID__moz_menuhover = 70,
+ eColorID__moz_menuhovertext = 71,
+ eColorID__moz_menubartext = 72,
+ eColorID__moz_menubarhovertext = 73,
+ eColorID__moz_eventreerow = 74,
+ eColorID__moz_oddtreerow = 75,
+ eColorID__moz_mac_buttonactivetext = 76,
+ eColorID__moz_mac_chrome_active = 77,
+ eColorID__moz_mac_chrome_inactive = 78,
+ eColorID__moz_mac_defaultbuttontext = 79,
+ eColorID__moz_mac_focusring = 80,
+ eColorID__moz_mac_menuselect = 81,
+ eColorID__moz_mac_menushadow = 82,
+ eColorID__moz_mac_menutextdisable = 83,
+ eColorID__moz_mac_menutextselect = 84,
+ eColorID__moz_mac_disabledtoolbartext = 85,
+ eColorID__moz_mac_secondaryhighlight = 86,
+ eColorID__moz_win_mediatext = 87,
+ eColorID__moz_win_communicationstext = 88,
+ eColorID__moz_nativehyperlinktext = 89,
+ eColorID__moz_comboboxtext = 90,
+ eColorID__moz_combobox = 91,
+ eColorID__moz_gtk_info_bar_text = 92,
+ eColorID_LAST_COLOR = 93,
+ }
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_IntID {
+ eIntID_CaretBlinkTime = 0,
+ eIntID_CaretWidth = 1,
+ eIntID_ShowCaretDuringSelection = 2,
+ eIntID_SelectTextfieldsOnKeyFocus = 3,
+ eIntID_SubmenuDelay = 4,
+ eIntID_MenusCanOverlapOSBar = 5,
+ eIntID_UseOverlayScrollbars = 6,
+ eIntID_AllowOverlayScrollbarsOverlap = 7,
+ eIntID_ShowHideScrollbars = 8,
+ eIntID_SkipNavigatingDisabledMenuItem = 9,
+ eIntID_DragThresholdX = 10,
+ eIntID_DragThresholdY = 11,
+ eIntID_UseAccessibilityTheme = 12,
+ eIntID_ScrollArrowStyle = 13,
+ eIntID_ScrollSliderStyle = 14,
+ eIntID_ScrollButtonLeftMouseButtonAction = 15,
+ eIntID_ScrollButtonMiddleMouseButtonAction = 16,
+ eIntID_ScrollButtonRightMouseButtonAction = 17,
+ eIntID_TreeOpenDelay = 18,
+ eIntID_TreeCloseDelay = 19,
+ eIntID_TreeLazyScrollDelay = 20,
+ eIntID_TreeScrollDelay = 21,
+ eIntID_TreeScrollLinesMax = 22,
+ eIntID_TabFocusModel = 23,
+ eIntID_ChosenMenuItemsShouldBlink = 24,
+ eIntID_WindowsDefaultTheme = 25,
+ eIntID_DWMCompositor = 26,
+ eIntID_WindowsClassic = 27,
+ eIntID_WindowsGlass = 28,
+ eIntID_TouchEnabled = 29,
+ eIntID_MacGraphiteTheme = 30,
+ eIntID_MacYosemiteTheme = 31,
+ eIntID_AlertNotificationOrigin = 32,
+ eIntID_ScrollToClick = 33,
+ eIntID_IMERawInputUnderlineStyle = 34,
+ eIntID_IMESelectedRawTextUnderlineStyle = 35,
+ eIntID_IMEConvertedTextUnderlineStyle = 36,
+ eIntID_IMESelectedConvertedTextUnderline = 37,
+ eIntID_SpellCheckerUnderlineStyle = 38,
+ eIntID_MenuBarDrag = 39,
+ eIntID_WindowsThemeIdentifier = 40,
+ eIntID_OperatingSystemVersionIdentifier = 41,
+ eIntID_ScrollbarButtonAutoRepeatBehavior = 42,
+ eIntID_TooltipDelay = 43,
+ eIntID_SwipeAnimationEnabled = 44,
+ eIntID_ColorPickerAvailable = 45,
+ eIntID_PhysicalHomeButton = 46,
+ eIntID_ScrollbarDisplayOnMouseMove = 47,
+ eIntID_ScrollbarFadeBeginDelay = 48,
+ eIntID_ScrollbarFadeDuration = 49,
+ eIntID_ContextMenuOffsetVertical = 50,
+ eIntID_ContextMenuOffsetHorizontal = 51,
+ }
+ #[repr(u32)]
+ /**
+ * Windows themes we currently detect.
+ */
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_WindowsTheme {
+ eWindowsTheme_Generic = 0,
+ eWindowsTheme_Classic = 1,
+ eWindowsTheme_Aero = 2,
+ eWindowsTheme_LunaBlue = 3,
+ eWindowsTheme_LunaOlive = 4,
+ eWindowsTheme_LunaSilver = 5,
+ eWindowsTheme_Royale = 6,
+ eWindowsTheme_Zune = 7,
+ eWindowsTheme_AeroLite = 8,
+ }
+ #[repr(u32)]
+ /**
+ * Operating system versions.
+ */
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_OperatingSystemVersion {
+ eOperatingSystemVersion_Windows7 = 2,
+ eOperatingSystemVersion_Windows8 = 3,
+ eOperatingSystemVersion_Windows10 = 4,
+ eOperatingSystemVersion_Unknown = 5,
+ }
+ pub const LookAndFeel_eScrollArrow_None:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_None;
+ pub const LookAndFeel_eScrollArrow_StartBackward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_StartBackward;
+ pub const LookAndFeel_eScrollArrow_StartForward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_StartForward;
+ pub const LookAndFeel_eScrollArrow_EndBackward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_EndBackward;
+ pub const LookAndFeel_eScrollArrow_EndForward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_EndForward;
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel__bindgen_ty_1 {
+ eScrollArrow_None = 0,
+ eScrollArrow_StartBackward = 4096,
+ eScrollArrow_StartForward = 256,
+ eScrollArrow_EndBackward = 16,
+ eScrollArrow_EndForward = 1,
+ }
+ pub const LookAndFeel_eScrollArrowStyle_Single:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_Single;
+ pub const LookAndFeel_eScrollArrowStyle_BothAtBottom:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_BothAtBottom;
+ pub const LookAndFeel_eScrollArrowStyle_BothAtEachEnd:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_BothAtEachEnd;
+ pub const LookAndFeel_eScrollArrowStyle_BothAtTop:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_BothAtTop;
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel__bindgen_ty_2 {
+ eScrollArrowStyle_Single = 4097,
+ eScrollArrowStyle_BothAtBottom = 17,
+ eScrollArrowStyle_BothAtEachEnd = 4369,
+ eScrollArrowStyle_BothAtTop = 4352,
+ }
+ pub const LookAndFeel_eScrollThumbStyle_Normal:
+ root::mozilla::LookAndFeel__bindgen_ty_3 =
+ LookAndFeel__bindgen_ty_3::eScrollThumbStyle_Normal;
+ pub const LookAndFeel_eScrollThumbStyle_Proportional:
+ root::mozilla::LookAndFeel__bindgen_ty_3 =
+ LookAndFeel__bindgen_ty_3::eScrollThumbStyle_Proportional;
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel__bindgen_ty_3 {
+ eScrollThumbStyle_Normal = 0,
+ eScrollThumbStyle_Proportional = 1,
+ }
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_FloatID {
+ eFloatID_IMEUnderlineRelativeSize = 0,
+ eFloatID_SpellCheckerUnderlineRelativeSize = 1,
+ eFloatID_CaretAspectRatio = 2,
+ }
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_FontID {
+ eFont_Caption = 1,
+ eFont_Icon = 2,
+ eFont_Menu = 3,
+ eFont_MessageBox = 4,
+ eFont_SmallCaption = 5,
+ eFont_StatusBar = 6,
+ eFont_Window = 7,
+ eFont_Document = 8,
+ eFont_Workspace = 9,
+ eFont_Desktop = 10,
+ eFont_Info = 11,
+ eFont_Dialog = 12,
+ eFont_Button = 13,
+ eFont_PullDownMenu = 14,
+ eFont_List = 15,
+ eFont_Field = 16,
+ eFont_Tooltips = 17,
+ eFont_Widget = 18,
+ }
+ #[test]
+ fn bindgen_test_layout_LookAndFeel() {
+ assert_eq!(::std::mem::size_of::<LookAndFeel>() , 1usize , concat
+ ! ( "Size of: " , stringify ! ( LookAndFeel ) ));
+ assert_eq! (::std::mem::align_of::<LookAndFeel>() , 1usize ,
+ concat ! (
+ "Alignment of " , stringify ! ( LookAndFeel ) ));
+ }
+ impl Clone for LookAndFeel {
+ fn clone(&self) -> Self { *self }
+ }
+ #[repr(C)]
#[derive(Debug)]
pub struct PropertyStyleAnimationValuePair {
pub mProperty: root::nsCSSPropertyID,
@@ -25509,6 +25791,32 @@ pub mod root {
#[derive(Debug, Copy, Clone)]
pub struct nsAttrValueOrString([u8; 0]);
#[repr(C)]
+ #[derive(Debug, Copy)]
+ pub struct LookAndFeelInt {
+ pub id: i32,
+ pub value: i32,
+ }
+ #[test]
+ fn bindgen_test_layout_LookAndFeelInt() {
+ assert_eq!(::std::mem::size_of::<LookAndFeelInt>() , 8usize , concat !
+ ( "Size of: " , stringify ! ( LookAndFeelInt ) ));
+ assert_eq! (::std::mem::align_of::<LookAndFeelInt>() , 4usize , concat
+ ! ( "Alignment of " , stringify ! ( LookAndFeelInt ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const LookAndFeelInt ) ) . id as * const _
+ as usize } , 0usize , concat ! (
+ "Alignment of field: " , stringify ! ( LookAndFeelInt ) ,
+ "::" , stringify ! ( id ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const LookAndFeelInt ) ) . value as * const
+ _ as usize } , 4usize , concat ! (
+ "Alignment of field: " , stringify ! ( LookAndFeelInt ) ,
+ "::" , stringify ! ( value ) ));
+ }
+ impl Clone for LookAndFeelInt {
+ fn clone(&self) -> Self { *self }
+ }
+ #[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct RawServoAnimationValue([u8; 0]);
#[repr(C)]
diff --git a/components/style/gecko_bindings/structs_release.rs b/components/style/gecko_bindings/structs_release.rs
index b723ba7c1ac..e7940b9824d 100644
--- a/components/style/gecko_bindings/structs_release.rs
+++ b/components/style/gecko_bindings/structs_release.rs
@@ -7295,6 +7295,288 @@ pub mod root {
#[derive(Debug, Copy, Clone)]
pub struct ContainerLayerParameters([u8; 0]);
#[repr(C)]
+ #[derive(Debug, Copy)]
+ pub struct LookAndFeel {
+ pub _address: u8,
+ }
+ #[repr(u8)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_ColorID {
+ eColorID_WindowBackground = 0,
+ eColorID_WindowForeground = 1,
+ eColorID_WidgetBackground = 2,
+ eColorID_WidgetForeground = 3,
+ eColorID_WidgetSelectBackground = 4,
+ eColorID_WidgetSelectForeground = 5,
+ eColorID_Widget3DHighlight = 6,
+ eColorID_Widget3DShadow = 7,
+ eColorID_TextBackground = 8,
+ eColorID_TextForeground = 9,
+ eColorID_TextSelectBackground = 10,
+ eColorID_TextSelectForeground = 11,
+ eColorID_TextSelectForegroundCustom = 12,
+ eColorID_TextSelectBackgroundDisabled = 13,
+ eColorID_TextSelectBackgroundAttention = 14,
+ eColorID_TextHighlightBackground = 15,
+ eColorID_TextHighlightForeground = 16,
+ eColorID_IMERawInputBackground = 17,
+ eColorID_IMERawInputForeground = 18,
+ eColorID_IMERawInputUnderline = 19,
+ eColorID_IMESelectedRawTextBackground = 20,
+ eColorID_IMESelectedRawTextForeground = 21,
+ eColorID_IMESelectedRawTextUnderline = 22,
+ eColorID_IMEConvertedTextBackground = 23,
+ eColorID_IMEConvertedTextForeground = 24,
+ eColorID_IMEConvertedTextUnderline = 25,
+ eColorID_IMESelectedConvertedTextBackground = 26,
+ eColorID_IMESelectedConvertedTextForeground = 27,
+ eColorID_IMESelectedConvertedTextUnderline = 28,
+ eColorID_SpellCheckerUnderline = 29,
+ eColorID_activeborder = 30,
+ eColorID_activecaption = 31,
+ eColorID_appworkspace = 32,
+ eColorID_background = 33,
+ eColorID_buttonface = 34,
+ eColorID_buttonhighlight = 35,
+ eColorID_buttonshadow = 36,
+ eColorID_buttontext = 37,
+ eColorID_captiontext = 38,
+ eColorID_graytext = 39,
+ eColorID_highlight = 40,
+ eColorID_highlighttext = 41,
+ eColorID_inactiveborder = 42,
+ eColorID_inactivecaption = 43,
+ eColorID_inactivecaptiontext = 44,
+ eColorID_infobackground = 45,
+ eColorID_infotext = 46,
+ eColorID_menu = 47,
+ eColorID_menutext = 48,
+ eColorID_scrollbar = 49,
+ eColorID_threeddarkshadow = 50,
+ eColorID_threedface = 51,
+ eColorID_threedhighlight = 52,
+ eColorID_threedlightshadow = 53,
+ eColorID_threedshadow = 54,
+ eColorID_window = 55,
+ eColorID_windowframe = 56,
+ eColorID_windowtext = 57,
+ eColorID__moz_buttondefault = 58,
+ eColorID__moz_field = 59,
+ eColorID__moz_fieldtext = 60,
+ eColorID__moz_dialog = 61,
+ eColorID__moz_dialogtext = 62,
+ eColorID__moz_dragtargetzone = 63,
+ eColorID__moz_cellhighlight = 64,
+ eColorID__moz_cellhighlighttext = 65,
+ eColorID__moz_html_cellhighlight = 66,
+ eColorID__moz_html_cellhighlighttext = 67,
+ eColorID__moz_buttonhoverface = 68,
+ eColorID__moz_buttonhovertext = 69,
+ eColorID__moz_menuhover = 70,
+ eColorID__moz_menuhovertext = 71,
+ eColorID__moz_menubartext = 72,
+ eColorID__moz_menubarhovertext = 73,
+ eColorID__moz_eventreerow = 74,
+ eColorID__moz_oddtreerow = 75,
+ eColorID__moz_mac_buttonactivetext = 76,
+ eColorID__moz_mac_chrome_active = 77,
+ eColorID__moz_mac_chrome_inactive = 78,
+ eColorID__moz_mac_defaultbuttontext = 79,
+ eColorID__moz_mac_focusring = 80,
+ eColorID__moz_mac_menuselect = 81,
+ eColorID__moz_mac_menushadow = 82,
+ eColorID__moz_mac_menutextdisable = 83,
+ eColorID__moz_mac_menutextselect = 84,
+ eColorID__moz_mac_disabledtoolbartext = 85,
+ eColorID__moz_mac_secondaryhighlight = 86,
+ eColorID__moz_win_mediatext = 87,
+ eColorID__moz_win_communicationstext = 88,
+ eColorID__moz_nativehyperlinktext = 89,
+ eColorID__moz_comboboxtext = 90,
+ eColorID__moz_combobox = 91,
+ eColorID__moz_gtk_info_bar_text = 92,
+ eColorID_LAST_COLOR = 93,
+ }
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_IntID {
+ eIntID_CaretBlinkTime = 0,
+ eIntID_CaretWidth = 1,
+ eIntID_ShowCaretDuringSelection = 2,
+ eIntID_SelectTextfieldsOnKeyFocus = 3,
+ eIntID_SubmenuDelay = 4,
+ eIntID_MenusCanOverlapOSBar = 5,
+ eIntID_UseOverlayScrollbars = 6,
+ eIntID_AllowOverlayScrollbarsOverlap = 7,
+ eIntID_ShowHideScrollbars = 8,
+ eIntID_SkipNavigatingDisabledMenuItem = 9,
+ eIntID_DragThresholdX = 10,
+ eIntID_DragThresholdY = 11,
+ eIntID_UseAccessibilityTheme = 12,
+ eIntID_ScrollArrowStyle = 13,
+ eIntID_ScrollSliderStyle = 14,
+ eIntID_ScrollButtonLeftMouseButtonAction = 15,
+ eIntID_ScrollButtonMiddleMouseButtonAction = 16,
+ eIntID_ScrollButtonRightMouseButtonAction = 17,
+ eIntID_TreeOpenDelay = 18,
+ eIntID_TreeCloseDelay = 19,
+ eIntID_TreeLazyScrollDelay = 20,
+ eIntID_TreeScrollDelay = 21,
+ eIntID_TreeScrollLinesMax = 22,
+ eIntID_TabFocusModel = 23,
+ eIntID_ChosenMenuItemsShouldBlink = 24,
+ eIntID_WindowsDefaultTheme = 25,
+ eIntID_DWMCompositor = 26,
+ eIntID_WindowsClassic = 27,
+ eIntID_WindowsGlass = 28,
+ eIntID_TouchEnabled = 29,
+ eIntID_MacGraphiteTheme = 30,
+ eIntID_MacYosemiteTheme = 31,
+ eIntID_AlertNotificationOrigin = 32,
+ eIntID_ScrollToClick = 33,
+ eIntID_IMERawInputUnderlineStyle = 34,
+ eIntID_IMESelectedRawTextUnderlineStyle = 35,
+ eIntID_IMEConvertedTextUnderlineStyle = 36,
+ eIntID_IMESelectedConvertedTextUnderline = 37,
+ eIntID_SpellCheckerUnderlineStyle = 38,
+ eIntID_MenuBarDrag = 39,
+ eIntID_WindowsThemeIdentifier = 40,
+ eIntID_OperatingSystemVersionIdentifier = 41,
+ eIntID_ScrollbarButtonAutoRepeatBehavior = 42,
+ eIntID_TooltipDelay = 43,
+ eIntID_SwipeAnimationEnabled = 44,
+ eIntID_ColorPickerAvailable = 45,
+ eIntID_PhysicalHomeButton = 46,
+ eIntID_ScrollbarDisplayOnMouseMove = 47,
+ eIntID_ScrollbarFadeBeginDelay = 48,
+ eIntID_ScrollbarFadeDuration = 49,
+ eIntID_ContextMenuOffsetVertical = 50,
+ eIntID_ContextMenuOffsetHorizontal = 51,
+ }
+ #[repr(u32)]
+ /**
+ * Windows themes we currently detect.
+ */
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_WindowsTheme {
+ eWindowsTheme_Generic = 0,
+ eWindowsTheme_Classic = 1,
+ eWindowsTheme_Aero = 2,
+ eWindowsTheme_LunaBlue = 3,
+ eWindowsTheme_LunaOlive = 4,
+ eWindowsTheme_LunaSilver = 5,
+ eWindowsTheme_Royale = 6,
+ eWindowsTheme_Zune = 7,
+ eWindowsTheme_AeroLite = 8,
+ }
+ #[repr(u32)]
+ /**
+ * Operating system versions.
+ */
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_OperatingSystemVersion {
+ eOperatingSystemVersion_Windows7 = 2,
+ eOperatingSystemVersion_Windows8 = 3,
+ eOperatingSystemVersion_Windows10 = 4,
+ eOperatingSystemVersion_Unknown = 5,
+ }
+ pub const LookAndFeel_eScrollArrow_None:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_None;
+ pub const LookAndFeel_eScrollArrow_StartBackward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_StartBackward;
+ pub const LookAndFeel_eScrollArrow_StartForward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_StartForward;
+ pub const LookAndFeel_eScrollArrow_EndBackward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_EndBackward;
+ pub const LookAndFeel_eScrollArrow_EndForward:
+ root::mozilla::LookAndFeel__bindgen_ty_1 =
+ LookAndFeel__bindgen_ty_1::eScrollArrow_EndForward;
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel__bindgen_ty_1 {
+ eScrollArrow_None = 0,
+ eScrollArrow_StartBackward = 4096,
+ eScrollArrow_StartForward = 256,
+ eScrollArrow_EndBackward = 16,
+ eScrollArrow_EndForward = 1,
+ }
+ pub const LookAndFeel_eScrollArrowStyle_Single:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_Single;
+ pub const LookAndFeel_eScrollArrowStyle_BothAtBottom:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_BothAtBottom;
+ pub const LookAndFeel_eScrollArrowStyle_BothAtEachEnd:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_BothAtEachEnd;
+ pub const LookAndFeel_eScrollArrowStyle_BothAtTop:
+ root::mozilla::LookAndFeel__bindgen_ty_2 =
+ LookAndFeel__bindgen_ty_2::eScrollArrowStyle_BothAtTop;
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel__bindgen_ty_2 {
+ eScrollArrowStyle_Single = 4097,
+ eScrollArrowStyle_BothAtBottom = 17,
+ eScrollArrowStyle_BothAtEachEnd = 4369,
+ eScrollArrowStyle_BothAtTop = 4352,
+ }
+ pub const LookAndFeel_eScrollThumbStyle_Normal:
+ root::mozilla::LookAndFeel__bindgen_ty_3 =
+ LookAndFeel__bindgen_ty_3::eScrollThumbStyle_Normal;
+ pub const LookAndFeel_eScrollThumbStyle_Proportional:
+ root::mozilla::LookAndFeel__bindgen_ty_3 =
+ LookAndFeel__bindgen_ty_3::eScrollThumbStyle_Proportional;
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel__bindgen_ty_3 {
+ eScrollThumbStyle_Normal = 0,
+ eScrollThumbStyle_Proportional = 1,
+ }
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_FloatID {
+ eFloatID_IMEUnderlineRelativeSize = 0,
+ eFloatID_SpellCheckerUnderlineRelativeSize = 1,
+ eFloatID_CaretAspectRatio = 2,
+ }
+ #[repr(u32)]
+ #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
+ pub enum LookAndFeel_FontID {
+ eFont_Caption = 1,
+ eFont_Icon = 2,
+ eFont_Menu = 3,
+ eFont_MessageBox = 4,
+ eFont_SmallCaption = 5,
+ eFont_StatusBar = 6,
+ eFont_Window = 7,
+ eFont_Document = 8,
+ eFont_Workspace = 9,
+ eFont_Desktop = 10,
+ eFont_Info = 11,
+ eFont_Dialog = 12,
+ eFont_Button = 13,
+ eFont_PullDownMenu = 14,
+ eFont_List = 15,
+ eFont_Field = 16,
+ eFont_Tooltips = 17,
+ eFont_Widget = 18,
+ }
+ #[test]
+ fn bindgen_test_layout_LookAndFeel() {
+ assert_eq!(::std::mem::size_of::<LookAndFeel>() , 1usize , concat
+ ! ( "Size of: " , stringify ! ( LookAndFeel ) ));
+ assert_eq! (::std::mem::align_of::<LookAndFeel>() , 1usize ,
+ concat ! (
+ "Alignment of " , stringify ! ( LookAndFeel ) ));
+ }
+ impl Clone for LookAndFeel {
+ fn clone(&self) -> Self { *self }
+ }
+ #[repr(C)]
#[derive(Debug)]
pub struct PropertyStyleAnimationValuePair {
pub mProperty: root::nsCSSPropertyID,
@@ -24908,6 +25190,32 @@ pub mod root {
#[derive(Debug, Copy, Clone)]
pub struct nsAttrValueOrString([u8; 0]);
#[repr(C)]
+ #[derive(Debug, Copy)]
+ pub struct LookAndFeelInt {
+ pub id: i32,
+ pub value: i32,
+ }
+ #[test]
+ fn bindgen_test_layout_LookAndFeelInt() {
+ assert_eq!(::std::mem::size_of::<LookAndFeelInt>() , 8usize , concat !
+ ( "Size of: " , stringify ! ( LookAndFeelInt ) ));
+ assert_eq! (::std::mem::align_of::<LookAndFeelInt>() , 4usize , concat
+ ! ( "Alignment of " , stringify ! ( LookAndFeelInt ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const LookAndFeelInt ) ) . id as * const _
+ as usize } , 0usize , concat ! (
+ "Alignment of field: " , stringify ! ( LookAndFeelInt ) ,
+ "::" , stringify ! ( id ) ));
+ assert_eq! (unsafe {
+ & ( * ( 0 as * const LookAndFeelInt ) ) . value as * const
+ _ as usize } , 4usize , concat ! (
+ "Alignment of field: " , stringify ! ( LookAndFeelInt ) ,
+ "::" , stringify ! ( value ) ));
+ }
+ impl Clone for LookAndFeelInt {
+ fn clone(&self) -> Self { *self }
+ }
+ #[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct RawServoAnimationValue([u8; 0]);
#[repr(C)]
diff --git a/components/style/properties/longhand/color.mako.rs b/components/style/properties/longhand/color.mako.rs
index 9fbdaac287a..436012bf461 100644
--- a/components/style/properties/longhand/color.mako.rs
+++ b/components/style/properties/longhand/color.mako.rs
@@ -6,6 +6,8 @@
<% data.new_style_struct("Color", inherited=True) %>
+<% from data import to_rust_ident %>
+
<%helpers:longhand name="color" need_clone="True" animatable="True"
spec="https://drafts.csswg.org/css-color/#color">
use cssparser::RGBA;
@@ -53,4 +55,91 @@
pub fn parse(context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> {
CSSColor::parse(context, input).map(SpecifiedValue)
}
+
+ // FIXME(#15973): Add servo support for system colors
+ % if product == "gecko":
+ <%
+ # These are actually parsed. See nsCSSProps::kColorKTable
+ system_colors = """activeborder activecaption appworkspace background buttonface
+ buttonhighlight buttonshadow buttontext captiontext graytext highlight
+ highlighttext inactiveborder inactivecaption inactivecaptiontext
+ infobackground infotext menu menutext scrollbar threeddarkshadow
+ threedface threedhighlight threedlightshadow threedshadow window
+ windowframe windowtext -moz-buttondefault -moz-buttonhoverface
+ -moz-buttonhovertext -moz-cellhighlight -moz-cellhighlighttext
+ -moz-eventreerow -moz-field -moz-fieldtext -moz-dialog -moz-dialogtext
+ -moz-dragtargetzone -moz-gtk-info-bar-text -moz-html-cellhighlight
+ -moz-html-cellhighlighttext -moz-mac-buttonactivetext
+ -moz-mac-chrome-active -moz-mac-chrome-inactive
+ -moz-mac-defaultbuttontext -moz-mac-focusring -moz-mac-menuselect
+ -moz-mac-menushadow -moz-mac-menutextdisable -moz-mac-menutextselect
+ -moz-mac-disabledtoolbartext -moz-mac-secondaryhighlight
+ -moz-menuhover -moz-menuhovertext -moz-menubartext -moz-menubarhovertext
+ -moz-oddtreerow -moz-win-mediatext -moz-win-communicationstext
+ -moz-nativehyperlinktext -moz-comboboxtext -moz-combobox""".split()
+
+ # These are not parsed but must be serialized
+ # They are only ever set directly by Gecko
+ extra_colors = """WindowBackground WindowForeground WidgetBackground WidgetForeground
+ WidgetSelectBackground WidgetSelectForeground Widget3DHighlight Widget3DShadow
+ TextBackground TextForeground TextSelectBackground TextSelectForeground
+ TextSelectForegroundCustom TextSelectBackgroundDisabled TextSelectBackgroundAttention
+ TextHighlightBackground TextHighlightForeground IMERawInputBackground
+ IMERawInputForeground IMERawInputUnderline IMESelectedRawTextBackground
+ IMESelectedRawTextForeground IMESelectedRawTextUnderline
+ IMEConvertedTextBackground IMEConvertedTextForeground IMEConvertedTextUnderline
+ IMESelectedConvertedTextBackground IMESelectedConvertedTextForeground
+ IMESelectedConvertedTextUnderline SpellCheckerUnderline""".split()
+ %>
+ use gecko_bindings::bindings::Gecko_GetLookAndFeelSystemColor;
+ use gecko_bindings::structs::root::mozilla::LookAndFeel_ColorID;
+ pub type SystemColor = LookAndFeel_ColorID;
+
+ impl ToCss for SystemColor {
+ fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
+ let s = match *self {
+ % for color in system_colors + extra_colors:
+ LookAndFeel_ColorID::eColorID_${to_rust_ident(color)} => "${color}",
+ % endfor
+ LookAndFeel_ColorID::eColorID_LAST_COLOR => unreachable!(),
+ };
+ dest.write_str(s)
+ }
+ }
+
+ impl ToComputedValue for SystemColor {
+ type ComputedValue = u32; // nscolor
+ #[inline]
+ fn to_computed_value(&self, cx: &Context) -> Self::ComputedValue {
+ unsafe {
+ Gecko_GetLookAndFeelSystemColor(*self as i32,
+ &*cx.device.pres_context)
+ }
+ }
+
+ #[inline]
+ fn from_computed_value(_: &Self::ComputedValue) -> Self {
+ unreachable!()
+ }
+ }
+
+ impl SystemColor {
+ pub fn parse(input: &mut Parser) -> Result<Self, ()> {
+ use std::ascii::AsciiExt;
+ static PARSE_ARRAY: &'static [(&'static str, SystemColor); ${len(system_colors)}] = &[
+ % for color in system_colors:
+ ("${color}", LookAndFeel_ColorID::eColorID_${to_rust_ident(color)}),
+ % endfor
+ ];
+
+ let ident = input.expect_ident()?;
+ for &(name, color) in PARSE_ARRAY.iter() {
+ if name.eq_ignore_ascii_case(&ident) {
+ return Ok(color)
+ }
+ }
+ Err(())
+ }
+ }
+ % endif
</%helpers:longhand>
diff --git a/components/style/values/computed/mod.rs b/components/style/values/computed/mod.rs
index 22f9e5e0996..f6e6ea2aa3b 100644
--- a/components/style/values/computed/mod.rs
+++ b/components/style/values/computed/mod.rs
@@ -132,6 +132,7 @@ impl ToComputedValue for specified::Color {
let pres_context = unsafe { &*context.device.pres_context };
match *self {
specified::Color::RGBA(rgba) => rgba,
+ specified::Color::System(system) => to_rgba(system.to_computed_value(context)),
specified::Color::CurrentColor => context.inherited_style.get_color().clone_color(),
specified::Color::MozDefaultColor => to_rgba(pres_context.mDefaultColor),
specified::Color::MozDefaultBackgroundColor => to_rgba(pres_context.mBackgroundColor),
diff --git a/components/style/values/specified/color.rs b/components/style/values/specified/color.rs
index 88063803d31..4a3c5498716 100644
--- a/components/style/values/specified/color.rs
+++ b/components/style/values/specified/color.rs
@@ -24,6 +24,7 @@ mod servo {
mod gecko {
use cssparser::{Color as CSSParserColor, Parser, RGBA};
use parser::{Parse, ParserContext};
+ use properties::longhands::color::SystemColor;
use std::fmt;
use style_traits::ToCss;
use values::HasViewportPercentage;
@@ -35,7 +36,8 @@ mod gecko {
CurrentColor,
/// A specific RGBA color
RGBA(RGBA),
-
+ /// A system color
+ System(SystemColor),
/// -moz-default-color
MozDefaultColor,
/// -moz-default-background-color
@@ -57,6 +59,8 @@ mod gecko {
CSSParserColor::CurrentColor => Ok(Color::CurrentColor),
CSSParserColor::RGBA(x) => Ok(Color::RGBA(x)),
}
+ } else if let Ok(system) = input.try(SystemColor::parse) {
+ Ok(Color::System(system))
} else {
let ident = input.expect_ident()?;
match_ignore_ascii_case! { &ident,
@@ -77,6 +81,7 @@ mod gecko {
// Standard values:
Color::CurrentColor => CSSParserColor::CurrentColor.to_css(dest),
Color::RGBA(rgba) => rgba.to_css(dest),
+ Color::System(system) => system.to_css(dest),
// Non-standard values:
Color::MozDefaultColor => dest.write_str("-moz-default-color"),