From 9099a6c93dc194b5b08f25585fd5d4255f12de2a Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Tue, 10 Oct 2006 01:33:26 +0000 Subject: [PATCH] zoom using mousewheel --- Fltk/Opengl_Window.cpp | 100 ++++++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 40 deletions(-) diff --git a/Fltk/Opengl_Window.cpp b/Fltk/Opengl_Window.cpp index f605764577..3bfb62b1ce 100644 --- a/Fltk/Opengl_Window.cpp +++ b/Fltk/Opengl_Window.cpp @@ -1,4 +1,4 @@ -// $Id: Opengl_Window.cpp,v 1.70 2006-08-27 23:10:36 geuzaine Exp $ +// $Id: Opengl_Window.cpp,v 1.71 2006-10-10 01:33:26 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -178,8 +178,6 @@ void Opengl_Window::draw() int Opengl_Window::handle(int event) { - double dx, dy; - switch (event) { case FL_FOCUS: // accept the focus when I'm asked if I want it @@ -282,49 +280,71 @@ int Opengl_Window::handle(int event) prev.set(); return 1; - case FL_DRAG: + case FL_MOUSEWHEEL: curr.set(); - dx = curr.win[0] - prev.win[0]; - dy = curr.win[1] - prev.win[1]; - if(LassoMode) { + { + double dy = Fl::event_dy(); + double fact = (5. * CTX.zoom_factor * fabs(dy) + h()) / (double)h(); + CTX.s[0] *= ((dy > 0) ? fact : 1./fact); + CTX.s[1] = CTX.s[0]; + CTX.s[2] = CTX.s[0]; + click.recenter(); + CTX.draw_rotation_center = 1; + if(CTX.fast_redraw) { + CTX.mesh.draw = 0; + CTX.post.draw = 0; + } redraw(); } - else { - if(Fl::event_button() == 1 && - !Fl::event_state(FL_SHIFT) && !Fl::event_state(FL_ALT)) { - if(CTX.useTrackball) - CTX.addQuaternion((2. * prev.win[0] - w()) / w(), - (h() - 2. * prev.win[1]) / h(), - (2. * curr.win[0] - w()) / w(), - (h() - 2. * curr.win[1]) / h()); - else { - CTX.r[1] += ((fabs(dx) > fabs(dy)) ? 180. * dx / (double)w() : 0.); - CTX.r[0] += ((fabs(dx) > fabs(dy)) ? 0. : 180. * dy / (double)h()); - } - } - else if(Fl::event_button() == 2 || - (Fl::event_button() == 1 && Fl::event_state(FL_SHIFT))) { - if(fabs(dy) > fabs(dx)) { - double fact = (CTX.zoom_factor * fabs(dy) + h()) / (double)h(); - CTX.s[0] *= ((dy > 0) ? fact : 1./fact); - CTX.s[1] = CTX.s[0]; - CTX.s[2] = CTX.s[0]; - click.recenter(); - } - else if(!CTX.useTrackball) - CTX.r[2] += -180. * dx / (double)w(); + prev.set(); + WID->update_manip_window(); + return 1; + + case FL_DRAG: + curr.set(); + { + double dx = curr.win[0] - prev.win[0]; + double dy = curr.win[1] - prev.win[1]; + if(LassoMode) { + redraw(); } else { - CTX.t[0] += (curr.wnr[0] - click.wnr[0]); - CTX.t[1] += (curr.wnr[1] - click.wnr[1]); - CTX.t[2] = 0.; - } - CTX.draw_rotation_center = 1; - if(CTX.fast_redraw) { - CTX.mesh.draw = 0; - CTX.post.draw = 0; + if(Fl::event_button() == 1 && + !Fl::event_state(FL_SHIFT) && !Fl::event_state(FL_ALT)) { + if(CTX.useTrackball) + CTX.addQuaternion((2. * prev.win[0] - w()) / w(), + (h() - 2. * prev.win[1]) / h(), + (2. * curr.win[0] - w()) / w(), + (h() - 2. * curr.win[1]) / h()); + else { + CTX.r[1] += ((fabs(dx) > fabs(dy)) ? 180. * dx / (double)w() : 0.); + CTX.r[0] += ((fabs(dx) > fabs(dy)) ? 0. : 180. * dy / (double)h()); + } + } + else if(Fl::event_button() == 2 || + (Fl::event_button() == 1 && Fl::event_state(FL_SHIFT))) { + if(fabs(dy) > fabs(dx)) { + double fact = (CTX.zoom_factor * fabs(dy) + h()) / (double)h(); + CTX.s[0] *= ((dy > 0) ? fact : 1./fact); + CTX.s[1] = CTX.s[0]; + CTX.s[2] = CTX.s[0]; + click.recenter(); + } + else if(!CTX.useTrackball) + CTX.r[2] += -180. * dx / (double)w(); + } + else { + CTX.t[0] += (curr.wnr[0] - click.wnr[0]); + CTX.t[1] += (curr.wnr[1] - click.wnr[1]); + CTX.t[2] = 0.; + } + CTX.draw_rotation_center = 1; + if(CTX.fast_redraw) { + CTX.mesh.draw = 0; + CTX.post.draw = 0; + } + redraw(); } - redraw(); } prev.set(); WID->update_manip_window(); -- GitLab