Mercurial > octave
diff src/DLD-FUNCTIONS/fltk_backend.cc @ 9443:8f9d8776d11c
undo previous commit
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Tue, 21 Jul 2009 12:49:17 -0400 |
parents | 2d73b19c5507 |
children | ee8a035f3997 |
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/fltk_backend.cc Tue Jul 21 12:43:33 2009 -0400 +++ b/src/DLD-FUNCTIONS/fltk_backend.cc Tue Jul 21 12:49:17 2009 -0400 @@ -334,34 +334,30 @@ } } - graphics_handle pixel2axes (int px, int py ) + graphics_handle pixel2axes (int /* px */, int /* py */) { Matrix kids = fp.get_children (); - int len = kids.length (); - - for (int k = 0; k < len; k++) - { - graphics_handle hnd = gh_manager::lookup (kids(k)); - - if (hnd.ok ()) - { - graphics_object child = gh_manager::get_object (hnd); - if (child.valid_object () && child.isa ("axes")) - { - Matrix bb = child.get_properties ().get_boundingbox (true); + for (octave_idx_type n = 0; n < kids.numel (); n++) + { + graphics_object ax = gh_manager::get_object (kids (n)); + if (ax && ax.isa ("axes")) + { +#if 0 + axes::properties& ap = + dynamic_cast<axes::properties&> (ax.get_properties ()); - if (bb(0) <= px && px < (bb(0)+bb(2)) - && bb(1) <= py && py < (bb(1)+bb(3))) - { - return hnd; - } - } + // std::cout << "\npixpos="<<pixpos<<"(px,py)=("<<px<<","<<py<<")\n"; + if (px >= pixpos(0) && px <= pixpos(2) + && py >= pixpos(1) && py <= pixpos(3)) + return ap.get___myhandle__ (); +#endif } } - return graphics_handle(); + + return graphics_handle (); } - + void pixel2status (int px0, int py0, int px1 = -1, int py1 = -1) { double x0, y0, x1, y1; @@ -446,60 +442,63 @@ pixel2status (px0, py0, Fl::event_x (), Fl::event_y ()); if (Fl::event_button () == 1) { - graphics_handle hnd = pixel2axes (px0, py0); - graphics_object ax = gh_manager::get_object (fp.get_currentaxes ()); - if (hnd.ok ()) - ax = gh_manager::get_object (hnd); - - if (ax && ax.isa ("axes")) - { - axes::properties& ap = dynamic_cast<axes::properties&> (ax.get_properties ()); - - double x0, y0, x1, y1; - pixel2pos (px0, py0, x0, y0); - pixel2pos (Fl::event_x (), Fl::event_y (), x1, y1); - px0 = Fl::event_x (); - py0 = Fl::event_y (); - - ap.translate_view (x0 - x1, y0 - y1); - mark_modified (); - } + canvas->zoom (true); + Matrix zoom_box (1,4,0); + zoom_box (0) = px0; + zoom_box (1) = py0; + zoom_box (2) = Fl::event_x (); + zoom_box (3) = Fl::event_y (); + canvas->set_zoom_box (zoom_box); + canvas->redraw_overlay (); return 1; } break; - case FL_MOUSEWHEEL: - { - // Parameter controlling how fast we zoom. FIXME: Should this be user tweakable? - const double zoom_speed = 0.05; - - graphics_object ax = gh_manager::get_object (fp.get_currentaxes ()); - graphics_handle hnd = pixel2axes (Fl::event_x (), Fl::event_y ()); - if (hnd.ok ()) - ax = gh_manager::get_object (hnd); - - if (ax && ax.isa ("axes")) - { - axes::properties& ap = dynamic_cast<axes::properties&> (ax.get_properties ()); - - // Determine if we're zooming in or out - const double factor = (Fl::event_dy () > 0) ? 1.0 + zoom_speed : 1.0 - zoom_speed; - - // Get the point we're zooming about - double x1, y1; - pixel2pos (Fl::event_x (), Fl::event_y (), x1, y1); - - ap.zoom_about_point (x1, y1, factor, false); - mark_modified (); - } - } - return 1; - case FL_RELEASE: if (Fl::event_button () == 1) { + // end of drag -- zoom + if (canvas->zoom ()) + { + canvas->zoom (false); + double x0,y0,x1,y1; + graphics_object ax = + gh_manager::get_object (fp.get_currentaxes ()); + if (ax && ax.isa ("axes")) + { + axes::properties& ap = + dynamic_cast<axes::properties&> (ax.get_properties ()); + pixel2pos (px0, py0, x0, y0); + pixel2pos (Fl::event_x (), Fl::event_y (), x1, y1); + Matrix xl (1,2,0); + Matrix yl (1,2,0); + if (x0 < x1) + { + xl(0) = x0; + xl(1) = x1; + } + else + { + xl(0) = x1; + xl(1) = x0; + } + + if (y0 < y1) + { + yl(0) = y0; + yl(1) = y1; + } + else + { + yl(0) = y1; + yl(1) = y0; + } + ap.zoom (xl, yl); + mark_modified (); + } + } // one click -- select axes - if ( Fl::event_clicks () == 0) + else if ( Fl::event_clicks () == 0) { std::cout << "ca="<< h0.value ()<<"\n"; if (h0.ok ())