wideranging changes to get automation editing working in cue editor

This commit is contained in:
Paul Davis 2024-09-20 19:44:25 -06:00
parent 4169f11ddd
commit 90c8726c6d
28 changed files with 680 additions and 486 deletions

View file

@ -561,49 +561,7 @@ Editor::button_selection (ArdourCanvas::Item* item, GdkEvent* event, ItemType it
case AutomationLineItem:
if (eff_mouse_mode != MouseRange && eff_mouse_mode != MouseDraw) {
AutomationLine* al = reinterpret_cast<AutomationLine*> (item->get_data ("line"));
std::list<Selectable*> selectables;
double mx = event->button.x;
double my = event->button.y;
al->grab_item().canvas_to_item (mx, my);
uint32_t before, after;
samplecnt_t const where = (samplecnt_t) floor (mx * samples_per_pixel);
if (!al || !al->control_points_adjacent (where, before, after)) {
break;
}
selectables.push_back (al->nth (before));
selectables.push_back (al->nth (after));
switch (op) {
case SelectionSet:
if (press) {
selection->set (selectables);
_mouse_changed_selection = true;
}
break;
case SelectionAdd:
if (press) {
selection->add (selectables);
_mouse_changed_selection = true;
}
break;
case SelectionToggle:
if (press) {
selection->toggle (selectables);
_mouse_changed_selection = true;
}
break;
case SelectionExtend:
/* XXX */
break;
case SelectionRemove:
/* not relevant */
break;
}
select_automation_line (&event->button, item, op);
}
break;
@ -1845,245 +1803,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
return false;
}
bool
Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
ControlPoint* cp;
ArdourMarker * marker;
MeterMarker* m_marker = 0;
TempoMarker* t_marker = 0;
double fraction;
bool ret = true;
/* by the time we reach here, entered_regionview and entered trackview
* will have already been set as appropriate. Things are done this
* way because this method isn't passed a pointer to a variable type of
* thing that is entered (which may or may not be canvas item).
* (e.g. the actual entered regionview)
*/
choose_canvas_cursor_on_entry (item_type);
switch (item_type) {
case GridZoneItem:
break;
case ControlPointItem:
if (mouse_mode == MouseDraw || mouse_mode == MouseObject || mouse_mode == MouseContent) {
cp = static_cast<ControlPoint*>(item->get_data ("control_point"));
cp->show ();
fraction = 1.0 - (cp->get_y() / cp->line().height());
_verbose_cursor->set (cp->line().get_verbose_cursor_string (fraction));
_verbose_cursor->show ();
}
break;
case GainLineItem:
if (mouse_mode == MouseDraw) {
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
if (line) {
line->set_outline_color (UIConfiguration::instance().color ("entered gain line"));
}
}
break;
case AutomationLineItem:
if (mouse_mode == MouseDraw || mouse_mode == MouseObject) {
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
if (line) {
line->set_outline_color (UIConfiguration::instance().color ("entered automation line"));
}
}
break;
case AutomationTrackItem:
AutomationTimeAxisView* atv;
if ((atv = static_cast<AutomationTimeAxisView*>(item->get_data ("trackview"))) != 0) {
clear_entered_track = false;
set_entered_track (atv);
}
break;
case MarkerItem:
if ((marker = static_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
break;
}
entered_marker = marker;
marker->set_entered (true);
break;
case MeterMarkerItem:
if ((m_marker = static_cast<MeterMarker *> (item->get_data ("marker"))) == 0) {
break;
}
entered_marker = m_marker;
/* "music" currently serves as a stand-in for "entered". */
m_marker->set_color ("meter marker music");
break;
case TempoMarkerItem:
if ((t_marker = static_cast<TempoMarker *> (item->get_data ("marker"))) == 0) {
break;
}
entered_marker = t_marker;
/* "music" currently serves as a stand-in for "entered". */
t_marker->set_color ("tempo marker music");
break;
case FadeInHandleItem:
case FadeInTrimHandleItem:
if (mouse_mode == MouseObject) {
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
if (rect) {
RegionView* rv = static_cast<RegionView*>(item->get_data ("regionview"));
rect->set_fill_color (rv->get_fill_color());
}
}
break;
case FadeOutHandleItem:
case FadeOutTrimHandleItem:
if (mouse_mode == MouseObject) {
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
if (rect) {
RegionView* rv = static_cast<RegionView*>(item->get_data ("regionview"));
rect->set_fill_color (rv->get_fill_color ());
}
}
break;
case FeatureLineItem:
{
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
line->set_outline_color (0xFF0000FF);
}
break;
case SelectionItem:
break;
case WaveItem:
{
if (entered_regionview) {
entered_regionview->entered();
}
}
break;
default:
break;
}
/* third pass to handle entered track status in a comprehensible way.
*/
switch (item_type) {
case GainLineItem:
case AutomationLineItem:
case ControlPointItem:
/* these do not affect the current entered track state */
clear_entered_track = false;
break;
case AutomationTrackItem:
/* handled above already */
break;
default:
break;
}
return ret;
}
bool
Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type)
{
AutomationLine* al;
ArdourMarker *marker;
TempoMarker *t_marker;
MeterMarker *m_marker;
bool ret = true;
if (!_enter_stack.empty()) {
_enter_stack.pop_back();
}
switch (item_type) {
case GridZoneItem:
break;
case ControlPointItem:
_verbose_cursor->hide ();
break;
case GainLineItem:
case AutomationLineItem:
al = reinterpret_cast<AutomationLine*> (item->get_data ("line"));
{
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
if (line) {
line->set_outline_color (al->get_line_color());
}
}
break;
case MarkerItem:
if ((marker = static_cast<ArdourMarker *> (item->get_data ("marker"))) == 0) {
break;
}
entered_marker = 0;
marker->set_entered (false);
break;
case MeterMarkerItem:
if ((m_marker = static_cast<MeterMarker *> (item->get_data ("marker"))) == 0) {
break;
}
m_marker->set_color ("meter marker");
entered_marker = 0;
break;
case TempoMarkerItem:
if ((t_marker = static_cast<TempoMarker *> (item->get_data ("marker"))) == 0) {
break;
}
t_marker->set_color ("tempo marker");
entered_marker = 0;
break;
case FadeInTrimHandleItem:
case FadeOutTrimHandleItem:
case FadeInHandleItem:
case FadeOutHandleItem:
{
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
if (rect) {
rect->set_fill_color (UIConfiguration::instance().color ("inactive fade handle"));
}
}
break;
case AutomationTrackItem:
break;
case FeatureLineItem:
{
ArdourCanvas::Line *line = dynamic_cast<ArdourCanvas::Line *> (item);
line->set_outline_color (UIConfiguration::instance().color ("zero line"));
}
break;
default:
_region_peak_cursor->hide ();
break;
}
return ret;
}
GridType
Editor::determine_mapping_grid_snap(timepos_t t)