Bladeren bron

Use Ctrl to switch to scrolling on mouse wheel events

Johannes Hofmann 7 jaren geleden
bovenliggende
commit
cfda9c21aa
1 gewijzigde bestanden met toevoegingen van 17 en 11 verwijderingen
  1. 17
    11
      src/main.rs

+ 17
- 11
src/main.rs Bestand weergeven

@@ -93,7 +93,8 @@ fn handle_event(event: &Event, map: &mut MapViewGl, input_state: &mut InputState
93 93
                     // filter strange wheel events with huge values.
94 94
                     // (maybe this is just a personal touchpad driver issue)
95 95
                     if dx.abs() < 16.0 && dy.abs() < 16.0 {
96
-                        (dx, dy * 10.0)
96
+                        //TODO find a sensible line height value (servo (the glutin port) uses 38)
97
+                        (dx, dy * 38.0)
97 98
                     } else {
98 99
                         (0.0, 0.0)
99 100
                     }
@@ -103,16 +104,21 @@ fn handle_event(event: &Event, map: &mut MapViewGl, input_state: &mut InputState
103 104
             if let Some(p) = position {
104 105
                 input_state.mouse_position = p;
105 106
             }
106
-            //TODO option to move or zoom on mouse wheel event
107
-            //map.move_pixel(-dx as f64, -dy as f64);
108
-
109
-            map.zoom_at(
110
-                ScreenCoord::new(
111
-                    f64::from(input_state.mouse_position.0),
112
-                    f64::from(input_state.mouse_position.1),
113
-                ),
114
-                f64::from(dy) * 0.0125,
115
-            );
107
+
108
+            //TODO add option for default mouse wheel behavior (scroll or zoom?)
109
+            //TODO add option to reverse scroll/zoom direction
110
+
111
+            if input_state.ctrl_pressed() {
112
+                map.move_pixel(f64::from(-dx), f64::from(-dy));
113
+            } else {
114
+                map.zoom_at(
115
+                    ScreenCoord::new(
116
+                        f64::from(input_state.mouse_position.0),
117
+                        f64::from(input_state.mouse_position.1),
118
+                    ),
119
+                    f64::from(dy) * (1.0 / 320.0),
120
+                );
121
+            }
116 122
             Action::Redraw
117 123
         },
118 124
         Event::KeyboardInput(glutin::ElementState::Pressed, _, Some(keycode)) => {