fix setting sync point crash, reinstate keymouse zoom tentatively
authorNick Mainsbridge <beatroute@iprimus.com.au>
Sat, 21 Jan 2006 00:11:03 +0000 (00:11 +0000)
committerNick Mainsbridge <beatroute@iprimus.com.au>
Sat, 21 Jan 2006 00:11:03 +0000 (00:11 +0000)
git-svn-id: svn://localhost/trunk/ardour2@284 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor_canvas_events.cc
gtk2_ardour/regionview.cc

index 0ae2ad94fb39a4363093dd6d844c499b65163a81..4e400601e8687ded23539e1187f410736fb0f000 100644 (file)
@@ -870,7 +870,7 @@ Editor::set_frames_per_unit (double fpu)
           which will do the same updates.
        */
        
-       if (session) {
+       if (session && !no_zoom_repos_update) {
                horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
        }
        
index ac4eafc9e608dc15b51427b9684e8377adacb086..824b547938c177ce54b6898c2011bcbfcd11d646 100644 (file)
@@ -47,16 +47,67 @@ using namespace Gtk;
 bool
 Editor::track_canvas_scroll (GdkEventScroll* ev)
 {
+       int x, y;
+       double wx, wy;
+       
        switch (ev->direction) {
        case GDK_SCROLL_UP:
+         if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
+           //if (ev->state == GDK_CONTROL_MASK) {
+             /* XXX 
+              the ev->x will be out of step with the canvas
+              if we're in mid zoom, so we have to get the damn mouse 
+              pointer again
+             */
+               track_canvas.get_pointer (x, y);
+               track_canvas.window_to_world (x, y, wx, wy);
+               wx += horizontal_adjustment.get_value();
+               wy += vertical_adjustment.get_value();
+               
+               GdkEvent event;
+               event.type = GDK_BUTTON_RELEASE;
+               event.button.x = wx;
+               event.button.y = wy;
+               
+               jack_nframes_t where = event_frame (&event, 0, 0);
+               temporal_zoom_to_frame (true, where);
+               return true;
+         } else {
                scroll_tracks_up_line ();
                return true;
-               break;
-
+         }
+         break;
        case GDK_SCROLL_DOWN:
+         if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
+           //if (ev->state == GDK_CONTROL_MASK) {
+               track_canvas.get_pointer (x, y);
+               track_canvas.window_to_world (x, y, wx, wy);
+               wx += horizontal_adjustment.get_value();
+               wy += vertical_adjustment.get_value();
+               
+               GdkEvent event;
+               event.type = GDK_BUTTON_RELEASE;
+               event.button.x = wx;
+               event.button.y = wy;
+               
+               jack_nframes_t where = event_frame (&event, 0, 0);
+               temporal_zoom_to_frame (false, where);
+               return true;
+         } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) {
+               if (clicked_trackview) {
+                 if (!current_stepping_trackview) {
+                   step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500);
+                   current_stepping_trackview = clicked_trackview;
+                 }
+                 gettimeofday (&last_track_height_step_timestamp, 0);
+                 current_stepping_trackview->step_height (true);
+               }
+               return true;
+         } else {
                scroll_tracks_down_line ();
                return true;
-               
+         }
+         break;        
        default:
                /* no left/right handling yet */
                break;
index 672f0a529198a6b3fe4fe48290fce9c780153159..5da65dead7adb4ab098e6888353c28eb8b287c08 100644 (file)
@@ -875,24 +875,15 @@ AudioRegionView::region_sync_changed ()
 
                        Points points;
                        
-                       points = sync_mark->property_points().get_value();
+                       //points = sync_mark->property_points().get_value();
                        
                        double offset = sync_offset / samples_per_unit;
-                       
-                       points[0].set_x(offset - ((sync_mark_width-1)/2));
-                       points[0].set_y(1);
-                       
-                       points[1].set_x(offset + (sync_mark_width-1)/2);
-                       points[1].set_y(1);
-                       
-                       points[2].set_x(offset);
-                       points[2].set_y(sync_mark_width - 1);
-                       
-                       points[3].set_x(offset - ((sync_mark_width-1)/2));
-                       points[3].set_y(1);
-                       
+                       points.push_back (Gnome::Art::Point (offset - ((sync_mark_width-1)/2), 1));
+                       points.push_back (Gnome::Art::Point (offset + ((sync_mark_width-1)/2), 1));
+                       points.push_back (Gnome::Art::Point (offset, sync_mark_width - 1));
+                       points.push_back (Gnome::Art::Point (offset - ((sync_mark_width-1)/2), 1));     
+                       sync_mark->property_points().set_value (points);
                        sync_mark->show();
-                       sync_mark->property_points() = points;
 
                }
        }