lollis: use layering to enable editing of overlapping regions

This commit is contained in:
Paul Davis 2023-06-27 09:19:29 -06:00
parent f7176b411e
commit 1febe07480
2 changed files with 12 additions and 13 deletions

View file

@ -3388,6 +3388,7 @@ MidiRegionView::change_note_length (NoteBase* event, Temporal::Beats t)
void void
MidiRegionView::begin_drag_edit (std::string const & why) MidiRegionView::begin_drag_edit (std::string const & why)
{ {
trackview.editor().get_selection().set (this, true);
start_note_diff_command (why); start_note_diff_command (why);
} }

View file

@ -72,11 +72,6 @@ VelocityGhostRegion::~VelocityGhostRegion ()
bool bool
VelocityGhostRegion::base_event (GdkEvent* ev) VelocityGhostRegion::base_event (GdkEvent* ev)
{ {
if (!selected) {
/* eat event to prevent it passing up th the automation track */
return true;
}
std::vector<NoteBase*> affected_lollis; std::vector<NoteBase*> affected_lollis;
MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (&parent_rv); MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (&parent_rv);
@ -219,16 +214,14 @@ VelocityGhostRegion::remove_note (NoteBase* nb)
void void
VelocityGhostRegion::set_colors () VelocityGhostRegion::set_colors ()
{ {
if (selected) {
base_rect->set_fill_color (UIConfiguration::instance().color ("ghost track base"));
} else {
base_rect->set_fill_color (UIConfiguration::instance().color_mod ("ghost track base", "ghost track midi fill")); base_rect->set_fill_color (UIConfiguration::instance().color_mod ("ghost track base", "ghost track midi fill"));
}
for (auto & gev : events) { for (auto & gev : events) {
if (selected) {
gev.second->item->set_fill_color (gev.second->event->base_color()); gev.second->item->set_fill_color (gev.second->event->base_color());
gev.second->item->set_ignore_events (false);
} else {
gev.second->item->set_fill_color (UIConfiguration::instance().color ("ghost track wave"));
gev.second->item->set_ignore_events (true);
}
} }
} }
@ -384,4 +377,9 @@ VelocityGhostRegion::set_selected (bool yn)
{ {
selected = yn; selected = yn;
set_colors (); set_colors ();
if (yn) {
std::cerr << parent_rv.get_item_name() << " raise to top\n";
group->raise_to_top ();
}
} }