src/Tools/Graphview/src/graph_panel.scala
changeset 49745 083accbfa77d
parent 49735 30e2f3f1c623
child 49954 44658062d822
equal deleted inserted replaced
49744:84904ce4905b 49745:083accbfa77d
   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)