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_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            // 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_with_cx(
43            Box::new(CSSFontFaceDescriptors::new_inherited(font_face_rule)),
44            global,
45            cx,
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
97            .get_descriptor(DescriptorId::FontStretch)
98    }
99
100    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-stretch>
101    fn Font_stretch(&self) -> DOMString {
102        self.font_face_rule
103            .get_descriptor(DescriptorId::FontStretch)
104    }
105
106    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontwidth>
107    fn FontWidth(&self) -> DOMString {
108        self.font_face_rule
109            .get_descriptor(DescriptorId::FontStretch)
110    }
111
112    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-width>
113    fn Font_width(&self) -> DOMString {
114        self.font_face_rule
115            .get_descriptor(DescriptorId::FontStretch)
116    }
117
118    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-unicoderange>
119    fn UnicodeRange(&self) -> DOMString {
120        self.font_face_rule
121            .get_descriptor(DescriptorId::UnicodeRange)
122    }
123
124    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-unicode-range>
125    fn Unicode_range(&self) -> DOMString {
126        self.font_face_rule
127            .get_descriptor(DescriptorId::UnicodeRange)
128    }
129
130    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontfeaturesettings>
131    fn FontFeatureSettings(&self) -> DOMString {
132        self.font_face_rule
133            .get_descriptor(DescriptorId::FontFeatureSettings)
134    }
135
136    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-feature-settings>
137    fn Font_feature_settings(&self) -> DOMString {
138        self.font_face_rule
139            .get_descriptor(DescriptorId::FontFeatureSettings)
140    }
141
142    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontvariationsettings>
143    fn FontVariationSettings(&self) -> DOMString {
144        self.font_face_rule
145            .get_descriptor(DescriptorId::FontVariationSettings)
146    }
147
148    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-variation-settings>
149    fn Font_variation_settings(&self) -> DOMString {
150        self.font_face_rule
151            .get_descriptor(DescriptorId::FontVariationSettings)
152    }
153
154    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontdisplay>
155    fn FontDisplay(&self) -> DOMString {
156        self.font_face_rule
157            .get_descriptor(DescriptorId::FontDisplay)
158    }
159
160    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-display>
161    fn Font_display(&self) -> DOMString {
162        self.font_face_rule
163            .get_descriptor(DescriptorId::FontDisplay)
164    }
165
166    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-fontlanguageoverride>
167    fn FontLanguageOverride(&self) -> DOMString {
168        self.font_face_rule
169            .get_descriptor(DescriptorId::FontLanguageOverride)
170    }
171
172    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-font-language-override>
173    fn Font_language_override(&self) -> DOMString {
174        self.font_face_rule
175            .get_descriptor(DescriptorId::FontLanguageOverride)
176    }
177
178    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-ascentoverride>
179    fn AscentOverride(&self) -> DOMString {
180        self.font_face_rule
181            .get_descriptor(DescriptorId::AscentOverride)
182    }
183
184    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-ascent-override>
185    fn Ascent_override(&self) -> DOMString {
186        self.font_face_rule
187            .get_descriptor(DescriptorId::AscentOverride)
188    }
189
190    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-descentoverride>
191    fn DescentOverride(&self) -> DOMString {
192        self.font_face_rule
193            .get_descriptor(DescriptorId::DescentOverride)
194    }
195
196    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-descent-override>
197    fn Descent_override(&self) -> DOMString {
198        self.font_face_rule
199            .get_descriptor(DescriptorId::DescentOverride)
200    }
201
202    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-linegapoverride>
203    fn LineGapOverride(&self) -> DOMString {
204        self.font_face_rule
205            .get_descriptor(DescriptorId::LineGapOverride)
206    }
207
208    /// <https://drafts.csswg.org/css-fonts/#dom-cssfontfacedescriptors-line-gap-override>
209    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}