, _data_note_min(60)
, _data_note_max(71)
, _note_lines (0)
+ , _updates_suspended (false)
{
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
midi_underlay_group = new ArdourCanvas::Group (*_canvas_group);
void
MidiStreamView::draw_note_lines()
{
- if (!_note_lines) {
+ if (!_note_lines || _updates_suspended) {
return;
}
{
_highest_note = highest;
_lowest_note = lowest;
-
+
int const range = _highest_note - _lowest_note;
int const pixels_per_note = floor (child_height () / range);
draw_note_lines();
if (to_region_views) {
+ apply_note_range_to_regions ();
+ }
+
+ NoteRangeChanged();
+}
+
+void
+MidiStreamView::apply_note_range_to_regions ()
+{
+ if (!_updates_suspended) {
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
((MidiRegionView*)(*i))->apply_note_range(_lowest_note, _highest_note);
}
}
-
- NoteRangeChanged();
}
void
return n;
}
+
+/** Suspend updates to the regions' note ranges and our
+ * note lines until resume_updates() is called.
+ */
+void
+MidiStreamView::suspend_updates ()
+{
+ _updates_suspended = true;
+}
+
+/** Resume updates to region note ranges and note lines,
+ * and update them now.
+ */
+void
+MidiStreamView::resume_updates ()
+{
+ _updates_suspended = false;
+
+ draw_note_lines ();
+ apply_note_range_to_regions ();
+}