mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 06:44:57 +01:00
wideranging changes to get automation editing working in cue editor
This commit is contained in:
parent
4169f11ddd
commit
90c8726c6d
28 changed files with 680 additions and 486 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue