Remove the temporary note group in MidiRegionView, update start trim during drag.
authornick_m <mainsbridge@gmail.com>
Fri, 22 Jul 2016 13:21:27 +0000 (23:21 +1000)
committernick_m <mainsbridge@gmail.com>
Fri, 22 Jul 2016 13:21:27 +0000 (23:21 +1000)
gtk2_ardour/editor_drag.cc
gtk2_ardour/midi_region_view.cc
gtk2_ardour/midi_region_view.h

index a3b6664e57f4aeb5af57e62e6818861ef3dd4334..6fa3cb099df9e4714745fffbc9b13f18208d8bed 100644 (file)
@@ -2856,7 +2856,6 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
 
                for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
                        RegionView* rv = i->view;
-                       rv->enable_display (false);
                        rv->region()->playlist()->clear_owned_changes ();
 
                        if (_operation == StartTrim) {
index 79933b94d6cdb58afb0877c796720801733885c3..3d67fef187e5c58a3f798e0577e36c7f7a637879 100644 (file)
@@ -111,7 +111,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container*      parent,
        , _step_edit_cursor_width (1.0)
        , _step_edit_cursor_position (0.0)
        , _channel_selection_scoped_note (0)
-       , _temporary_note_group (0)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -155,7 +154,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container*      parent,
        , _step_edit_cursor_width (1.0)
        , _step_edit_cursor_position (0.0)
        , _channel_selection_scoped_note (0)
-       , _temporary_note_group (0)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -204,7 +202,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
        , _step_edit_cursor_width (1.0)
        , _step_edit_cursor_position (0.0)
        , _channel_selection_scoped_note (0)
-       , _temporary_note_group (0)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -237,7 +234,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
        , _step_edit_cursor_width (1.0)
        , _step_edit_cursor_position (0.0)
        , _channel_selection_scoped_note (0)
-       , _temporary_note_group (0)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -1402,7 +1398,6 @@ MidiRegionView::~MidiRegionView ()
        delete _note_group;
        delete _note_diff_command;
        delete _step_edit_cursor;
-       delete _temporary_note_group;
 }
 
 void
@@ -1421,10 +1416,13 @@ MidiRegionView::region_resized (const PropertyChange& what_changed)
            what_changed.contains (ARDOUR::Properties::position)) {
                _source_relative_time_converter.set_origin_b (_region->position() - _region->start());
        }
-       /* catch an end trim so we can live update */
+       /* catch end and start trim so we can update the view*/
        if (!what_changed.contains (ARDOUR::Properties::start) &&
            what_changed.contains (ARDOUR::Properties::length)) {
                enable_display (true);
+       } else if (what_changed.contains (ARDOUR::Properties::start) &&
+           what_changed.contains (ARDOUR::Properties::length)) {
+               enable_display (true);
        }
 }
 
@@ -1435,7 +1433,7 @@ MidiRegionView::reset_width_dependent_items (double pixel_width)
 
        if (_enable_display) {
                redisplay_model();
-               }
+       }
 
        for (PatchChanges::iterator x = _patch_changes.begin(); x != _patch_changes.end(); ++x) {
                if ((*x)->canvas_item()->width() >= _pixel_width) {
@@ -3980,29 +3978,18 @@ MidiRegionView::data_recorded (boost::weak_ptr<MidiSource> w)
 void
 MidiRegionView::trim_front_starting ()
 {
-       /* Reparent the note group to the region view's parent, so that it doesn't change
-          when the region view is trimmed.
+       /* We used to eparent the note group to the region view's parent, so that it didn't change.
+          now we update it.
        */
-       _temporary_note_group = new ArdourCanvas::Container (group->parent ());
-       _temporary_note_group->move (group->position ());
-       _note_group->reparent (_temporary_note_group);
 }
 
 void
 MidiRegionView::trim_front_ending ()
 {
-       _note_group->reparent (group);
-       delete _temporary_note_group;
-       _temporary_note_group = 0;
-
        if (_region->start() < 0) {
                /* Trim drag made start time -ve; fix this */
                midi_region()->fix_negative_start ();
        }
-       /* until _start is modified on the fly during front trim,
-          we have to redisplay the model when a start trim has finished.
-       */
-       enable_display (true);
 }
 
 void
index afe2f4a97da934dffd622ec786082eca2dcd7d68..ac2cd4b8d35dac42cc5ffa845e85ebe0b317691b 100644 (file)
@@ -427,11 +427,6 @@ private:
        Evoral::Beats                        _step_edit_cursor_position;
        NoteBase*                            _channel_selection_scoped_note;
 
-       /** A group used to temporarily reparent _note_group to during start trims, so
-        *  that the notes don't move with the parent region view.
-        */
-       ArdourCanvas::Container*                 _temporary_note_group;
-
        MouseState _mouse_state;
        int _pressed_button;