summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-11-22 02:05:32 +1100
committernick_m <mainsbridge@gmail.com>2016-11-22 02:05:32 +1100
commit62f37da98930b055406a90b4206aa26a949d2959 (patch)
treef36eecd45b15f04345f13f30934f2ad70d5b1062 /gtk2_ardour
parent8e8c4a73f1e26dcafe055063bc8aa15736d81f8b (diff)
filter events in HitCreateDrag, remove some code.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_drag.cc37
-rw-r--r--gtk2_ardour/editor_drag.h3
2 files changed, 29 insertions, 11 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 4cc6d683f5..6f5723086e 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -6324,6 +6324,8 @@ NoteCreateDrag::aborted (bool)
HitCreateDrag::HitCreateDrag (Editor* e, ArdourCanvas::Item* i, MidiRegionView* rv)
: Drag (e, i)
, _region_view (rv)
+ , _last_pos (0)
+ , _last_y (0.0)
{
}
@@ -6341,19 +6343,25 @@ HitCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
const framepos_t pf = _drags->current_pointer_frame ();
const int32_t divisions = _editor->get_grid_music_divisions (event->button.state);
- bool success = false;
- Evoral::Beats grid_beats = _editor->get_grid_type_as_beats (success, pf);
- if (!success) {
- grid_beats = Evoral::Beats(1);
+ const double eqaf = map.exact_qn_at_frame (pf, divisions);
+
+ boost::shared_ptr<MidiRegion> mr = _region_view->midi_region();
+
+ if (eqaf >= mr->quarter_note() + mr->length_beats()) {
+ return;
}
- const double eqaf = map.exact_qn_at_frame (pf, divisions);
const framepos_t start = map.frame_at_quarter_note (eqaf) - _region_view->region()->position();
MidiStreamView* sv = _region_view->midi_stream_view ();
const double y = sv->note_to_y (sv->y_to_note (y_to_region (event->button.y)));
- _region_view->create_note_at (start, y, grid_beats, event->button.state, false);
+ Evoral::Beats length = _region_view->get_grid_beats (pf);
+
+ _region_view->create_note_at (start, y, length, event->button.state, false);
+
+ _last_pos = start;
+ _last_y = y;
}
void
@@ -6374,14 +6382,21 @@ HitCreateDrag::motion (GdkEvent* event, bool)
MidiStreamView* sv = _region_view->midi_stream_view ();
const double y = sv->note_to_y (sv->y_to_note (y_to_region (event->button.y)));
- bool success = false;
- Evoral::Beats grid_beats = _editor->get_grid_type_as_beats (success, pf);
- if (!success) {
- grid_beats = Evoral::Beats(1);
+ if (_last_pos == start && y == _last_y) {
+ return;
+ }
+
+ Evoral::Beats length = _region_view->get_grid_beats (pf);
+
+ boost::shared_ptr<MidiRegion> mr = _region_view->midi_region();
+ if (eqaf >= mr->quarter_note() + mr->length_beats()) {
+ return;
}
- _region_view->create_note_at (start, y, grid_beats, event->button.state, false);
+ _region_view->create_note_at (start, y, length, event->button.state, false);
+ _last_pos = start;
+ _last_y = y;
}
void
diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h
index 88e651899b..f235881d03 100644
--- a/gtk2_ardour/editor_drag.h
+++ b/gtk2_ardour/editor_drag.h
@@ -631,6 +631,9 @@ private:
}
MidiRegionView* _region_view;
+ framepos_t _last_pos;
+ double _last_y;
+
};
/** Drag to move MIDI patch changes */