summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_region_view.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-03-14 04:09:53 +1100
committernick_m <mainsbridge@gmail.com>2016-05-27 23:38:11 +1000
commitd3c24fe0ca54cce155ec35429ffcf38dcb34d645 (patch)
treeab1ba16ba9491e97c7520940c30ff523f1d60edf /gtk2_ardour/midi_region_view.cc
parent8fce08610a55a9fb04afdfbefa69e9e4f18034cc (diff)
Tempo ramps - midi notes resize when dragged, misc bug fixes.
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r--gtk2_ardour/midi_region_view.cc22
1 files changed, 14 insertions, 8 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index e3ff928e1d..f31735fcd2 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -1703,22 +1703,26 @@ void
MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
{
boost::shared_ptr<NoteType> note = ev->note();
- const double x = trackview.editor().sample_to_pixel (source_beats_to_region_frames (note->time()));
+ const double x0 = trackview.editor().sample_to_pixel (source_beats_to_region_frames (note->time()));
+ double x1;
const double y0 = 1 + floor(midi_stream_view()->note_to_y(note->note()));
-
- ev->set_x0 (x);
- ev->set_y0 (y0);
+ double y1;
/* trim note display to not overlap the end of its region */
if (note->length() > 0) {
const framepos_t note_end_frames = min (source_beats_to_region_frames (note->end_time()), _region->length());
- ev->set_x1 (std::max(1., trackview.editor().sample_to_pixel (note_end_frames)) - 1);
+ x1 = std::max(1., trackview.editor().sample_to_pixel (note_end_frames)) - 1;
} else {
- ev->set_x1 (std::max(1., trackview.editor().sample_to_pixel (_region->length())) - 1);
+ x1 = std::max(1., trackview.editor().sample_to_pixel (_region->length())) - 1;
}
- ev->set_y1 (y0 + std::max(1., floor(midi_stream_view()->note_height()) - 1));
+ y1 = y0 + std::max(1., floor(midi_stream_view()->note_height()) - 1);
+
+ ev->set_x0 (x0);
+ ev->set_x1 (x1);
+ ev->set_y0 (y0);
+ ev->set_y1 (y1);
if (!note->length()) {
if (_active_notes && note->note() < 128) {
@@ -1726,7 +1730,7 @@ MidiRegionView::update_sustained (Note* ev, bool update_ghost_regions)
if (old_rect) {
/* There is an active note on this key, so we have a stuck
note. Finish the old rectangle here. */
- old_rect->set_x1 (x);
+ old_rect->set_x1 (x1);
old_rect->set_outline_all ();
}
_active_notes[note->note()] = ev;
@@ -2508,6 +2512,8 @@ MidiRegionView::move_selection(double dx, double dy, double cumulative_dy)
to_play.push_back ((*i)->note());
}
(*i)->move_event(dx, dy);
+ Note* canvas_note = dynamic_cast<Note*>(*i);
+ canvas_note->set_x1 (snap_to_pixel (canvas_note->x1(), false));
}
if (dy && !_selection.empty() && !_no_sound_notes && UIConfiguration::instance().get_sound_midi_notes()) {