graph_displayer_canvas-event.cc
changeset 187 b465e2c34f23
parent 179 1f436ea3ef4f
child 194 6b2b718420eb
child 204 8fec6a6472fe
     1.1 --- a/graph_displayer_canvas-event.cc	Wed Jan 10 14:56:16 2007 +0000
     1.2 +++ b/graph_displayer_canvas-event.cc	Fri Feb 02 10:13:33 2007 +0000
     1.3 @@ -95,6 +95,45 @@
     1.4    return actual_tool;
     1.5  }
     1.6  
     1.7 +bool GraphDisplayerCanvas::scrollEventHandler(GdkEvent* e)
     1.8 +{
     1.9 +  bool handled=false;
    1.10 +  if(e->type==GDK_SCROLL)
    1.11 +    {
    1.12 +
    1.13 +      //pointer shows this win point before zoom
    1.14 +      XY win_coord(((GdkEventScroll*)e)->x, ((GdkEventScroll*)e)->y);
    1.15 +
    1.16 +      //the original scroll settings
    1.17 +      int scroll_offset_x, scroll_offset_y;
    1.18 +      get_scroll_offsets(scroll_offset_x, scroll_offset_y);
    1.19 +
    1.20 +      //pointer shows this canvas point before zoom
    1.21 +      XY canvas_coord;
    1.22 +      window_to_world(win_coord.x, win_coord.y, canvas_coord.x, canvas_coord.y);
    1.23 +
    1.24 +      if(((GdkEventScroll*)e)->direction) //IN
    1.25 +	{
    1.26 +	  zoomIn();
    1.27 +	}
    1.28 +      else
    1.29 +	{
    1.30 +	  zoomOut();
    1.31 +	}
    1.32 +
    1.33 +      //pointer shows this window point after zoom
    1.34 +      XY post_win_coord;
    1.35 +      world_to_window(canvas_coord.x, canvas_coord.y, post_win_coord.x, post_win_coord.y);
    1.36 +
    1.37 +      //we have to add the difference between new and old window point to original scroll offset
    1.38 +      scroll_to(scroll_offset_x+(int)(post_win_coord.x-win_coord.x),scroll_offset_y+(int)(post_win_coord.y-win_coord.y));
    1.39 +      
    1.40 +      //no other eventhandler is needed
    1.41 +      handled=true;
    1.42 +    }
    1.43 +  return handled;
    1.44 +}
    1.45 +
    1.46  bool GraphDisplayerCanvas::moveEventHandler(GdkEvent* e)
    1.47  {
    1.48    static Gnome::Canvas::Text *coord_text = 0;