Pārlūkot izejas kodu

Add step_zoom method

Johannes Hofmann 8 gadus atpakaļ
vecāks
revīzija
e735fafcda
2 mainītis faili ar 15 papildinājumiem un 2 dzēšanām
  1. 2
    2
      src/main.rs
  2. 13
    0
      src/map_view_gl.rs

+ 2
- 2
src/main.rs Parādīt failu

@@ -140,11 +140,11 @@ fn handle_event(event: &Event, map: &mut MapViewGl, input_state: &mut InputState
140 140
                     Action::Redraw
141 141
                 },
142 142
                 VirtualKeyCode::Add => {
143
-                    map.zoom(0.25);
143
+                    map.step_zoom(1, 0.5);
144 144
                     Action::Redraw
145 145
                 },
146 146
                 VirtualKeyCode::Subtract => {
147
-                    map.zoom(-0.25);
147
+                    map.step_zoom(-1, 0.5);
148 148
                     Action::Redraw
149 149
                 },
150 150
                 _ => Action::Nothing,

+ 13
- 0
src/map_view_gl.rs Parādīt failu

@@ -159,6 +159,19 @@ impl<'a> MapViewGl<'a> {
159 159
         self.buf.draw(DrawMode::Triangles);
160 160
     }
161 161
 
162
+    pub fn step_zoom(&mut self, steps: i32, step_size: f64) {
163
+        let new_zoom = {
164
+            let z = (self.map_view.zoom2 + f64::from(steps) * step_size) / step_size;
165
+            if steps > 0 {
166
+                z.ceil() * step_size
167
+            } else {
168
+                z.floor() * step_size
169
+            }
170
+        }.max(0.0).min(22.0);
171
+
172
+        self.map_view.set_zoom(new_zoom);
173
+    }
174
+
162 175
     pub fn zoom(&mut self, zoom_delta: f64) {
163 176
         if self.map_view.zoom2 + zoom_delta < 0.0 {
164 177
             self.map_view.set_zoom(0.0);