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