script/dom/
resizeobserversize.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;
6
7use crate::dom::bindings::codegen::Bindings::ResizeObserverSizeBinding::ResizeObserverSizeMethods;
8use crate::dom::bindings::reflector::{Reflector, reflect_dom_object_with_proto};
9use crate::dom::bindings::root::DomRoot;
10use crate::dom::window::Window;
11use crate::script_runtime::CanGc;
12
13/// Non-DOM implementation backing `ResizeObserverSize`.
14#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
15pub(crate) struct ResizeObserverSizeImpl {
16    inline_size: f64,
17    block_size: f64,
18}
19
20impl ResizeObserverSizeImpl {
21    pub(crate) fn new(inline_size: f64, block_size: f64) -> ResizeObserverSizeImpl {
22        ResizeObserverSizeImpl {
23            inline_size,
24            block_size,
25        }
26    }
27
28    pub(crate) fn inline_size(&self) -> f64 {
29        self.inline_size
30    }
31
32    pub(crate) fn block_size(&self) -> f64 {
33        self.block_size
34    }
35}
36
37/// <https://drafts.csswg.org/resize-observer/#resizeobserversize>
38#[dom_struct]
39pub(crate) struct ResizeObserverSize {
40    reflector_: Reflector,
41    size_impl: ResizeObserverSizeImpl,
42}
43
44impl ResizeObserverSize {
45    fn new_inherited(size_impl: ResizeObserverSizeImpl) -> ResizeObserverSize {
46        ResizeObserverSize {
47            reflector_: Reflector::new(),
48            size_impl,
49        }
50    }
51
52    pub(crate) fn new(
53        window: &Window,
54        size_impl: ResizeObserverSizeImpl,
55        can_gc: CanGc,
56    ) -> DomRoot<ResizeObserverSize> {
57        let observer_size = Box::new(ResizeObserverSize::new_inherited(size_impl));
58        reflect_dom_object_with_proto(observer_size, window, None, can_gc)
59    }
60}
61
62impl ResizeObserverSizeMethods<crate::DomTypeHolder> for ResizeObserverSize {
63    /// <https://drafts.csswg.org/resize-observer/#dom-resizeobserversize-inlinesize>
64    fn InlineSize(&self) -> f64 {
65        self.size_impl.inline_size()
66    }
67
68    /// <https://drafts.csswg.org/resize-observer/#dom-resizeobserversize-blocksize>
69    fn BlockSize(&self) -> f64 {
70        self.size_impl.block_size()
71    }
72}