aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/resizeobserversize.rs
diff options
context:
space:
mode:
authorGregory Terzian <2792687+gterzian@users.noreply.github.com>2024-06-18 00:44:07 +0800
committerGitHub <noreply@github.com>2024-06-17 16:44:07 +0000
commit3d78d60619cb1eda22f4473c91c45cc6a7907244 (patch)
treeda2072a41d0956187c55f0d456d8046d8d794114 /components/script/dom/resizeobserversize.rs
parent3c1c395dfc60ca202834f9c708fffda71606bf1a (diff)
downloadservo-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.rs67
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()
+ }
+}