@@ -7,7 +7,7 @@ use bevy::window::WindowResized;
77
88use bevy_asset_loader:: AssetLoader ;
99
10- use crate :: prelude:: * ;
10+ use crate :: { prelude:: * , settings :: layout_settings :: LayoutMode } ;
1111use crate :: ui:: viewer:: TabViewerPlugin ;
1212use crate :: viewer:: control:: ControlView ;
1313
@@ -108,7 +108,9 @@ impl NotationApp {
108108 app. add_system_set (
109109 SystemSet :: on_update ( NotationAssetsStates :: Loaded )
110110 . with_system ( on_window_resized. system ( ) )
111- . with_system ( handle_inputs. system ( ) )
111+ . with_system ( handle_keyboard_inputs. system ( ) )
112+ . with_system ( handle_mouse_inputs. system ( ) )
113+ . with_system ( handle_touch_inputs. system ( ) )
112114 . with_system ( load_tab. system ( ) )
113115 ) ;
114116
@@ -151,26 +153,17 @@ fn load_tab(
151153 }
152154}
153155
154- fn handle_inputs (
156+ fn handle_keyboard_inputs (
155157 mut commands : Commands ,
156- windows : Res < Windows > ,
157158 keyboard_input : Res < Input < KeyCode > > ,
158- mouse_input : Res < Input < MouseButton > > ,
159- mut mouse_motion_events : EventReader < MouseMotion > ,
160159 mut state : ResMut < NotationAppState > ,
161160 mut settings : ResMut < NotationSettings > ,
162161 mut midi_state : ResMut < MidiState > ,
163162 mut play_control_evts : EventWriter < PlayControlEvent > ,
164- mut mouse_clicked : EventWriter < MouseClickedEvent > ,
165- mut mouse_dragged : EventWriter < MouseDraggedEvent > ,
166163 mut window_resized_evts : EventWriter < WindowResizedEvent > ,
167164 viewer_query : Query < ( Entity , & Arc < NotationViewer > ) , With < Arc < NotationViewer > > > ,
168165) {
169- if keyboard_input. pressed ( KeyCode :: LControl ) {
170- settings. mouse_dragged_panning = true ;
171- } else if keyboard_input. just_released ( KeyCode :: LControl ) {
172- settings. mouse_dragged_panning = false ;
173- } else if keyboard_input. just_released ( KeyCode :: Tab ) {
166+ if keyboard_input. just_released ( KeyCode :: Tab ) {
174167 state. hide_control = !state. hide_control ;
175168 if !ControlView :: HUD_MODE {
176169 window_resized_evts. send ( WindowResizedEvent ( ) ) ;
@@ -181,19 +174,65 @@ fn handle_inputs(
181174 crate :: viewer:: control:: ControlView :: play_or_stop ( & mut midi_state, & mut play_control_evts) ;
182175 } else if keyboard_input. just_released ( KeyCode :: Backslash ) {
183176 crate :: viewer:: control:: ControlView :: toggle_layout_mode ( & mut commands, & mut state, & mut settings, & viewer_query) ;
184- } else if mouse_input. just_released ( MouseButton :: Left ) {
177+ }
178+ }
179+
180+ fn handle_mouse_inputs (
181+ windows : Res < Windows > ,
182+ mouse_input : Res < Input < MouseButton > > ,
183+ mut settings : ResMut < NotationSettings > ,
184+ mut mouse_motion_events : EventReader < MouseMotion > ,
185+ mut mouse_wheel_input : EventReader < bevy:: input:: mouse:: MouseWheel > ,
186+ mut mouse_clicked : EventWriter < MouseClickedEvent > ,
187+ mut mouse_dragged : EventWriter < MouseDraggedEvent > ,
188+ ) {
189+ if mouse_input. just_released ( MouseButton :: Left ) {
185190 windows
186191 . get_primary ( )
187192 . and_then ( |x| x. cursor_position ( ) )
188193 . map ( |cursor_position| {
189194 //println!("handle_inputs() -> MouseClickedEvent({:?})", cursor_position);
190195 mouse_clicked. send ( MouseClickedEvent { cursor_position } ) ;
191196 } ) ;
197+ } else if mouse_input. just_pressed ( MouseButton :: Right ) {
198+ } else if mouse_input. just_released ( MouseButton :: Right ) {
199+ } else if mouse_input. pressed ( MouseButton :: Right ) {
200+ for event in mouse_motion_events. iter ( ) {
201+ //println!("handle_inputs() -> MouseDraggedEvent({:?})", event.delta);
202+ mouse_dragged. send ( MouseDraggedEvent { delta : event. delta } ) ;
203+ }
192204 } else {
193- if mouse_input. pressed ( MouseButton :: Left ) {
194- for event in mouse_motion_events. iter ( ) {
195- //println!("handle_inputs() -> MouseDraggedEvent({:?})", event.delta);
196- mouse_dragged. send ( MouseDraggedEvent { delta : event. delta } ) ;
205+ for event in mouse_wheel_input. iter ( ) {
206+ let mut delta = match event. unit {
207+ bevy:: input:: mouse:: MouseScrollUnit :: Line =>
208+ Vec2 :: new ( event. x * settings. panning_line_size , event. y * settings. panning_line_size ) ,
209+ bevy:: input:: mouse:: MouseScrollUnit :: Pixel =>
210+ Vec2 :: new ( event. x , event. y ) ,
211+ } ;
212+ if settings. layout . mode == LayoutMode :: Line {
213+ delta = Vec2 :: new ( delta. y , delta. x ) ;
214+ }
215+ mouse_dragged. send ( MouseDraggedEvent { delta : delta } ) ;
216+ }
217+ }
218+ }
219+
220+ fn handle_touch_inputs (
221+ touch_input : Res < Touches > ,
222+ mut mouse_clicked : EventWriter < MouseClickedEvent > ,
223+ mut mouse_dragged : EventWriter < MouseDraggedEvent > ,
224+ ) {
225+ for ( index, finger) in touch_input. iter ( ) . enumerate ( ) {
226+ if index == 0 {
227+ if touch_input. just_pressed ( finger. id ( ) ) {
228+ mouse_clicked. send ( MouseClickedEvent { cursor_position : finger. position ( ) } ) ;
229+ }
230+ } else if index == 1 {
231+ if touch_input. just_pressed ( finger. id ( ) ) {
232+ } else if touch_input. just_released ( finger. id ( ) ) {
233+ } else {
234+ let delta = finger. position ( ) - finger. previous_position ( ) ;
235+ mouse_dragged. send ( MouseDraggedEvent { delta : delta } ) ;
197236 }
198237 }
199238 }
0 commit comments