script/dom/
resizeobserverentry.rs1use dom_struct::dom_struct;
6use js::rust::MutableHandleValue;
7
8use crate::dom::bindings::codegen::Bindings::ResizeObserverEntryBinding::ResizeObserverEntryMethods;
9use crate::dom::bindings::reflector::{Reflector, reflect_dom_object_with_proto};
10use crate::dom::bindings::root::{Dom, DomRoot};
11use crate::dom::bindings::utils::to_frozen_array;
12use crate::dom::domrectreadonly::DOMRectReadOnly;
13use crate::dom::element::Element;
14use crate::dom::resizeobserversize::ResizeObserverSize;
15use crate::dom::window::Window;
16use crate::script_runtime::{CanGc, JSContext as SafeJSContext};
17
18#[dom_struct]
20pub(crate) struct ResizeObserverEntry {
21 reflector_: Reflector,
22 target: Dom<Element>,
24 content_rect: Dom<DOMRectReadOnly>,
26 border_box_size: Vec<Dom<ResizeObserverSize>>,
28 content_box_size: Vec<Dom<ResizeObserverSize>>,
30 device_pixel_content_box_size: Vec<Dom<ResizeObserverSize>>,
32}
33
34impl ResizeObserverEntry {
35 fn new_inherited(
36 target: &Element,
37 content_rect: &DOMRectReadOnly,
38 border_box_size: &[&ResizeObserverSize],
39 content_box_size: &[&ResizeObserverSize],
40 device_pixel_content_box_size: &[&ResizeObserverSize],
41 ) -> ResizeObserverEntry {
42 ResizeObserverEntry {
43 reflector_: Reflector::new(),
44 target: Dom::from_ref(target),
45 content_rect: Dom::from_ref(content_rect),
46 border_box_size: border_box_size
47 .iter()
48 .map(|size| Dom::from_ref(*size))
49 .collect(),
50 content_box_size: content_box_size
51 .iter()
52 .map(|size| Dom::from_ref(*size))
53 .collect(),
54 device_pixel_content_box_size: device_pixel_content_box_size
55 .iter()
56 .map(|size| Dom::from_ref(*size))
57 .collect(),
58 }
59 }
60
61 pub(crate) fn new(
62 window: &Window,
63 target: &Element,
64 content_rect: &DOMRectReadOnly,
65 border_box_size: &[&ResizeObserverSize],
66 content_box_size: &[&ResizeObserverSize],
67 device_pixel_content_box_size: &[&ResizeObserverSize],
68 can_gc: CanGc,
69 ) -> DomRoot<ResizeObserverEntry> {
70 let entry = Box::new(ResizeObserverEntry::new_inherited(
71 target,
72 content_rect,
73 border_box_size,
74 content_box_size,
75 device_pixel_content_box_size,
76 ));
77 reflect_dom_object_with_proto(entry, window, None, can_gc)
78 }
79}
80
81impl ResizeObserverEntryMethods<crate::DomTypeHolder> for ResizeObserverEntry {
82 fn Target(&self) -> DomRoot<Element> {
84 DomRoot::from_ref(&*self.target)
85 }
86
87 fn ContentRect(&self) -> DomRoot<DOMRectReadOnly> {
89 DomRoot::from_ref(&*self.content_rect)
90 }
91
92 fn BorderBoxSize(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
94 let sizes: Vec<DomRoot<ResizeObserverSize>> = self
95 .border_box_size
96 .iter()
97 .map(|size| DomRoot::from_ref(&**size))
98 .collect();
99 to_frozen_array(sizes.as_slice(), cx, retval, can_gc);
100 }
101
102 fn ContentBoxSize(&self, cx: SafeJSContext, can_gc: CanGc, retval: MutableHandleValue) {
104 let sizes: Vec<DomRoot<ResizeObserverSize>> = self
105 .content_box_size
106 .iter()
107 .map(|size| DomRoot::from_ref(&**size))
108 .collect();
109 to_frozen_array(sizes.as_slice(), cx, retval, can_gc);
110 }
111
112 fn DevicePixelContentBoxSize(
114 &self,
115 cx: SafeJSContext,
116 can_gc: CanGc,
117 retval: MutableHandleValue,
118 ) {
119 let sizes: Vec<DomRoot<ResizeObserverSize>> = self
120 .device_pixel_content_box_size
121 .iter()
122 .map(|size| DomRoot::from_ref(&**size))
123 .collect();
124 to_frozen_array(sizes.as_slice(), cx, retval, can_gc);
125 }
126}