style/values/generics/
ui.rs1use crate::derives::*;
8use crate::typed_om::{ToTyped, TypedValue};
9use crate::values::specified::ui::CursorKind;
10use std::fmt::{self, Write};
11use style_traits::{CssWriter, ToCss};
12use thin_vec::ThinVec;
13
14#[derive(
18 Clone,
19 Debug,
20 MallocSizeOf,
21 PartialEq,
22 SpecifiedValueInfo,
23 ToComputedValue,
24 ToResolvedValue,
25 ToShmem,
26)]
27#[repr(C)]
28pub struct GenericCursor<Image> {
29 pub images: crate::OwnedSlice<Image>,
31 pub keyword: CursorKind,
33}
34
35pub use self::GenericCursor as Cursor;
36
37impl<Image> Cursor<Image> {
38 #[inline]
40 pub fn auto() -> Self {
41 Self {
42 images: Default::default(),
43 keyword: CursorKind::Auto,
44 }
45 }
46}
47
48impl<Image: ToCss> ToCss for Cursor<Image> {
49 fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
50 where
51 W: Write,
52 {
53 for image in &*self.images {
54 image.to_css(dest)?;
55 dest.write_str(", ")?;
56 }
57 self.keyword.to_css(dest)
58 }
59}
60
61impl<Image> ToTyped for Cursor<Image> {
62 fn to_typed(&self, dest: &mut ThinVec<TypedValue>) -> Result<(), ()> {
67 if self.images.len() != 0 {
68 return Err(());
69 }
70
71 self.keyword.to_typed(dest)
72 }
73}
74
75#[derive(Clone, Debug, MallocSizeOf, PartialEq, ToComputedValue, ToResolvedValue, ToShmem)]
77#[repr(C)]
78pub struct GenericCursorImage<Image, Number> {
79 pub image: Image,
81 pub has_hotspot: bool,
83 pub hotspot_x: Number,
85 pub hotspot_y: Number,
87}
88
89pub use self::GenericCursorImage as CursorImage;
90
91impl<Image: ToCss, Number: ToCss> ToCss for CursorImage<Image, Number> {
92 fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result
93 where
94 W: Write,
95 {
96 self.image.to_css(dest)?;
97 if self.has_hotspot {
98 dest.write_char(' ')?;
99 self.hotspot_x.to_css(dest)?;
100 dest.write_char(' ')?;
101 self.hotspot_y.to_css(dest)?;
102 }
103 Ok(())
104 }
105}
106
107#[derive(
111 Animate,
112 Clone,
113 ComputeSquaredDistance,
114 Copy,
115 Debug,
116 MallocSizeOf,
117 PartialEq,
118 SpecifiedValueInfo,
119 ToAnimatedValue,
120 ToAnimatedZero,
121 ToComputedValue,
122 ToCss,
123 ToResolvedValue,
124 ToShmem,
125 ToTyped,
126)]
127#[repr(C, u8)]
128pub enum GenericScrollbarColor<Color> {
129 Auto,
131 Colors {
133 thumb: Color,
135 track: Color,
137 },
138}
139
140pub use self::GenericScrollbarColor as ScrollbarColor;
141
142impl<Color> Default for ScrollbarColor<Color> {
143 #[inline]
144 fn default() -> Self {
145 ScrollbarColor::Auto
146 }
147}