polyhorn_ui/components/
view.rs

1use polyhorn_core::{Platform, WeakReference};
2
3use crate::events::EventListener;
4use crate::geometry::Size;
5use crate::handles::{Imperative, ViewHandle};
6use crate::styles::ViewStyle;
7
8/// The base component.
9pub struct View<P, H>
10where
11    P: Platform + ?Sized,
12    H: ViewHandle + 'static,
13{
14    /// Controls the appearance and layout of a View.
15    pub style: ViewStyle,
16
17    /// Called when the user cancels pressing a View.
18    pub on_pointer_cancel: EventListener<()>,
19
20    /// Called when the user starts pressing a View.
21    pub on_pointer_down: EventListener<()>,
22
23    /// Called when the user stops pressing a View.
24    pub on_pointer_up: EventListener<()>,
25
26    /// Called when a View is layed out.
27    pub on_layout: EventListener<Size<f32>>,
28
29    /// This is a reference to an imperative view handle that can be used to
30    /// measure the dimensions of this view or schedule animations.
31    pub reference: Option<WeakReference<P, Option<H>>>,
32}
33
34impl<P, H> Default for View<P, H>
35where
36    P: Platform + ?Sized,
37    H: ViewHandle,
38{
39    fn default() -> Self {
40        View {
41            style: Default::default(),
42            on_pointer_cancel: Default::default(),
43            on_pointer_down: Default::default(),
44            on_pointer_up: Default::default(),
45            on_layout: Default::default(),
46            reference: Default::default(),
47        }
48    }
49}
50
51impl<P, H> Imperative for View<P, H>
52where
53    P: Platform + ?Sized,
54    H: ViewHandle,
55{
56    type Handle = H;
57}