mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-11 00:56:33 +01:00
pianoroll: if invisible, defer (expensive) ::set_region() till shown
This commit is contained in:
parent
1fbd7c7124
commit
bdf9dec411
2 changed files with 18 additions and 1 deletions
|
|
@ -639,10 +639,19 @@ Pianoroll::build_canvas ()
|
||||||
_canvas->set_name ("MidiCueCanvas");
|
_canvas->set_name ("MidiCueCanvas");
|
||||||
_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
||||||
_canvas->set_can_focus ();
|
_canvas->set_can_focus ();
|
||||||
|
_canvas->signal_show().connect (sigc::mem_fun (*this, &Pianoroll::catch_pending_show_region));
|
||||||
_toolbox.pack_start (*_canvas_viewport, true, true);
|
_toolbox.pack_start (*_canvas_viewport, true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Pianoroll::catch_pending_show_region ()
|
||||||
|
{
|
||||||
|
if (_visible_pending_region) {
|
||||||
|
set_region (_visible_pending_region);
|
||||||
|
_visible_pending_region.reset ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Pianoroll::bbt_ruler_event (GdkEvent* ev)
|
Pianoroll::bbt_ruler_event (GdkEvent* ev)
|
||||||
{
|
{
|
||||||
|
|
@ -2603,6 +2612,11 @@ Pianoroll::update_solo_display ()
|
||||||
void
|
void
|
||||||
Pianoroll::set_region (std::shared_ptr<ARDOUR::MidiRegion> r)
|
Pianoroll::set_region (std::shared_ptr<ARDOUR::MidiRegion> r)
|
||||||
{
|
{
|
||||||
|
if (!get_canvas()->is_visible()) {
|
||||||
|
_visible_pending_region = r;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
unset (false);
|
unset (false);
|
||||||
|
|
||||||
if (!r) {
|
if (!r) {
|
||||||
|
|
|
||||||
|
|
@ -352,4 +352,7 @@ class Pianoroll : public CueEditor
|
||||||
|
|
||||||
Gtk::Menu _region_context_menu;
|
Gtk::Menu _region_context_menu;
|
||||||
void popup_region_context_menu (ArdourCanvas::Item* item, GdkEvent* event);
|
void popup_region_context_menu (ArdourCanvas::Item* item, GdkEvent* event);
|
||||||
|
|
||||||
|
std::shared_ptr<ARDOUR::MidiRegion> _visible_pending_region;
|
||||||
|
void catch_pending_show_region ();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue