fix errors in midi note drag preview (#3446)
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 17 Sep 2010 20:32:18 +0000 (20:32 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 17 Sep 2010 20:32:18 +0000 (20:32 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7793 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_drag.cc
gtk2_ardour/midi_region_view.cc
gtk2_ardour/midi_region_view.h

index 87d7b6a1a934211da4d2cd845092f59ab7959068..675a722509d11b7ca0a3fce5bd7ffff335572b2b 100644 (file)
@@ -3718,11 +3718,13 @@ NoteDrag::motion (GdkEvent *, bool)
                _cumulative_dx += tdx;
                _cumulative_dy += tdy;
 
-               _region->move_selection (tdx, tdy, _cumulative_dy);
+                int8_t note_delta = total_dy();
+
+               _region->move_selection (tdx, tdy, note_delta);
 
                 char buf[12];
-                snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (_primary->note()->note() + dy).c_str(),
-                          (int) floor (_primary->note()->note() + dy));
+                snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (_primary->note()->note() + note_delta).c_str(),
+                          (int) floor (_primary->note()->note() + note_delta));
                 
                _editor->show_verbose_canvas_cursor_with (buf);
         }
index f5a0d98f20cd6e4d74e1faff0c54d7db2bec2b93..6f582b351821c7eab7831b445bb7fea4f03730e4 100644 (file)
@@ -92,7 +92,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
         , _step_edit_cursor (0)
         , _step_edit_cursor_width (1.0)
         , _step_edit_cursor_position (0.0)
-        , _earliest_selected_time (Evoral::MaxMusicalTime)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -117,7 +116,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &
        , _diff_command(0)
        , _ghost_note(0)
         , _drag_rect (0)
-        , _earliest_selected_time (Evoral::MaxMusicalTime)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -141,7 +139,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
        , _diff_command(0)
        , _ghost_note(0)
         , _drag_rect (0)
-        , _earliest_selected_time (Evoral::MaxMusicalTime)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -169,7 +166,6 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
        , _diff_command(0)
        , _ghost_note(0)
         , _drag_rect (0)
-        , _earliest_selected_time (Evoral::MaxMusicalTime)
        , _mouse_state(None)
        , _pressed_button(0)
        , _sort_needed (true)
@@ -1695,7 +1691,6 @@ MidiRegionView::clear_selection_except(ArdourCanvas::CanvasNoteEvent* ev)
        }
 
        _selection.clear();
-        _earliest_selected_time = Evoral::MaxMusicalTime;
 }
 
 void
@@ -1832,7 +1827,7 @@ MidiRegionView::note_selected(ArdourCanvas::CanvasNoteEvent* ev, bool add, bool
        } else {
                /* find end of latest note selected, select all between that and the start of "ev" */
 
-               Evoral::MusicalTime earliest = DBL_MAX;
+               Evoral::MusicalTime earliest = Evoral::MaxMusicalTime;
                Evoral::MusicalTime latest = 0;
 
                for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
@@ -1937,25 +1932,9 @@ MidiRegionView::remove_from_selection (CanvasNoteEvent* ev)
        ev->set_selected (false);
        ev->hide_velocity ();
 
-
-        if (Evoral::musical_time_equal (ev->note()->time(), _earliest_selected_time)) {
-
-                _earliest_selected_time = Evoral::MaxMusicalTime;
-
-                /* compute new earliest time */
-
-                for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
-                        if (!Evoral::musical_time_equal ((*i)->note()->time(), _earliest_selected_time) &&
-                            (*i)->note()->time() < _earliest_selected_time) {
-                                _earliest_selected_time = (*i)->note()->time();
-                        }
-                }
-        }
-
        if (_selection.empty()) {
                PublicEditor& editor (trackview.editor());
                editor.get_selection().remove (this);
-                _earliest_selected_time = Evoral::MaxMusicalTime;
        }
 }
 
@@ -1971,10 +1950,6 @@ MidiRegionView::add_to_selection (CanvasNoteEvent* ev)
        if (_selection.insert (ev).second) {
                ev->set_selected (true);
                play_midi_note ((ev)->note());
-
-                if (ev->note()->time() < _earliest_selected_time) {
-                        _earliest_selected_time = ev->note()->time();
-                }
         }
 
        if (add_mrv_selection) {
@@ -1988,9 +1963,16 @@ MidiRegionView::move_selection(double dx, double dy, double cumulative_dy)
 {
         typedef vector<boost::shared_ptr<NoteType> > PossibleChord;
         PossibleChord to_play;
+        Evoral::MusicalTime earliest = Evoral::MaxMusicalTime;
+
+       for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
+                if ((*i)->note()->time() < earliest) {
+                        earliest = (*i)->note()->time();
+                }
+        }
 
        for (Selection::iterator i = _selection.begin(); i != _selection.end(); ++i) {
-                if (Evoral::musical_time_equal ((*i)->note()->time(), _earliest_selected_time)) {
+                if (Evoral::musical_time_equal ((*i)->note()->time(), earliest)) {
                         to_play.push_back ((*i)->note());
                 }
                (*i)->move_event(dx, dy);
index 4e4e9544c5c5bc4e5242f07990a34ce115af7da1..53b8c1ef0bb33dda4b58d2170684ef71fa3692a2 100644 (file)
@@ -372,7 +372,6 @@ class MidiRegionView : public RegionView
         ArdourCanvas::SimpleRect*            _step_edit_cursor;
         Evoral::MusicalTime                  _step_edit_cursor_width;
         Evoral::MusicalTime                  _step_edit_cursor_position;
-        Evoral::MusicalTime                  _earliest_selected_time;
 
        MouseState _mouse_state;
        int _pressed_button;