From 5d7ff24130493e9b8ad7f96fc15f7c551fa08c7f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 29 Mar 2022 01:30:29 +0200 Subject: [PATCH] Hide scroomer when using layered mode In layered mode the scroomer is not usable with stacked MIDI regions. Ideally we'd only hide it if there is more than one layer but that is for another day. --- gtk2_ardour/midi_time_axis.cc | 57 ++++++++++++++++++++++++++--------- gtk2_ardour/midi_time_axis.h | 3 ++ gtk2_ardour/route_time_axis.h | 3 +- 3 files changed, 47 insertions(+), 16 deletions(-) diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 69e9b46909..2f63747ea9 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -581,21 +581,7 @@ MidiTimeAxisView::set_height (uint32_t h, TrackHeightMode m) _midi_controls_box.hide(); } - if (h >= KEYBOARD_MIN_HEIGHT) { - if (is_track() && _range_scroomer) { - _range_scroomer->show(); - } - if (is_track() && _piano_roll_header) { - _piano_roll_header->show(); - } - } else { - if (is_track() && _range_scroomer) { - _range_scroomer->hide(); - } - if (is_track() && _piano_roll_header) { - _piano_roll_header->hide(); - } - } + update_scroomer_visbility (h, layer_display ()); /* We need to do this after changing visibility of our stuff, as it will * eventually trigger a call to Editor::reset_controls_layout_width(), @@ -605,6 +591,47 @@ MidiTimeAxisView::set_height (uint32_t h, TrackHeightMode m) RouteTimeAxisView::set_height (h, m); } +void +MidiTimeAxisView::update_scroomer_visbility (uint32_t h, LayerDisplay d) +{ + if (!is_track ()) { + return; + } + if (h >= KEYBOARD_MIN_HEIGHT && d == Overlaid) { + if (_range_scroomer) { + _range_scroomer->show(); + } + if (_piano_roll_header) { + _piano_roll_header->show(); + } + } else { + if (_range_scroomer) { + _range_scroomer->hide(); + } + if (_piano_roll_header) { + _piano_roll_header->hide(); + } + } +} + +void +MidiTimeAxisView::set_layer_display (LayerDisplay d) +{ + LayerDisplay prev_layer_display = layer_display (); + RouteTimeAxisView::set_layer_display (d); + LayerDisplay curr_layer_display = layer_display (); + + if (curr_layer_display == prev_layer_display) { + return; + } + + uint32_t h = current_height (); + update_scroomer_visbility (h, curr_layer_display); + + /* If visibility changed, trigger a call to Editor::reset_controls_layout_width() */ + _stripable->gui_changed ("track_height", (void *) 0); +} + void MidiTimeAxisView::append_extra_display_menu_items () { diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h index 8e401d55e5..5778d7d436 100644 --- a/gtk2_ardour/midi_time_axis.h +++ b/gtk2_ardour/midi_time_axis.h @@ -86,6 +86,7 @@ public: MidiStreamView* midi_view(); void set_height (uint32_t, TrackHeightMode m = OnlySelf); + void set_layer_display (LayerDisplay d); boost::shared_ptr add_region (Temporal::timepos_t const &, Temporal::timecnt_t const &, bool); @@ -141,6 +142,8 @@ private: void note_range_changed (); void contents_height_changed (); + void update_scroomer_visbility (uint32_t, LayerDisplay); + void update_control_names (); void update_midi_controls_visibility (uint32_t); diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index f973b9ac24..f146f80acb 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -103,7 +103,8 @@ public: void get_selectables (Temporal::timepos_t const &, Temporal::timepos_t const &, double top, double bot, std::list&, bool within = false); void get_inverted_selectables (Selection&, std::list&); void get_regionviews_at_or_after (Temporal::timepos_t const &, RegionSelection&); - void set_layer_display (LayerDisplay d); + + virtual void set_layer_display (LayerDisplay d); void toggle_layer_display (); LayerDisplay layer_display () const;