Skip to main content

script/dom/css/
cssfontfacedescriptors.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use 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            // FIXME: Don't use CSSModificationAccess::Readonly (requires using something other than CSSStyleOwner::Null as well)
28            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    /// <https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-getpropertyvalue>
50    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    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-src>
60    fn Src(&self) -> DOMString {
61        self.font_face_rule.get_descriptor(DescriptorId::Src)
62    }
63
64    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontfamily>
65    fn FontFamily(&self) -> DOMString {
66        self.font_face_rule.get_descriptor(DescriptorId::FontFamily)
67    }
68
69    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-family>
70    fn Font_family(&self) -> DOMString {
71        self.font_face_rule.get_descriptor(DescriptorId::FontFamily)
72    }
73
74    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontstyle>
75    fn FontStyle(&self) -> DOMString {
76        self.font_face_rule.get_descriptor(DescriptorId::FontStyle)
77    }
78
79    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-style>
80    fn Font_style(&self) -> DOMString {
81        self.font_face_rule.get_descriptor(DescriptorId::FontStyle)
82    }
83
84    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontweight>
85    fn FontWeight(&self) -> DOMString {
86        self.font_face_rule.get_descriptor(DescriptorId::FontWeight)
87    }
88
89    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-weight>
90    fn Font_weight(&self) -> DOMString {
91        self.font_face_rule.get_descriptor(DescriptorId::FontWeight)
92    }
93
94    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontstretch>
95    fn FontStretch(&self) -> DOMString {
96        self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
97    }
98
99    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-stretch>
100    fn Font_stretch(&self) -> DOMString {
101        self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
102    }
103
104    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontwidth>
105    fn FontWidth(&self) -> DOMString {
106        self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
107    }
108
109    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-width>
110    fn Font_width(&self) -> DOMString {
111        self.font_face_rule.get_descriptor(DescriptorId::FontWidth)
112    }
113
114    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-unicoderange>
115    fn UnicodeRange(&self) -> DOMString {
116        self.font_face_rule
117            .get_descriptor(DescriptorId::UnicodeRange)
118    }
119
120    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-unicode-range>
121    fn Unicode_range(&self) -> DOMString {
122        self.font_face_rule
123            .get_descriptor(DescriptorId::UnicodeRange)
124    }
125
126    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontfeaturesettings>
127    fn FontFeatureSettings(&self) -> DOMString {
128        self.font_face_rule
129            .get_descriptor(DescriptorId::FontFeatureSettings)
130    }
131
132    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-feature-settings>
133    fn Font_feature_settings(&self) -> DOMString {
134        self.font_face_rule
135            .get_descriptor(DescriptorId::FontFeatureSettings)
136    }
137
138    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontvariationsettings>
139    fn FontVariationSettings(&self) -> DOMString {
140        self.font_face_rule
141            .get_descriptor(DescriptorId::FontVariationSettings)
142    }
143
144    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-variation-settings>
145    fn Font_variation_settings(&self) -> DOMString {
146        self.font_face_rule
147            .get_descriptor(DescriptorId::FontVariationSettings)
148    }
149
150    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontdisplay>
151    fn FontDisplay(&self) -> DOMString {
152        self.font_face_rule
153            .get_descriptor(DescriptorId::FontDisplay)
154    }
155
156    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-display>
157    fn Font_display(&self) -> DOMString {
158        self.font_face_rule
159            .get_descriptor(DescriptorId::FontDisplay)
160    }
161
162    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontlanguageoverride>
163    fn FontLanguageOverride(&self) -> DOMString {
164        self.font_face_rule
165            .get_descriptor(DescriptorId::FontLanguageOverride)
166    }
167
168    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-language-override>
169    fn Font_language_override(&self) -> DOMString {
170        self.font_face_rule
171            .get_descriptor(DescriptorId::FontLanguageOverride)
172    }
173
174    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-ascentoverride>
175    fn AscentOverride(&self) -> DOMString {
176        self.font_face_rule
177            .get_descriptor(DescriptorId::AscentOverride)
178    }
179
180    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-ascent-override>
181    fn Ascent_override(&self) -> DOMString {
182        self.font_face_rule
183            .get_descriptor(DescriptorId::AscentOverride)
184    }
185
186    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-descentoverride>
187    fn DescentOverride(&self) -> DOMString {
188        self.font_face_rule
189            .get_descriptor(DescriptorId::DescentOverride)
190    }
191
192    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-descent-override>
193    fn Descent_override(&self) -> DOMString {
194        self.font_face_rule
195            .get_descriptor(DescriptorId::DescentOverride)
196    }
197
198    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-linegapoverride>
199    fn LineGapOverride(&self) -> DOMString {
200        self.font_face_rule
201            .get_descriptor(DescriptorId::LineGapOverride)
202    }
203
204    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-line-gap-override>
205    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}