equal
deleted
inserted
replaced
110 fit_to_window() |
110 fit_to_window() |
111 |
111 |
112 protected object Transform { |
112 protected object Transform { |
113 val padding = (4000, 2000) |
113 val padding = (4000, 2000) |
114 |
114 |
115 private var _scale = 1d |
115 private var _scale = 1.0 |
116 def scale = _scale |
116 def scale = _scale |
117 def scale_= (s: Double) = { |
117 def scale_= (s: Double) = { |
118 _scale = math.max(math.min(s, 10), 0.01) |
118 _scale = math.max(math.min(s, 10), 0.01) |
119 paint_panel.set_preferred_size() |
119 paint_panel.set_preferred_size() |
120 } |
120 } |
132 scale = 1 |
132 scale = 1 |
133 else { |
133 else { |
134 val (minX, minY, maxX, maxY) = visualizer.Coordinates.bounds() |
134 val (minX, minY, maxX, maxY) = visualizer.Coordinates.bounds() |
135 |
135 |
136 val (dx, dy) = (maxX - minX + padding._1, maxY - minY + padding._2) |
136 val (dx, dy) = (maxX - minX + padding._1, maxY - minY + padding._2) |
137 val (sx, sy) = (1d * size.width / dx, 1d * size.height / dy) |
137 val (sx, sy) = (1.0 * size.width / dx, 1.0 * size.height / dy) |
138 scale = math.min(sx, sy) |
138 scale = math.min(sx, sy) |
139 } |
139 } |
140 } |
140 } |
141 |
141 |
142 def pane_to_graph_coordinates(at: Point2D): Point2D = { |
142 def pane_to_graph_coordinates(at: Point2D): Point2D = { |
156 case KeyTyped(_, c, m, _) => typed(c, m) |
156 case KeyTyped(_, c, m, _) => typed(c, m) |
157 } |
157 } |
158 |
158 |
159 def typed(c: Char, m: Modifiers) = (c, m) match { |
159 def typed(c: Char, m: Modifiers) = (c, m) match { |
160 case ('+', _) => { |
160 case ('+', _) => { |
161 Transform.scale *= 5d/4 |
161 Transform.scale *= 5.0/4 |
162 } |
162 } |
163 |
163 |
164 case ('-', _) => { |
164 case ('-', _) => { |
165 Transform.scale *= 4d/5 |
165 Transform.scale *= 4.0/5 |
166 } |
166 } |
167 |
167 |
168 case ('0', _) => { |
168 case ('0', _) => { |
169 Transform.fit_to_window() |
169 Transform.fit_to_window() |
170 } |
170 } |
281 } |
281 } |
282 |
282 |
283 def wheel(rotation: Int, at: Point) { |
283 def wheel(rotation: Int, at: Point) { |
284 val at2 = Transform.pane_to_graph_coordinates(at) |
284 val at2 = Transform.pane_to_graph_coordinates(at) |
285 // > 0 -> up |
285 // > 0 -> up |
286 Transform.scale *= (if (rotation > 0) 4d/5 else 5d/4) |
286 Transform.scale *= (if (rotation > 0) 4.0/5 else 5.0/4) |
287 |
287 |
288 // move mouseposition to center |
288 // move mouseposition to center |
289 Transform().transform(at2, at2) |
289 Transform().transform(at2, at2) |
290 val r = panel.peer.getViewport.getViewRect |
290 val r = panel.peer.getViewport.getViewRect |
291 val (width, height) = (r.getWidth, r.getHeight) |
291 val (width, height) = (r.getWidth, r.getHeight) |