diff --git a/gtk2_ardour/midi_cue_background.cc b/gtk2_ardour/midi_cue_background.cc index 3243451d55..716fc8c86b 100644 --- a/gtk2_ardour/midi_cue_background.cc +++ b/gtk2_ardour/midi_cue_background.cc @@ -21,9 +21,11 @@ */ #include "midi_cue_background.h" +#include "midi_view.h" CueMidiBackground::CueMidiBackground (ArdourCanvas::Item* parent) : MidiViewBackground (parent) + , view (nullptr) , _width (0.) , _height (0.) { @@ -71,3 +73,17 @@ void CueMidiBackground::record_layer_check (std::shared_ptr, samplepos_t) { } + +void +CueMidiBackground::set_view (MidiView* mv) +{ + view = mv; +} + +void +CueMidiBackground::apply_note_range_to_children () +{ + if (view) { + view->apply_note_range (lowest_note(), highest_note()); + } +} diff --git a/gtk2_ardour/midi_cue_background.h b/gtk2_ardour/midi_cue_background.h index 76346c421e..f759a2d9dc 100644 --- a/gtk2_ardour/midi_cue_background.h +++ b/gtk2_ardour/midi_cue_background.h @@ -31,6 +31,8 @@ #include "midi_view_background.h" +class MidiView; + class CueMidiBackground : public MidiViewBackground { public: @@ -45,11 +47,14 @@ class CueMidiBackground : public MidiViewBackground void record_layer_check (std::shared_ptr, samplepos_t); void set_size (double w, double h); + void set_view (MidiView*); protected: - virtual void apply_note_range_to_children () {} + MidiView* view; double _width; double _height; + + void apply_note_range_to_children(); }; diff --git a/gtk2_ardour/midi_cue_editor.cc b/gtk2_ardour/midi_cue_editor.cc index 220e710a2a..8fab562caf 100644 --- a/gtk2_ardour/midi_cue_editor.cc +++ b/gtk2_ardour/midi_cue_editor.cc @@ -202,4 +202,6 @@ MidiCueEditor::set_region (std::shared_ptr t, std::shared_ptr view = new MidiView (t, *hv_scroll_group, *this, *bg, 0xff0000ff); view->set_region (r); + + bg->set_view (view); } diff --git a/gtk2_ardour/midi_view.cc b/gtk2_ardour/midi_view.cc index b1909d2d50..0cd340ceb7 100644 --- a/gtk2_ardour/midi_view.cc +++ b/gtk2_ardour/midi_view.cc @@ -1003,8 +1003,6 @@ MidiView::redisplay (bool view_only) void MidiView::model_changed() { - std::cerr << "MC!\n"; - if (!display_is_enabled()) { return; } @@ -1461,10 +1459,6 @@ MidiView::set_height (double ht) void MidiView::apply_note_range (uint8_t min, uint8_t max, bool force) { - if (!force && _midi_context.lowest_note() == min && _midi_context.highest_note() == max) { - return; - } - view_changed (); } @@ -1613,11 +1607,6 @@ MidiView::update_sustained (Note* ev, bool update_ghost_regions) const double y0 = 1 + floor(note_to_y(note->note())); double y1; - std::cerr << "Note: " << *note << std::endl; - std::cerr << "SSS " << session_source_start << std::endl; - std::cerr << "nh " << note_height() << std::endl; - std::cerr << "vs. " << (int) _midi_context.lowest_note() << " .. " << (int) _midi_context.highest_note() << std::endl; - if (note->length() == Temporal::Beats()) { /* special case actual zero-length notes */ @@ -1636,8 +1625,6 @@ MidiView::update_sustained (Note* ev, bool update_ghost_regions) const samplepos_t note_end_samples = _midi_region->position().distance ((session_source_start + note_end)).samples(); - std::cerr << "nes: " << note_end_samples << " Z " << _editing_context.get_current_zoom() << std::endl; - x1 = std::max(1., _editing_context.sample_to_pixel (note_end_samples)); } else { @@ -1649,8 +1636,6 @@ MidiView::update_sustained (Note* ev, bool update_ghost_regions) y1 = y0 + std::max(1., floor(note_height()) - 1); - std::cerr << "note rect " << ArdourCanvas::Rect (x0, y0, x1, y1) << std::endl; - ev->set (ArdourCanvas::Rect (x0, y0, x1, y1)); ev->set_velocity (note->velocity()/127.0); diff --git a/gtk2_ardour/midi_view_background.cc b/gtk2_ardour/midi_view_background.cc index 1c7baa14c8..cb8c7e6996 100644 --- a/gtk2_ardour/midi_view_background.cc +++ b/gtk2_ardour/midi_view_background.cc @@ -214,10 +214,23 @@ MidiViewBackground::set_note_range(VisibleNoteRange r) } void -MidiViewBackground::apply_note_range(uint8_t lowest, uint8_t highest, bool to_children) +MidiViewBackground::apply_note_range (uint8_t lowest, uint8_t highest, bool to_children) { - _highest_note = highest; - _lowest_note = lowest; + bool changed = false; + + if (_highest_note != highest) { + _highest_note = highest; + changed = true; + } + + if (_lowest_note != lowest) { + changed = true; + _lowest_note = lowest; + } + + if (!changed) { + return; + } float uiscale = UIConfiguration::instance().get_ui_scale(); uiscale = expf (uiscale) / expf (1.f);