script/dom/css/
cssfontfacedescriptors.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use script_bindings::reflector::reflect_dom_object;
8use style::font_face::DescriptorId;
9
10use crate::dom::GlobalScope;
11use crate::dom::bindings::codegen::Bindings::CSSFontFaceDescriptorsBinding::CSSFontFaceDescriptorsMethods;
12use crate::dom::bindings::root::{Dom, DomRoot};
13use crate::dom::bindings::str::DOMString;
14use crate::dom::css::cssfontfacerule::CSSFontFaceRule;
15use crate::dom::css::cssstyledeclaration::CSSStyleDeclaration;
16use crate::dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleOwner};
17
18#[dom_struct]
19pub(crate) struct CSSFontFaceDescriptors {
20 style_declaration: CSSStyleDeclaration,
21 font_face_rule: Dom<CSSFontFaceRule>,
22}
23
24impl CSSFontFaceDescriptors {
25 pub(crate) fn new_inherited(font_face_rule: &CSSFontFaceRule) -> CSSFontFaceDescriptors {
26 CSSFontFaceDescriptors {
27 style_declaration: CSSStyleDeclaration::new_inherited(
29 CSSStyleOwner::Null,
30 None,
31 CSSModificationAccess::Readonly,
32 ),
33 font_face_rule: Dom::from_ref(font_face_rule),
34 }
35 }
36
37 pub(crate) fn new(
38 cx: &mut JSContext,
39 global: &GlobalScope,
40 font_face_rule: &CSSFontFaceRule,
41 ) -> DomRoot<CSSFontFaceDescriptors> {
42 reflect_dom_object(
43 cx,
44 Box::new(CSSFontFaceDescriptors::new_inherited(font_face_rule)),
45 global,
46 )
47 }
48
49 pub(crate) fn get_property_value(&self, property: &str) -> DOMString {
51 let Ok(descriptor_id) = DescriptorId::from_ident(property) else {
52 return Default::default();
53 };
54 self.font_face_rule.get_descriptor(descriptor_id)
55 }
56}
57
58impl CSSFontFaceDescriptorsMethods<crate::DomTypeHolder> for CSSFontFaceDescriptors {
59 fn Src(&self) -> DOMString {
61 self.font_face_rule.get_descriptor(DescriptorId::Src)
62 }
63
64 fn FontFamily(&self) -> DOMString {
66 self.font_face_rule.get_descriptor(DescriptorId::FontFamily)
67 }
68
69 fn Font_family(&self) -> DOMString {
71 self.font_face_rule.get_descriptor(DescriptorId::FontFamily)
72 }
73
74 fn FontStyle(&self) -> DOMString {
76 self.font_face_rule.get_descriptor(DescriptorId::FontStyle)
77 }
78
79 fn Font_style(&self) -> DOMString {
81 self.font_face_rule.get_descriptor(DescriptorId::FontStyle)
82 }
83
84 fn FontWeight(&self) -> DOMString {
86 self.font_face_rule.get_descriptor(DescriptorId::FontWeight)
87 }
88
89 fn Font_weight(&self) -> DOMString {
91 self.font_face_rule.get_descriptor(DescriptorId::FontWeight)
92 }
93
94 fn FontStretch(&self) -> DOMString {
96 self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
97 }
98
99 fn Font_stretch(&self) -> DOMString {
101 self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
102 }
103
104 fn FontWidth(&self) -> DOMString {
106 self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
107 }
108
109 fn Font_width(&self) -> DOMString {
111 self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
112 }
113
114 fn UnicodeRange(&self) -> DOMString {
116 self.font_face_rule
117 .get_descriptor(DescriptorId::UnicodeRange)
118 }
119
120 fn Unicode_range(&self) -> DOMString {
122 self.font_face_rule
123 .get_descriptor(DescriptorId::UnicodeRange)
124 }
125
126 fn FontFeatureSettings(&self) -> DOMString {
128 self.font_face_rule
129 .get_descriptor(DescriptorId::FontFeatureSettings)
130 }
131
132 fn Font_feature_settings(&self) -> DOMString {
134 self.font_face_rule
135 .get_descriptor(DescriptorId::FontFeatureSettings)
136 }
137
138 fn FontVariationSettings(&self) -> DOMString {
140 self.font_face_rule
141 .get_descriptor(DescriptorId::FontVariationSettings)
142 }
143
144 fn Font_variation_settings(&self) -> DOMString {
146 self.font_face_rule
147 .get_descriptor(DescriptorId::FontVariationSettings)
148 }
149
150 fn FontDisplay(&self) -> DOMString {
152 self.font_face_rule
153 .get_descriptor(DescriptorId::FontDisplay)
154 }
155
156 fn Font_display(&self) -> DOMString {
158 self.font_face_rule
159 .get_descriptor(DescriptorId::FontDisplay)
160 }
161
162 fn FontLanguageOverride(&self) -> DOMString {
164 self.font_face_rule
165 .get_descriptor(DescriptorId::FontLanguageOverride)
166 }
167
168 fn Font_language_override(&self) -> DOMString {
170 self.font_face_rule
171 .get_descriptor(DescriptorId::FontLanguageOverride)
172 }
173
174 fn AscentOverride(&self) -> DOMString {
176 self.font_face_rule
177 .get_descriptor(DescriptorId::AscentOverride)
178 }
179
180 fn Ascent_override(&self) -> DOMString {
182 self.font_face_rule
183 .get_descriptor(DescriptorId::AscentOverride)
184 }
185
186 fn DescentOverride(&self) -> DOMString {
188 self.font_face_rule
189 .get_descriptor(DescriptorId::DescentOverride)
190 }
191
192 fn Descent_override(&self) -> DOMString {
194 self.font_face_rule
195 .get_descriptor(DescriptorId::DescentOverride)
196 }
197
198 fn LineGapOverride(&self) -> DOMString {
200 self.font_face_rule
201 .get_descriptor(DescriptorId::LineGapOverride)
202 }
203
204 fn Line_gap_override(&self) -> DOMString {
206 self.font_face_rule
207 .get_descriptor(DescriptorId::LineGapOverride)
208 }
209
210 fn IndexedGetter(&self, index: u32) -> Option<DOMString> {
211 self.font_face_rule.get_descriptor_by_index(index)
212 }
213 fn Length(&self, _cx: &JSContext) -> u32 {
214 self.font_face_rule.descriptor_length() as u32
215 }
216}