summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-09-17 20:32:18 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-09-17 20:32:18 +0000
commit9a8cd09b19db14cef0349439ab6f5197fffb7f71 (patch)
tree90580a16ac5334705df4a8784aedf2db4329e954
parentede4ecbb00ecc866c502454c81e711baea780ccd (diff)
fix errors in midi note drag preview (#3446)
git-svn-id: svn://localhost/ardour2/branches/3.0@7793 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/editor_drag.cc8
-rw-r--r--gtk2_ardour/midi_region_view.cc36
-rw-r--r--gtk2_ardour/midi_region_view.h1
3 files changed, 14 insertions, 31 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 87d7b6a1a9..675a722509 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -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);
}
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index f5a0d98f20..6f582b3518 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -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);
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 4e4e9544c5..53b8c1ef0b 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -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;