瀏覽代碼

Add step_zoom method

Johannes Hofmann 8 年之前
父節點
當前提交
e735fafcda
共有 2 個檔案被更改,包括 15 行新增2 行删除
  1. 2
    2
      src/main.rs
  2. 13
    0
      src/map_view_gl.rs

+ 2
- 2
src/main.rs 查看文件

140
                     Action::Redraw
140
                     Action::Redraw
141
                 },
141
                 },
142
                 VirtualKeyCode::Add => {
142
                 VirtualKeyCode::Add => {
143
-                    map.zoom(0.25);
143
+                    map.step_zoom(1, 0.5);
144
                     Action::Redraw
144
                     Action::Redraw
145
                 },
145
                 },
146
                 VirtualKeyCode::Subtract => {
146
                 VirtualKeyCode::Subtract => {
147
-                    map.zoom(-0.25);
147
+                    map.step_zoom(-1, 0.5);
148
                     Action::Redraw
148
                     Action::Redraw
149
                 },
149
                 },
150
                 _ => Action::Nothing,
150
                 _ => Action::Nothing,

+ 13
- 0
src/map_view_gl.rs 查看文件

159
         self.buf.draw(DrawMode::Triangles);
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
     pub fn zoom(&mut self, zoom_delta: f64) {
175
     pub fn zoom(&mut self, zoom_delta: f64) {
163
         if self.map_view.zoom2 + zoom_delta < 0.0 {
176
         if self.map_view.zoom2 + zoom_delta < 0.0 {
164
             self.map_view.set_zoom(0.0);
177
             self.map_view.set_zoom(0.0);