1
1
use shared:: ShaderConstants ;
2
2
use winit:: {
3
- event:: { Event , KeyboardInput , VirtualKeyCode , WindowEvent } ,
3
+ event:: { ElementState , Event , KeyboardInput , MouseButton , VirtualKeyCode , WindowEvent } ,
4
4
event_loop:: { ControlFlow , EventLoop } ,
5
5
window:: Window ,
6
6
} ;
@@ -101,6 +101,11 @@ async fn run(
101
101
. map ( |surface| device. create_swap_chain ( & surface, & sc_desc) ) ;
102
102
103
103
let start = std:: time:: Instant :: now ( ) ;
104
+ let mut mouse_left_pressed = false ;
105
+ let ( mut cursor_x, mut cursor_y) = ( 0.0 , 0.0 ) ;
106
+ let ( mut last_lmb_down_x, mut last_lmb_down_y) = ( 0.0 , 0.0 ) ;
107
+ let mut mouse_clicked = false ;
108
+ let ( mut last_click_x, mut last_click_y) = ( 0.0 , 0.0 ) ;
104
109
105
110
event_loop. run ( move |event, _, control_flow| {
106
111
// Have the closure take ownership of the resources.
@@ -157,7 +162,14 @@ async fn run(
157
162
width : window. inner_size ( ) . width ,
158
163
height : window. inner_size ( ) . height ,
159
164
time : start. elapsed ( ) . as_secs_f32 ( ) ,
165
+ last_lmb_down_x,
166
+ last_lmb_down_y,
167
+ last_click_x,
168
+ last_click_y,
169
+ mouse_left_pressed,
170
+ mouse_clicked,
160
171
} ;
172
+ mouse_clicked = false ;
161
173
rpass. set_pipeline ( & render_pipeline) ;
162
174
rpass. set_push_constants ( wgpu:: ShaderStage :: all ( ) , 0 , unsafe {
163
175
any_as_u32_slice ( & push_constants)
@@ -184,6 +196,35 @@ async fn run(
184
196
} ,
185
197
..
186
198
} => * control_flow = ControlFlow :: Exit ,
199
+ Event :: WindowEvent {
200
+ event :
201
+ WindowEvent :: MouseInput {
202
+ state,
203
+ button : MouseButton :: Left ,
204
+ ..
205
+ } ,
206
+ ..
207
+ } => {
208
+ mouse_left_pressed = state == ElementState :: Pressed ;
209
+ if mouse_left_pressed {
210
+ last_lmb_down_x = cursor_x;
211
+ last_lmb_down_y = cursor_y;
212
+ last_click_x = cursor_x;
213
+ last_click_y = cursor_y;
214
+ mouse_clicked = true ;
215
+ }
216
+ }
217
+ Event :: WindowEvent {
218
+ event : WindowEvent :: CursorMoved { position, .. } ,
219
+ ..
220
+ } => {
221
+ cursor_x = position. x as f32 ;
222
+ cursor_y = position. y as f32 ;
223
+ if mouse_left_pressed {
224
+ last_lmb_down_x = cursor_x;
225
+ last_lmb_down_y = cursor_y;
226
+ }
227
+ }
187
228
_ => { }
188
229
}
189
230
} ) ;
0 commit comments