comparison standard_tools.d @ 8:bf7903435f58

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sat, 11 Jul 2009 21:49:04 +0930
parents 936feb16eed4
children 66b47e122b31
comparison
equal deleted inserted replaced
7:936feb16eed4 8:bf7903435f58
3 import tool; 3 import tool;
4 import icanvas; 4 import icanvas;
5 import tk.types; 5 import tk.types;
6 import tk.events; 6 import tk.events;
7 import tk.geometry; 7 import tk.geometry;
8 import std.math;
8 9
9 final class PanTool : Tool { 10 final class PanTool : Tool {
10 bool handle_button_press(ICanvas canvas, in ButtonEvent event) { 11 bool handle_button_press(ICanvas canvas, in ButtonEvent event) {
11 if (event.button_name == ButtonName.MIDDLE) { 12 if (event.button_name == ButtonName.MIDDLE) {
13 mLastPosition = event.screen_point;
12 return true; 14 return true;
13 } 15 }
14 else { 16 else {
15 return false; 17 return false;
16 } 18 }
17 } 19 }
18 20
19 bool handle_button_release(ICanvas canvas, in ButtonEvent event) { 21 bool handle_button_release(ICanvas canvas, in ButtonEvent event) {
20 return false; 22 return true;
21 } 23 }
22 24
23 bool handle_motion(ICanvas canvas, in MotionEvent event) { 25 bool handle_motion(ICanvas canvas, in MotionEvent event) {
24 return false; 26 if (event.mask.is_set(Modifier.BUTTON_MIDDLE)) {
27 canvas.rel_pan(mLastPosition - event.screen_point);
28 mLastPosition = event.screen_point;
29
30 return true;
31 }
32 else {
33 return false;
34 }
25 } 35 }
26 36
27 bool handle_scroll(ICanvas canvas, in ScrollEvent event) { 37 bool handle_scroll(ICanvas canvas, in ScrollEvent event) {
28 const double AMOUNT = 30.0; 38 if (event.mask.is_unset(Modifier.BUTTON_MIDDLE)) {
29 Vector v; 39 const double AMOUNT = 60.0;
40 Vector v;
30 41
31 if (event.mask.is_set(Modifier.SHIFT)) { 42 switch (event.scroll_direction) {
32 // left to right 43 case ScrollDirection.UP:
33 v = Vector(AMOUNT, 0.0); 44 v = event.mask.is_set(Modifier.SHIFT) ? Vector(-AMOUNT, 0.0) : Vector(0.0, -AMOUNT);
45 break;
46 case ScrollDirection.DOWN:
47 v = event.mask.is_set(Modifier.SHIFT) ? Vector(AMOUNT, 0.0) : Vector(0.0, AMOUNT);
48 break;
49 case ScrollDirection.LEFT:
50 v = Vector(-AMOUNT, 0.0);
51 break;
52 case ScrollDirection.RIGHT:
53 v = Vector(AMOUNT, 0.0);
54 break;
55 }
56
57 canvas.rel_pan(v);
34 } 58 }
35 else {
36 // down to up
37 v = Vector(0.0, AMOUNT);
38 }
39
40 if (event.scroll_direction == ScrollDirection.UP) {
41 v = -v;
42 }
43
44 canvas.rel_pan(v);
45 59
46 return true; 60 return true;
47 } 61 }
48 62
49 bool handle_key_press(ICanvas canvas, in KeyEvent event) { 63 bool handle_key_press(ICanvas canvas, in KeyEvent event) {
51 } 65 }
52 66
53 bool handle_key_release(ICanvas canvas, in KeyEvent event) { 67 bool handle_key_release(ICanvas canvas, in KeyEvent event) {
54 return false; 68 return false;
55 } 69 }
70
71 private {
72 Point mLastPosition;
73 }
56 } 74 }
57 75
58 final class ZoomTool : Tool { 76 final class ZoomTool : Tool {
59 static invariant double ZOOM = 1.44; 77 static invariant double ZOOM = sqrt(2.0);
60 78
61 bool handle_button_press(ICanvas canvas, in ButtonEvent event) { 79 bool handle_button_press(ICanvas canvas, in ButtonEvent event) {
62 return false; 80 return false;
63 } 81 }
64 82