floating_ui_dom/
platform.rs

1pub mod convert_offset_parent_relative_rect_to_viewport_relative_rect;
2pub mod get_client_length;
3pub mod get_client_rects;
4pub mod get_clipping_rect;
5pub mod get_dimensions;
6pub mod get_element_rects;
7pub mod get_offset_parent;
8pub mod get_scale;
9pub mod is_rtl;
10
11use floating_ui_core::{
12    ConvertOffsetParentRelativeRectToViewportRelativeRectArgs, GetClippingRectArgs,
13    GetElementRectsArgs, Platform as CorePlatform,
14};
15use floating_ui_utils::dom::get_document_element;
16use floating_ui_utils::{
17    ClientRectObject, Coords, Dimensions, ElementRects, Length, OwnedElementOrWindow, Rect,
18};
19use web_sys::{Element, Window};
20
21use crate::types::ElementOrVirtual;
22
23use self::convert_offset_parent_relative_rect_to_viewport_relative_rect::convert_offset_parent_relative_rect_to_viewport_relative_rect;
24use self::get_client_length::get_client_length;
25use self::get_client_rects::get_client_rects;
26use self::get_clipping_rect::get_clipping_rect;
27use self::get_dimensions::get_dimensions;
28use self::get_element_rects::get_element_rects;
29use self::get_offset_parent::get_offset_parent;
30use self::get_scale::get_scale;
31use self::is_rtl::is_rtl;
32
33#[derive(Debug)]
34pub struct Platform {}
35
36impl CorePlatform<Element, Window> for Platform {
37    fn get_element_rects(&self, args: GetElementRectsArgs<Element>) -> ElementRects {
38        get_element_rects(self, args)
39    }
40
41    fn get_clipping_rect(&self, args: GetClippingRectArgs<Element>) -> Rect {
42        get_clipping_rect(self, args)
43    }
44
45    fn get_dimensions(&self, element: &Element) -> Dimensions {
46        get_dimensions(element)
47    }
48
49    fn convert_offset_parent_relative_rect_to_viewport_relative_rect(
50        &self,
51        args: ConvertOffsetParentRelativeRectToViewportRelativeRectArgs<Element, Window>,
52    ) -> Option<Rect> {
53        Some(convert_offset_parent_relative_rect_to_viewport_relative_rect(args))
54    }
55
56    fn get_offset_parent(
57        &self,
58        element: &Element,
59    ) -> Option<OwnedElementOrWindow<Element, Window>> {
60        Some(get_offset_parent(element, None))
61    }
62
63    fn get_document_element(&self, element: &Element) -> Option<Element> {
64        Some(get_document_element(Some(element.into())))
65    }
66
67    fn get_client_rects(&self, element: ElementOrVirtual) -> Option<Vec<ClientRectObject>> {
68        Some(get_client_rects(element))
69    }
70
71    fn is_rtl(&self, element: &Element) -> Option<bool> {
72        Some(is_rtl(element))
73    }
74
75    fn get_scale(&self, element: &Element) -> Option<Coords> {
76        Some(get_scale(element.into()))
77    }
78
79    fn get_client_length(&self, element: &Element, length: Length) -> Option<f64> {
80        Some(get_client_length(element, length))
81    }
82}