From bf7023bc7f91c5cb6b9b6235d5368f0cf5d25c82 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 28 Jun 2010 18:43:40 +0000 Subject: [PATCH] Disable midi model updates during trim drags. Speeds the drags up at the cost of not updating notes in real-time. Fixes #3162. git-svn-id: svn://localhost/ardour2/branches/3.0@7315 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor_drag.cc | 9 +++++---- gtk2_ardour/midi_region_view.cc | 9 +++++++++ gtk2_ardour/midi_region_view.h | 2 ++ gtk2_ardour/region_view.h | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index d49f60c9ca..6d6b368b3a 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1699,10 +1699,9 @@ TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor *) speed = tv->track()->speed(); } - nframes64_t region_start = (nframes64_t) (_primary->region()->position() / speed); - nframes64_t region_end = (nframes64_t) (_primary->region()->last_frame() / speed); - nframes64_t region_length = (nframes64_t) (_primary->region()->length() / speed); - + nframes64_t const region_start = (nframes64_t) (_primary->region()->position() / speed); + nframes64_t const region_end = (nframes64_t) (_primary->region()->last_frame() / speed); + nframes64_t const region_length = (nframes64_t) (_primary->region()->length() / speed); nframes64_t const pf = adjusted_current_frame (event); @@ -1778,6 +1777,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move) for (list::const_iterator i = _views.begin(); i != _views.end(); ++i) { RegionView* rv = i->view; rv->fake_set_opaque(false); + rv->enable_display (false); rv->region()->clear_history (); rv->region()->suspend_property_changes (); @@ -1869,6 +1869,7 @@ TrimDrag::finished (GdkEvent* event, bool movement_occurred) for (list::const_iterator i = _views.begin(); i != _views.end(); ++i) { _editor->thaw_region_after_trim (*i->view); + i->view->enable_display (true); i->view->fake_set_opaque (true); if (_have_transaction) { _editor->session()->add_command (new StatefulDiffCommand (i->view->region())); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 5eb6e55c9f..cbbf36f121 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -2940,3 +2940,12 @@ MidiRegionView::color_handler () /* XXX probably more to do here */ } + +void +MidiRegionView::enable_display (bool yn) +{ + RegionView::enable_display (yn); + if (yn) { + redisplay_model (); + } +} diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 115c2c8371..cc9241b0e0 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -279,6 +279,8 @@ class MidiRegionView : public RegionView void show_list_editor (); void selection_as_notelist (Notes& selected, bool allow_all_if_none_selected = false); + + void enable_display (bool); protected: /** Allows derived types to specify their visibility requirements diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h index 6a94bb91ca..29a19260cb 100644 --- a/gtk2_ardour/region_view.h +++ b/gtk2_ardour/region_view.h @@ -86,7 +86,7 @@ class RegionView : public TimeAxisViewItem virtual void entered () {} virtual void exited () {} - void enable_display(bool yn) { _enable_display = yn; } + virtual void enable_display(bool yn) { _enable_display = yn; } virtual void update_coverage_frames (LayerDisplay); static PBD::Signal1 RegionViewGoingAway;