/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use dom_struct::dom_struct; use crate::dom::bindings::codegen::Bindings::TextMetricsBinding::TextMetricsMethods; use crate::dom::bindings::num::Finite; use crate::dom::bindings::reflector::{Reflector, reflect_dom_object}; use crate::dom::bindings::root::DomRoot; use crate::dom::globalscope::GlobalScope; use crate::script_runtime::CanGc; #[dom_struct] #[allow(non_snake_case)] pub(crate) struct TextMetrics { reflector_: Reflector, width: Finite, actualBoundingBoxLeft: Finite, actualBoundingBoxRight: Finite, fontBoundingBoxAscent: Finite, fontBoundingBoxDescent: Finite, actualBoundingBoxAscent: Finite, actualBoundingBoxDescent: Finite, emHeightAscent: Finite, emHeightDescent: Finite, hangingBaseline: Finite, alphabeticBaseline: Finite, ideographicBaseline: Finite, } #[allow(non_snake_case)] impl TextMetrics { #[allow(clippy::too_many_arguments)] fn new_inherited( width: f64, actualBoundingBoxLeft: f64, actualBoundingBoxRight: f64, fontBoundingBoxAscent: f64, fontBoundingBoxDescent: f64, actualBoundingBoxAscent: f64, actualBoundingBoxDescent: f64, emHeightAscent: f64, emHeightDescent: f64, hangingBaseline: f64, alphabeticBaseline: f64, ideographicBaseline: f64, ) -> TextMetrics { TextMetrics { reflector_: Reflector::new(), width: Finite::wrap(width), actualBoundingBoxLeft: Finite::wrap(actualBoundingBoxLeft), actualBoundingBoxRight: Finite::wrap(actualBoundingBoxRight), fontBoundingBoxAscent: Finite::wrap(fontBoundingBoxAscent), fontBoundingBoxDescent: Finite::wrap(fontBoundingBoxDescent), actualBoundingBoxAscent: Finite::wrap(actualBoundingBoxAscent), actualBoundingBoxDescent: Finite::wrap(actualBoundingBoxDescent), emHeightAscent: Finite::wrap(emHeightAscent), emHeightDescent: Finite::wrap(emHeightDescent), hangingBaseline: Finite::wrap(hangingBaseline), alphabeticBaseline: Finite::wrap(alphabeticBaseline), ideographicBaseline: Finite::wrap(ideographicBaseline), } } #[allow(clippy::too_many_arguments)] pub(crate) fn new( global: &GlobalScope, width: f64, actualBoundingBoxLeft: f64, actualBoundingBoxRight: f64, fontBoundingBoxAscent: f64, fontBoundingBoxDescent: f64, actualBoundingBoxAscent: f64, actualBoundingBoxDescent: f64, emHeightAscent: f64, emHeightDescent: f64, hangingBaseline: f64, alphabeticBaseline: f64, ideographicBaseline: f64, can_gc: CanGc, ) -> DomRoot { reflect_dom_object( Box::new(TextMetrics::new_inherited( width, actualBoundingBoxLeft, actualBoundingBoxRight, fontBoundingBoxAscent, fontBoundingBoxDescent, actualBoundingBoxAscent, actualBoundingBoxDescent, emHeightAscent, emHeightDescent, hangingBaseline, alphabeticBaseline, ideographicBaseline, )), global, can_gc, ) } } impl TextMetricsMethods for TextMetrics { /// fn Width(&self) -> Finite { self.width } /// fn ActualBoundingBoxLeft(&self) -> Finite { self.actualBoundingBoxLeft } /// fn ActualBoundingBoxRight(&self) -> Finite { self.actualBoundingBoxRight } /// fn FontBoundingBoxAscent(&self) -> Finite { self.fontBoundingBoxAscent } /// fn FontBoundingBoxDescent(&self) -> Finite { self.fontBoundingBoxDescent } /// fn ActualBoundingBoxAscent(&self) -> Finite { self.actualBoundingBoxAscent } /// fn ActualBoundingBoxDescent(&self) -> Finite { self.actualBoundingBoxDescent } /// fn EmHeightAscent(&self) -> Finite { self.emHeightAscent } /// fn EmHeightDescent(&self) -> Finite { self.emHeightDescent } /// fn HangingBaseline(&self) -> Finite { self.hangingBaseline } /// fn AlphabeticBaseline(&self) -> Finite { self.alphabeticBaseline } /// fn IdeographicBaseline(&self) -> Finite { self.ideographicBaseline } }