diff options
author | Gregory Terzian <2792687+gterzian@users.noreply.github.com> | 2024-06-18 00:44:07 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-17 16:44:07 +0000 |
commit | 3d78d60619cb1eda22f4473c91c45cc6a7907244 (patch) | |
tree | da2072a41d0956187c55f0d456d8046d8d794114 /components/script/dom/resizeobserversize.rs | |
parent | 3c1c395dfc60ca202834f9c708fffda71606bf1a (diff) | |
download | servo-3d78d60619cb1eda22f4473c91c45cc6a7907244.tar.gz servo-3d78d60619cb1eda22f4473c91c45cc6a7907244.zip |
implement basic infra for ResizeObserver (#31108)
Diffstat (limited to 'components/script/dom/resizeobserversize.rs')
-rw-r--r-- | components/script/dom/resizeobserversize.rs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/components/script/dom/resizeobserversize.rs b/components/script/dom/resizeobserversize.rs new file mode 100644 index 00000000000..4f63a9c711c --- /dev/null +++ b/components/script/dom/resizeobserversize.rs @@ -0,0 +1,67 @@ +/* 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::ResizeObserverSizeBinding::ResizeObserverSizeMethods; +use crate::dom::bindings::reflector::{reflect_dom_object_with_proto, Reflector}; +use crate::dom::bindings::root::DomRoot; +use crate::dom::window::Window; + +/// Non-DOM implementation backing `ResizeObserverSize`. +#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)] +pub struct ResizeObserverSizeImpl { + inline_size: f64, + block_size: f64, +} + +impl ResizeObserverSizeImpl { + pub fn new(inline_size: f64, block_size: f64) -> ResizeObserverSizeImpl { + ResizeObserverSizeImpl { + inline_size, + block_size, + } + } + + pub fn inline_size(&self) -> f64 { + self.inline_size + } + + pub fn block_size(&self) -> f64 { + self.block_size + } +} + +/// <https://drafts.csswg.org/resize-observer/#resizeobserversize> +#[dom_struct] +pub struct ResizeObserverSize { + reflector_: Reflector, + size_impl: ResizeObserverSizeImpl, +} + +impl ResizeObserverSize { + fn new_inherited(size_impl: ResizeObserverSizeImpl) -> ResizeObserverSize { + ResizeObserverSize { + reflector_: Reflector::new(), + size_impl, + } + } + + pub fn new(window: &Window, size_impl: ResizeObserverSizeImpl) -> DomRoot<ResizeObserverSize> { + let observer_size = Box::new(ResizeObserverSize::new_inherited(size_impl)); + reflect_dom_object_with_proto(observer_size, window, None) + } +} + +impl ResizeObserverSizeMethods for ResizeObserverSize { + /// <https://drafts.csswg.org/resize-observer/#dom-resizeobserversize-inlinesize> + fn InlineSize(&self) -> f64 { + self.size_impl.inline_size() + } + + /// <https://drafts.csswg.org/resize-observer/#dom-resizeobserversize-blocksize> + fn BlockSize(&self) -> f64 { + self.size_impl.block_size() + } +} |