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