From 37e858da7dbf645900a596c765ff4d58b8b6df3d Mon Sep 17 00:00:00 2001 From: nick_m Date: Fri, 23 Dec 2016 02:55:51 +1100 Subject: [PATCH] only update GhostEvents on visible trackviews. - this requires that MidiGhostRegion::update_contents_height() also controls visibility. --- gtk2_ardour/ghostregion.cc | 20 ++++++++++++-------- gtk2_ardour/midi_region_view.cc | 4 ++-- gtk2_ardour/time_axis_view.cc | 4 ++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc index 1da70631f7..d9b267cfd7 100644 --- a/gtk2_ardour/ghostregion.cc +++ b/gtk2_ardour/ghostregion.cc @@ -305,14 +305,18 @@ MidiGhostRegion::update_contents_height () uint8_t const note_num = (*it).second->event->note()->note(); double const y = note_y(trackview, mv, note_num); - - if ((_tmp_rect = dynamic_cast((*it).second->item))) { - _tmp_rect->set (ArdourCanvas::Rect (_tmp_rect->x0(), y, _tmp_rect->x1(), y + h)); - } else if ((_tmp_poly = dynamic_cast((*it).second->item))) { - Duple position = _tmp_poly->position(); - position.y = y; - _tmp_poly->set_position(position); - _tmp_poly->set(Hit::points(h)); + if (note_num < mv->lowest_note() || note_num > mv->highest_note()) { + (*it).second->item->hide(); + } else { + if ((_tmp_rect = dynamic_cast((*it).second->item))) { + _tmp_rect->set (ArdourCanvas::Rect (_tmp_rect->x0(), y, _tmp_rect->x1(), y + h)); + } else if ((_tmp_poly = dynamic_cast((*it).second->item))) { + Duple position = _tmp_poly->position(); + position.y = y; + _tmp_poly->set_position(position); + _tmp_poly->set(Hit::points(h)); + } + (*it).second->item->show(); } } } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 90a1e36883..1b1dada479 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -1247,7 +1247,7 @@ MidiRegionView::redisplay_model() for (std::vector::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { MidiGhostRegion* gr = dynamic_cast (*i); - if (gr) { + if (gr && gr->trackview.y_position() != -1) { gr->update_note (sus); } } @@ -1259,7 +1259,7 @@ MidiRegionView::redisplay_model() for (std::vector::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { MidiGhostRegion* gr = dynamic_cast (*i); - if (gr) { + if (gr && gr->trackview.y_position() != -1) { gr->update_hit (hit); } } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 84eab4a6ef..67e487f648 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -332,6 +332,10 @@ TimeAxisView::show_at (double y, int& nth, VBox *parent) } } + for (list::iterator i = ghosts.begin(); i != ghosts.end(); ++i) { + (*i)->set_height (); + } + /* put separator at the bottom of this time axis view */ _canvas_separator->set (ArdourCanvas::Duple(0, height), ArdourCanvas::Duple(ArdourCanvas::COORD_MAX, height));