aboutsummaryrefslogtreecommitdiff
path: root/src/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.rs')
-rw-r--r--src/app.rs52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/app.rs b/src/app.rs
index 3571436..8543c85 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -225,6 +225,30 @@ impl<'ctx> AppState<'ctx> {
225 self.zoom += 1; 225 self.zoom += 1;
226 } 226 }
227 227
228 fn zoom_out(&mut self, p: (i32, i32)) {
229 if self.zoom > 1 {
230 // attempt to center around cursor
231 if let Some(p) = self.idx_at_coord(p) {
232 let (x1, y1) = (p.0 * (self.zoom as u32), p.1 * (self.zoom as u32));
233 let (x2, y2) = (p.0 * (self.zoom as u32 - 1), p.1 * (self.zoom as u32 - 1));
234 let diffx = x2 as i32 - x1 as i32;
235 let diffy = y2 as i32 - y1 as i32;
236 self.start = self.start - Point::from((diffx, diffy));
237 }
238 self.zoom -= 1;
239 }
240 }
241
242 fn center_grid(&mut self) {
243 let (winsize_x, winsize_y) = self.canvas.window().size();
244 let grid_width = self.width() * self.zoom as u32;
245 let grid_height = self.height() * self.zoom as u32;
246 self.start = Point::new(
247 (winsize_x as i32 - grid_width as i32) / 2,
248 (winsize_y as i32 - grid_height as i32) / 2,
249 );
250 }
251
228 fn increase_brush_size(&mut self) { 252 fn increase_brush_size(&mut self) {
229 self.brush_size += 1; 253 self.brush_size += 1;
230 } 254 }
@@ -263,20 +287,6 @@ impl<'ctx> AppState<'ctx> {
263 self.mode = Mode::Draw; 287 self.mode = Mode::Draw;
264 } 288 }
265 289
266 fn zoom_out(&mut self, p: (i32, i32)) {
267 if self.zoom > 1 {
268 // attempt to center around cursor
269 if let Some(p) = self.idx_at_coord(p) {
270 let (x1, y1) = (p.0 * (self.zoom as u32), p.1 * (self.zoom as u32));
271 let (x2, y2) = (p.0 * (self.zoom as u32 - 1), p.1 * (self.zoom as u32 - 1));
272 let diffx = x2 as i32 - x1 as i32;
273 let diffy = y2 as i32 - y1 as i32;
274 self.start = self.start - Point::from((diffx, diffy));
275 }
276 self.zoom -= 1;
277 }
278 }
279
280 fn draw_grid(&mut self) { 290 fn draw_grid(&mut self) {
281 let cs = self.zoom as u32; 291 let cs = self.zoom as u32;
282 let (width, height) = (self.width(), self.height()); 292 let (width, height) = (self.width(), self.height());
@@ -523,7 +533,9 @@ impl<'ctx> AppState<'ctx> {
523 Mode::Draw => { 533 Mode::Draw => {
524 match event { 534 match event {
525 Event::KeyDown { 535 Event::KeyDown {
526 keycode: Some(k), .. 536 keycode: Some(k),
537 keymod,
538 ..
527 } => { 539 } => {
528 match k { 540 match k {
529 // pan 541 // pan
@@ -532,6 +544,9 @@ impl<'ctx> AppState<'ctx> {
532 Keycode::S => self.pan((0, -10)), 544 Keycode::S => self.pan((0, -10)),
533 Keycode::D => self.pan((-10, 0)), 545 Keycode::D => self.pan((-10, 0)),
534 // zoom 546 // zoom
547 Keycode::C if keymod == Mod::LSHIFTMOD => {
548 self.center_grid();
549 }
535 Keycode::C => { 550 Keycode::C => {
536 let cursor = (mouse.x(), mouse.y()); 551 let cursor = (mouse.x(), mouse.y());
537 self.zoom_in(cursor); 552 self.zoom_in(cursor);
@@ -647,11 +662,14 @@ impl<'ctx> AppState<'ctx> {
647 let video = self.context.video().unwrap(); 662 let video = self.context.video().unwrap();
648 let clipboard = video.clipboard(); 663 let clipboard = video.clipboard();
649 if is_copy_event(keycode, keymod) { 664 if is_copy_event(keycode, keymod) {
650 clipboard.set_clipboard_text(&self.command_box.text); 665 clipboard
666 .set_clipboard_text(&self.command_box.text)
667 .unwrap();
651 } else if is_paste_event(keycode, keymod) 668 } else if is_paste_event(keycode, keymod)
652 && clipboard.has_clipboard_text() 669 && clipboard.has_clipboard_text()
653 { 670 {
654 self.command_box.text = clipboard.clipboard_text().unwrap(); 671 self.command_box
672 .push_str(&clipboard.clipboard_text().unwrap());
655 } 673 }
656 } 674 }
657 if let Event::KeyDown { 675 if let Event::KeyDown {