script/dom/css/
cssfontfacedescriptors.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use script_bindings::reflector::reflect_dom_object_with_cx;
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_with_cx(
43 Box::new(CSSFontFaceDescriptors::new_inherited(font_face_rule)),
44 global,
45 cx,
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
97 .get_descriptor(DescriptorId::FontStretch)
98 }
99
100 fn Font_stretch(&self) -> DOMString {
102 self.font_face_rule
103 .get_descriptor(DescriptorId::FontStretch)
104 }
105
106 fn FontWidth(&self) -> DOMString {
108 self.font_face_rule
109 .get_descriptor(DescriptorId::FontStretch)
110 }
111
112 fn Font_width(&self) -> DOMString {
114 self.font_face_rule
115 .get_descriptor(DescriptorId::FontStretch)
116 }
117
118 fn UnicodeRange(&self) -> DOMString {
120 self.font_face_rule
121 .get_descriptor(DescriptorId::UnicodeRange)
122 }
123
124 fn Unicode_range(&self) -> DOMString {
126 self.font_face_rule
127 .get_descriptor(DescriptorId::UnicodeRange)
128 }
129
130 fn FontFeatureSettings(&self) -> DOMString {
132 self.font_face_rule
133 .get_descriptor(DescriptorId::FontFeatureSettings)
134 }
135
136 fn Font_feature_settings(&self) -> DOMString {
138 self.font_face_rule
139 .get_descriptor(DescriptorId::FontFeatureSettings)
140 }
141
142 fn FontVariationSettings(&self) -> DOMString {
144 self.font_face_rule
145 .get_descriptor(DescriptorId::FontVariationSettings)
146 }
147
148 fn Font_variation_settings(&self) -> DOMString {
150 self.font_face_rule
151 .get_descriptor(DescriptorId::FontVariationSettings)
152 }
153
154 fn FontDisplay(&self) -> DOMString {
156 self.font_face_rule
157 .get_descriptor(DescriptorId::FontDisplay)
158 }
159
160 fn Font_display(&self) -> DOMString {
162 self.font_face_rule
163 .get_descriptor(DescriptorId::FontDisplay)
164 }
165
166 fn FontLanguageOverride(&self) -> DOMString {
168 self.font_face_rule
169 .get_descriptor(DescriptorId::FontLanguageOverride)
170 }
171
172 fn Font_language_override(&self) -> DOMString {
174 self.font_face_rule
175 .get_descriptor(DescriptorId::FontLanguageOverride)
176 }
177
178 fn AscentOverride(&self) -> DOMString {
180 self.font_face_rule
181 .get_descriptor(DescriptorId::AscentOverride)
182 }
183
184 fn Ascent_override(&self) -> DOMString {
186 self.font_face_rule
187 .get_descriptor(DescriptorId::AscentOverride)
188 }
189
190 fn DescentOverride(&self) -> DOMString {
192 self.font_face_rule
193 .get_descriptor(DescriptorId::DescentOverride)
194 }
195
196 fn Descent_override(&self) -> DOMString {
198 self.font_face_rule
199 .get_descriptor(DescriptorId::DescentOverride)
200 }
201
202 fn LineGapOverride(&self) -> DOMString {
204 self.font_face_rule
205 .get_descriptor(DescriptorId::LineGapOverride)
206 }
207
208 fn Line_gap_override(&self) -> DOMString {
210 self.font_face_rule
211 .get_descriptor(DescriptorId::LineGapOverride)
212 }
213
214 fn IndexedGetter(&self, index: u32) -> Option<DOMString> {
215 self.font_face_rule.get_descriptor_by_index(index)
216 }
217 fn Length(&self, _cx: &JSContext) -> u32 {
218 self.font_face_rule.descriptor_length() as u32
219 }
220}