script/dom/resizeobserver/
resizeobserverentry.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use js::rust::MutableHandleValue;
8use script_bindings::reflector::{Reflector, reflect_dom_object_with_proto_and_cx};
9
10use crate::dom::bindings::codegen::Bindings::ResizeObserverEntryBinding::ResizeObserverEntryMethods;
11use crate::dom::bindings::root::{Dom, DomRoot};
12use crate::dom::bindings::utils::to_frozen_array;
13use crate::dom::domrectreadonly::DOMRectReadOnly;
14use crate::dom::element::Element;
15use crate::dom::resizeobserversize::ResizeObserverSize;
16use crate::dom::window::Window;
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 cx: &mut JSContext,
63 window: &Window,
64 target: &Element,
65 content_rect: &DOMRectReadOnly,
66 border_box_size: &[&ResizeObserverSize],
67 content_box_size: &[&ResizeObserverSize],
68 device_pixel_content_box_size: &[&ResizeObserverSize],
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_and_cx(entry, window, None, cx)
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: &mut JSContext, 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(cx, sizes.as_slice(), retval);
100 }
101
102 fn ContentBoxSize(&self, cx: &mut JSContext, 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(cx, sizes.as_slice(), retval);
110 }
111
112 fn DevicePixelContentBoxSize(&self, cx: &mut JSContext, retval: MutableHandleValue) {
114 let sizes: Vec<DomRoot<ResizeObserverSize>> = self
115 .device_pixel_content_box_size
116 .iter()
117 .map(|size| DomRoot::from_ref(&**size))
118 .collect();
119 to_frozen_array(cx, sizes.as_slice(), retval);
120 }
121}