diff -r 013afe9ee040 -r b465e2c34f23 graph_displayer_canvas-event.cc --- a/graph_displayer_canvas-event.cc Wed Jan 10 14:56:16 2007 +0000 +++ b/graph_displayer_canvas-event.cc Fri Feb 02 10:13:33 2007 +0000 @@ -95,6 +95,45 @@ return actual_tool; } +bool GraphDisplayerCanvas::scrollEventHandler(GdkEvent* e) +{ + bool handled=false; + if(e->type==GDK_SCROLL) + { + + //pointer shows this win point before zoom + XY win_coord(((GdkEventScroll*)e)->x, ((GdkEventScroll*)e)->y); + + //the original scroll settings + int scroll_offset_x, scroll_offset_y; + get_scroll_offsets(scroll_offset_x, scroll_offset_y); + + //pointer shows this canvas point before zoom + XY canvas_coord; + window_to_world(win_coord.x, win_coord.y, canvas_coord.x, canvas_coord.y); + + if(((GdkEventScroll*)e)->direction) //IN + { + zoomIn(); + } + else + { + zoomOut(); + } + + //pointer shows this window point after zoom + XY post_win_coord; + world_to_window(canvas_coord.x, canvas_coord.y, post_win_coord.x, post_win_coord.y); + + //we have to add the difference between new and old window point to original scroll offset + scroll_to(scroll_offset_x+(int)(post_win_coord.x-win_coord.x),scroll_offset_y+(int)(post_win_coord.y-win_coord.y)); + + //no other eventhandler is needed + handled=true; + } + return handled; +} + bool GraphDisplayerCanvas::moveEventHandler(GdkEvent* e) { static Gnome::Canvas::Text *coord_text = 0;