mouse_pressure.rs

 1#![cfg_attr(target_family = "wasm", no_main)]
 2
 3use gpui::{
 4    App, Bounds, Context, MousePressureEvent, PressureStage, Window, WindowBounds, WindowOptions,
 5    div, prelude::*, px, rgb, size,
 6};
 7use gpui_platform::application;
 8
 9struct MousePressureExample {
10    pressure_stage: PressureStage,
11    pressure_amount: f32,
12}
13
14impl Render for MousePressureExample {
15    fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
16        div()
17            .flex()
18            .flex_col()
19            .gap_3()
20            .bg(rgb(0x505050))
21            .size(px(500.0))
22            .justify_center()
23            .items_center()
24            .shadow_lg()
25            .border_1()
26            .border_color(rgb(0x0000ff))
27            .text_xl()
28            .text_color(rgb(0xffffff))
29            .child(format!("Pressure stage: {:?}", &self.pressure_stage))
30            .child(format!("Pressure amount: {:.2}", &self.pressure_amount))
31            .on_mouse_pressure(cx.listener(Self::on_mouse_pressure))
32    }
33}
34
35impl MousePressureExample {
36    fn on_mouse_pressure(
37        &mut self,
38        pressure_event: &MousePressureEvent,
39        _window: &mut Window,
40        cx: &mut Context<Self>,
41    ) {
42        self.pressure_amount = pressure_event.pressure;
43        self.pressure_stage = pressure_event.stage;
44
45        cx.notify();
46    }
47}
48
49fn run_example() {
50    application().run(|cx: &mut App| {
51        let bounds = Bounds::centered(None, size(px(500.), px(500.0)), cx);
52
53        cx.open_window(
54            WindowOptions {
55                window_bounds: Some(WindowBounds::Windowed(bounds)),
56                ..Default::default()
57            },
58            |_, cx| {
59                cx.new(|_| MousePressureExample {
60                    pressure_stage: PressureStage::Zero,
61                    pressure_amount: 0.0,
62                })
63            },
64        )
65        .unwrap();
66
67        cx.activate(true);
68    });
69}
70
71#[cfg(not(target_family = "wasm"))]
72fn main() {
73    run_example();
74}
75
76#[cfg(target_family = "wasm")]
77#[wasm_bindgen::prelude::wasm_bindgen(start)]
78pub fn start() {
79    gpui_platform::web_init();
80    run_example();
81}