diff options
author | Jeremy Carter <Jeremy@JeremyCarter.ca> | 2014-11-14 13:34:15 -0500 |
---|---|---|
committer | Jeremy Carter <Jeremy@JeremyCarter.ca> | 2014-11-14 13:34:15 -0500 |
commit | 592bfdd3f4af9463e2e6a691d7240839ba50d61d (patch) | |
tree | 0c0e17acda42cf26c35b15cff67c1e0cb961e139 /gtk2_ardour | |
parent | 32b86104aa7f814ab5930c206ffa18971313c79d (diff) | |
parent | 6b3a8915f3c50f7220121fcb9202ec20144389c4 (diff) |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'gtk2_ardour')
36 files changed, 169 insertions, 127 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc index 94e4369aae..57fd46be73 100644 --- a/gtk2_ardour/add_route_dialog.cc +++ b/gtk2_ardour/add_route_dialog.cc @@ -346,7 +346,7 @@ AddRouteDialog::mode () } else { fatal << string_compose (X_("programming error: unknown track mode in add route dialog combo = %1"), str) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } /* keep gcc happy */ return ARDOUR::Normal; diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 2e9d8b3247..03ca13745f 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -88,6 +88,9 @@ #ifdef WINDOWS_VST_SUPPORT #include <fst.h> #endif +#ifdef AUDIOUNIT_SUPPORT +#include "ardour/audio_unit.h" +#endif #include "timecode/time.h" @@ -483,6 +486,14 @@ ARDOUR_UI::post_engine () { /* Things to be done once (and once ONLY) after we have a backend running in the AudioEngine */ +#ifdef AUDIOUNIT_SUPPORT + std::string au_msg; + if (AUPluginInfo::au_get_crashlog(au_msg)) { + popup_error(_("Audio Unit Plugin Scan Failed. Automatic AU scanning has been disabled. Please see the log window for further details.")); + error << _("Audio Unit Plugin Scan Failed:") << endmsg; + info << au_msg << endmsg; + } +#endif ARDOUR::init_post_engine (); diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 68757c256b..df1820eeeb 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -113,7 +113,7 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_ break; default: fatal << string_compose (_("programming error: %1"), "illegal track mode in ::create_region_view()") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index 2da15c17c5..e088f7c59f 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -60,6 +60,7 @@ AutomationRegionView::AutomationRegionView (ArdourCanvas::Container* AutomationRegionView::~AutomationRegionView () { + RegionViewGoingAway (this); /* EMIT_SIGNAL */ } void diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index ba4eb09cd1..d5c9aa6fea 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2631,7 +2631,7 @@ Editor::timecode_snap_to_internal (framepos_t& start, int32_t direction, bool /* break; default: fatal << "Editor::smpte_snap_to_internal() called with non-timecode snap type!" << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index d16105987a..e8125ef593 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1081,7 +1081,7 @@ Editor::snap_type_action (SnapType type) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap-to type", (int) type) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Snap"), action); @@ -1477,7 +1477,7 @@ Editor::snap_mode_action (SnapMode mode) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible snap mode type", (int) mode) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Editor"), action); @@ -1541,7 +1541,7 @@ Editor::edit_point_action (EditPoint ep) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible edit point type", (int) ep) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Editor"), action); @@ -1599,7 +1599,7 @@ Editor::zoom_focus_action (ZoomFocus focus) break; default: fatal << string_compose (_("programming error: %1: %2"), "Editor: impossible focus type", (int) focus) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } act = ActionManager::get_action (X_("Zoom"), action); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index e5ac8c6c72..af1d41f91f 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -314,14 +314,14 @@ Editor::do_import (vector<string> paths, ImportDisposition disposition, ImportMo continue; case 0: fatal << "Updating existing sources should be disabled!" << endmsg; - /* NOTREACHED*/ + abort(); /* NOTREACHED*/ break; case 1: replace = false; break; default: fatal << "Illegal return " << check << " from check_whether_and_how_to_import()!" << endmsg; - /* NOTREACHED*/ + abort(); /* NOTREACHED*/ } /* have to reset this for every file we handle */ diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 7eeeba2ed0..482ada3cbc 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -1348,7 +1348,7 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ } if (cursor) { - set_canvas_cursor (cursor, false); + set_canvas_cursor (cursor, true); } } diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index aa37467f2c..0aaec8d24d 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1967,7 +1967,10 @@ NoteResizeDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*ignored*/) MidiRegionSelection::iterator next; next = r; ++next; - (*r)->begin_resizing (at_front); + MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r); + if (mrv) { + mrv->begin_resizing (at_front); + } r = next; } } @@ -1979,7 +1982,10 @@ NoteResizeDrag::motion (GdkEvent* /*event*/, bool /*first_move*/) for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) { NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase")); assert (nb); - (*r)->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r); + if (mrv) { + mrv->update_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + } } } @@ -1990,7 +1996,10 @@ NoteResizeDrag::finished (GdkEvent*, bool /*movement_occurred*/) for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) { NoteBase* nb = reinterpret_cast<NoteBase*> (_item->get_data ("notebase")); assert (nb); - (*r)->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r); + if (mrv) { + mrv->commit_resizing (nb, at_front, _drags->current_pointer_x() - grab_x(), relative); + } } } @@ -1999,7 +2008,10 @@ NoteResizeDrag::aborted (bool) { MidiRegionSelection& ms (_editor->get_selection().midi_regions); for (MidiRegionSelection::iterator r = ms.begin(); r != ms.end(); ++r) { - (*r)->abort_resizing (); + MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*r); + if (mrv) { + mrv->abort_resizing (); + } } } @@ -5268,12 +5280,10 @@ void NoteCreateDrag::motion (GdkEvent* event, bool) { _note[1] = max ((framepos_t)0, adjusted_current_frame (event) - _region_view->region()->position ()); - double const x = _editor->sample_to_pixel (_note[1]); - if (_note[1] > _note[0]) { - _drag_rect->set_x1 (x); - } else { - _drag_rect->set_x0 (x); - } + double const x0 = _editor->sample_to_pixel (_note[0]); + double const x1 = _editor->sample_to_pixel (_note[1]); + _drag_rect->set_x0 (std::min(x0, x1)); + _drag_rect->set_x1 (std::max(x0, x1)); } void diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc index e40030d671..f92cf07150 100644 --- a/gtk2_ardour/editor_export_audio.cc +++ b/gtk2_ardour/editor_export_audio.cc @@ -90,7 +90,7 @@ Editor::export_range () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 0900c7fc18..6d07ecc357 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -704,7 +704,7 @@ Editor::remove_marker (ArdourCanvas::Item& item, GdkEvent*) if ((marker = static_cast<Marker*> (item.get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (entered_marker == marker) { @@ -791,7 +791,7 @@ Editor::marker_context_menu (GdkEventButton* ev, ArdourCanvas::Item* item) Marker * marker; if ((marker = reinterpret_cast<Marker *> (item->get_data("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } bool is_start; @@ -976,7 +976,7 @@ Editor::marker_menu_hide () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -994,7 +994,7 @@ Editor::marker_menu_select_using_range () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1012,7 +1012,7 @@ Editor::marker_menu_select_all_selectables_using_range () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1031,7 +1031,7 @@ Editor::marker_menu_separate_regions_using_location () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1050,7 +1050,7 @@ Editor::marker_menu_play_from () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1080,7 +1080,7 @@ Editor::marker_menu_set_playhead () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1111,7 +1111,7 @@ Editor::marker_menu_range_to_next () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1141,7 +1141,7 @@ Editor::marker_menu_set_from_playhead () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1169,7 +1169,7 @@ Editor::marker_menu_set_from_selection (bool /*force_regions*/) if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1200,7 +1200,7 @@ Editor::marker_menu_play_range () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1225,7 +1225,7 @@ Editor::marker_menu_loop_range () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* l; @@ -1276,7 +1276,7 @@ Editor::dynamic_cast_marker_object (void* p, MeterMarker** m, TempoMarker** t) c Marker* marker = reinterpret_cast<Marker*> (p); if (!marker) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } *m = dynamic_cast<MeterMarker*> (marker); @@ -1320,7 +1320,7 @@ Editor::toggle_marker_menu_lock () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* loc; @@ -1346,7 +1346,7 @@ Editor::marker_menu_rename () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } @@ -1540,7 +1540,7 @@ Editor::toggle_marker_menu_glue () if ((marker = reinterpret_cast<Marker *> (marker_menu_item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* loc; diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index c4e19b15a8..3ad9f0a54c 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1332,12 +1332,12 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((tempo_marker = dynamic_cast<TempoMarker*> (marker)) == 0) { fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } edit_tempo_marker (*tempo_marker); @@ -1350,12 +1350,12 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((meter_marker = dynamic_cast<MeterMarker*> (marker)) == 0) { fatal << _("programming error: marker for meter is not a meter marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } edit_meter_marker (*meter_marker); break; @@ -1813,6 +1813,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type) bool is_start; bool ret = true; + reset_canvas_cursor (); + switch (item_type) { case ControlPointItem: _verbose_cursor->hide (); @@ -1997,7 +1999,7 @@ Editor::can_remove_control_point (ArdourCanvas::Item* item) if ((control_point = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"))) == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } AutomationLine& line = control_point->line (); @@ -2022,7 +2024,7 @@ Editor::remove_control_point (ArdourCanvas::Item* item) if ((control_point = reinterpret_cast<ControlPoint *> (item->get_data ("control_point"))) == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } control_point->line().remove_point (*control_point); @@ -2035,7 +2037,7 @@ Editor::edit_control_point (ArdourCanvas::Item* item) if (p == 0) { fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } ControlPointDialog d (p); @@ -2240,7 +2242,7 @@ Editor::hide_marker (ArdourCanvas::Item* item, GdkEvent* /*event*/) if ((marker = static_cast<Marker *> (item->get_data ("marker"))) == 0) { fatal << _("programming error: marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } Location* location = find_location_from_marker (marker, is_start); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 1f23aa4319..b8e13bc196 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -646,7 +646,7 @@ Editor::build_region_boundary_cache () break; default: fatal << string_compose (_("build_region_boundary_cache called with snap_type = %1"), _snap_type) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return; } @@ -4000,8 +4000,10 @@ void Editor::cut_copy_midi (CutCopyOp op) { for (MidiRegionSelection::iterator i = selection->midi_regions.begin(); i != selection->midi_regions.end(); ++i) { - MidiRegionView* mrv = *i; - mrv->cut_copy_clear (op); + MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i); + if (mrv) { + mrv->cut_copy_clear (op); + } } } diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 886d5e1209..78c45c7d8d 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -1560,7 +1560,7 @@ EditorRegions::sort_type_action (Editing::RegionListSortType t) const break; default: fatal << string_compose (_("programming error: %1: %2"), "EditorRegions: impossible sort type", (int) t) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } RefPtr<Action> act = ActionManager::get_action (X_("RegionList"), action); diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index fec380ee35..daf36d2d72 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -271,12 +271,12 @@ Editor::remove_tempo_marker (ArdourCanvas::Item* item) if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) { fatal << _("programming error: tempo marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((tempo_marker = dynamic_cast<TempoMarker*> (marker)) == 0) { fatal << _("programming error: marker for tempo is not a tempo marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (tempo_marker->tempo().movable()) { @@ -375,12 +375,12 @@ Editor::remove_meter_marker (ArdourCanvas::Item* item) if ((marker = reinterpret_cast<Marker *> (item->get_data ("marker"))) == 0) { fatal << _("programming error: meter marker canvas item has no marker object pointer!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if ((meter_marker = dynamic_cast<MeterMarker*> (marker)) == 0) { fatal << _("programming error: marker for meter is not a meter marker!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (meter_marker->meter().movable()) { diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index daba2e77d4..7b7ad33f9a 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -610,7 +610,7 @@ next_meter_point (MeterPoint mp) break; } - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return MeterInput; } diff --git a/gtk2_ardour/latency_gui.cc b/gtk2_ardour/latency_gui.cc index 703e7dd4ab..d21a055d9e 100644 --- a/gtk2_ardour/latency_gui.cc +++ b/gtk2_ardour/latency_gui.cc @@ -148,7 +148,7 @@ LatencyGUI::change_latency_from_button (int dir) } else { fatal << string_compose (_("programming error: %1 (%2)"), X_("illegal string in latency GUI units combo"), unitstr) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } if (dir > 0) { diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 08fab6ff86..81248c9585 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -112,6 +112,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); @@ -149,6 +150,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); @@ -195,6 +197,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other) , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { init (false); @@ -223,6 +226,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { init (true); @@ -420,6 +424,7 @@ MidiRegionView::leave_notify (GdkEventCrossing*) if (pre_enter_cursor) { Editor* editor = dynamic_cast<Editor *> (&trackview.editor()); editor->set_canvas_cursor(pre_enter_cursor); + pre_enter_cursor = 0; } return false; @@ -456,7 +461,7 @@ MidiRegionView::button_press (GdkEventButton* ev) if (m == MouseObject && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) { pre_press_cursor = editor->get_canvas_cursor (); editor->set_canvas_cursor (editor->cursors()->midi_pencil); - } + } if (_mouse_state != SelectTouchDragging) { @@ -3116,7 +3121,7 @@ MidiRegionView::note_entered(NoteBase* ev) { Editor* editor = dynamic_cast<Editor*>(&trackview.editor()); - pre_enter_cursor = editor->get_canvas_cursor (); + pre_note_enter_cursor = editor->get_canvas_cursor (); if (_mouse_state == SelectTouchDragging) { note_selected (ev, true); @@ -3136,9 +3141,9 @@ MidiRegionView::note_left (NoteBase*) editor->verbose_cursor()->hide (); - if (pre_enter_cursor) { - editor->set_canvas_cursor (pre_enter_cursor); - pre_enter_cursor = 0; + if (pre_note_enter_cursor) { + editor->set_canvas_cursor (pre_note_enter_cursor); + pre_note_enter_cursor = 0; } } @@ -3190,13 +3195,13 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo Editing::MouseMode mm = editor->current_mouse_mode(); bool trimmable = (mm == MouseObject || mm == MouseTimeFX || mm == MouseDraw); - if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) { - editor->set_canvas_cursor (editor->cursors()->left_side_trim); - } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) { - editor->set_canvas_cursor (editor->cursors()->right_side_trim); - } else { - if (pre_enter_cursor && can_set_cursor) { - editor->set_canvas_cursor (pre_enter_cursor); + if (can_set_cursor) { + if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) { + editor->set_canvas_cursor (editor->cursors()->left_side_trim); + } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) { + editor->set_canvas_cursor (editor->cursors()->right_side_trim); + } else if (pre_note_enter_cursor) { + editor->set_canvas_cursor (pre_note_enter_cursor); } } } @@ -3221,7 +3226,7 @@ MidiRegionView::set_frame_color() } if (!rect_visible) { - f = UINT_RGBA_CHANGE_A (f, 0); + f = UINT_RGBA_CHANGE_A (f, 80); } frame->set_fill_color (f); @@ -3520,7 +3525,8 @@ MidiRegionView::update_ghost_note (double x, double y) /* note that this sets the time of the ghost note in beats relative to the start of the source; that is how all note times are stored. */ - _ghost_note->note()->set_time (absolute_frames_to_source_beats (f + _region->position ())); + _ghost_note->note()->set_time ( + std::max(0.0, absolute_frames_to_source_beats (f + _region->position ()))); _ghost_note->note()->set_length (length); _ghost_note->note()->set_note (midi_stream_view()->y_to_note (y)); _ghost_note->note()->set_channel (mtv->get_channel_for_add ()); diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 3fd6625ce9..65ca7df7ab 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -473,6 +473,7 @@ private: Gdk::Cursor* pre_enter_cursor; Gdk::Cursor* pre_press_cursor; + Gdk::Cursor* pre_note_enter_cursor; NotePlayer* _note_player; diff --git a/gtk2_ardour/midi_selection.cc b/gtk2_ardour/midi_selection.cc index bf9b88899b..f98f696444 100644 --- a/gtk2_ardour/midi_selection.cc +++ b/gtk2_ardour/midi_selection.cc @@ -17,29 +17,19 @@ */ -#include "gtkmm2ext/gui_thread.h" -#include "midi_region_view.h" #include "midi_selection.h" -#include "region_view.h" MidiRegionSelection::MidiRegionSelection () -{ - RegionView::RegionViewGoingAway.connect (_death_connection, MISSING_INVALIDATOR, boost::bind (&MidiRegionSelection::remove_it, this, _1), gui_context()); -} + : RegionSelection () +{} -/** Copy constructor. - * @param other MidiRegionSelection to copy. - */ MidiRegionSelection::MidiRegionSelection (MidiRegionSelection const & other) - : std::list<MidiRegionView*> (other) -{ - RegionView::RegionViewGoingAway.connect (_death_connection, MISSING_INVALIDATOR, boost::bind (&MidiRegionSelection::remove_it, this, _1), gui_context()); -} - + : RegionSelection (other) +{} -void -MidiRegionSelection::remove_it (RegionView* rv) +MidiRegionSelection& +MidiRegionSelection::operator= (const MidiRegionSelection& other) { - MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (rv); - remove (mrv); + RegionSelection::operator=(other); + return *this; } diff --git a/gtk2_ardour/midi_selection.h b/gtk2_ardour/midi_selection.h index f2c2d3fc60..2aa04356d7 100644 --- a/gtk2_ardour/midi_selection.h +++ b/gtk2_ardour/midi_selection.h @@ -20,22 +20,19 @@ #ifndef __ardour_gtk_midi_selection_h__ #define __ardour_gtk_midi_selection_h__ -#include <list> -#include "pbd/signals.h" +#include "region_selection.h" class MidiRegionView; class MidiCutBuffer; class RegionView; -class MidiRegionSelection : public std::list<MidiRegionView*> +class MidiRegionSelection : public RegionSelection { public: MidiRegionSelection (); - MidiRegionSelection (MidiRegionSelection const &); + MidiRegionSelection (const MidiRegionSelection&); -private: - void remove_it (RegionView *); - PBD::ScopedConnection _death_connection; + MidiRegionSelection& operator= (const MidiRegionSelection&); }; struct MidiNoteSelection : std::list<MidiCutBuffer*> {}; diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc index 7bc45a4b25..5e5d83e500 100644 --- a/gtk2_ardour/note_base.cc +++ b/gtk2_ardour/note_base.cc @@ -262,8 +262,8 @@ NoteBase::event_handler (GdkEvent* ev) switch (ev->type) { case GDK_ENTER_NOTIFY: - set_mouse_fractions (ev); _region.note_entered (this); + set_mouse_fractions (ev); break; case GDK_LEAVE_NOTIFY: diff --git a/gtk2_ardour/note_select_dialog.h b/gtk2_ardour/note_select_dialog.h index 607dbe1506..910728f2fb 100644 --- a/gtk2_ardour/note_select_dialog.h +++ b/gtk2_ardour/note_select_dialog.h @@ -20,6 +20,7 @@ #ifndef __gtk2_ardour_note_select_dialog_h__ #define __gtk2_ardour_note_select_dialog_h__ +#include <stdint.h> #include "ardour_dialog.h" #include "gtk_pianokeyboard.h" diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc index bf9da544e6..b3b5a91ed3 100644 --- a/gtk2_ardour/port_matrix.cc +++ b/gtk2_ardour/port_matrix.cc @@ -1139,7 +1139,7 @@ PortMatrix::get_association (PortMatrixNode node) const } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return PortMatrixNode::NOT_ASSOCIATED; } diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index a4d2b5dee2..0cb8441fd9 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -996,7 +996,8 @@ public: PluginOptions (RCConfiguration* c) : _rc_config (c) , _display_plugin_scan_progress (_("Always Display Plugin Scan Progress")) - , _discover_vst_on_start (_("Scan for new VST Plugins on Application Start")) + , _discover_vst_on_start (_("Scan for [new] VST Plugins on Application Start")) + , _discover_au_on_start (_("Scan for AudioUnit Plugins on Application Start")) , _timeout_adjustment (0, 0, 3000, 50, 50) , _timeout_slider (_timeout_adjustment) { @@ -1022,6 +1023,7 @@ public: Gtkmm2ext::UI::instance()->set_tip (_display_plugin_scan_progress, _("<b>When enabled</b> a popup window showing plugin scan progress is displayed for indexing (cache load) and discovery (detect new plugins)")); +#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT) _timeout_slider.set_digits (0); _timeout_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &PluginOptions::timeout_changed)); @@ -1069,6 +1071,14 @@ public: b->signal_clicked().connect (sigc::mem_fun (*this, &PluginOptions::edit_vst_path_clicked)); t->attach (*b, 1, 2, n, n+1, FILL); ++n; #endif +#endif // any VST + +#ifdef AUDIOUNIT_SUPPORT + t->attach (_discover_au_on_start, 0, 2, n, n+1); ++n; + _discover_au_on_start.signal_toggled().connect (sigc::mem_fun (*this, &PluginOptions::discover_au_on_start_toggled)); + Gtkmm2ext::UI::instance()->set_tip (_discover_au_on_start, + _("<b>When enabled</b> Audio Unit Plugins are discovered on application start. When disabled AU plugins will only be available after triggering a 'Scan' manually. The first successful scan will enable AU auto-scan, Any crash during plugin discovery will disable it.")); +#endif _box->pack_start (*t,true,true); } @@ -1086,18 +1096,24 @@ public: int const x = _rc_config->get_vst_scan_timeout(); _timeout_adjustment.set_value (x); } + else if (p == "discover-audio-units") { + bool const x = _rc_config->get_discover_audio_units(); + _discover_au_on_start.set_active (x); + } } void set_state_from_config () { parameter_changed ("show-plugin-scan-window"); parameter_changed ("discover-vst-on-start"); parameter_changed ("vst-scan-timeout"); + parameter_changed ("discover-audio-units"); } private: RCConfiguration* _rc_config; CheckButton _display_plugin_scan_progress; CheckButton _discover_vst_on_start; + CheckButton _discover_au_on_start; Adjustment _timeout_adjustment; HScale _timeout_slider; @@ -1111,6 +1127,11 @@ private: _rc_config->set_discover_vst_on_start(x); } + void discover_au_on_start_toggled () { + bool const x = _discover_au_on_start.get_active(); + _rc_config->set_discover_audio_units(x); + } + void timeout_changed () { int x = floor(_timeout_adjustment.get_value()); _rc_config->set_vst_scan_timeout(x); @@ -2127,7 +2148,7 @@ RCOptionEditor::RCOptionEditor () /* VIDEO Timeline */ add_option (_("Video"), new VideoTimelineOptions (_rc_config)); -#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT) +#if (defined WINDOWS_VST_SUPPORT || defined LXVST_SUPPORT || defined AUDIOUNIT_SUPPORT) /* Plugin options (currrently VST only) */ add_option (_("Plugins"), new PluginOptions (_rc_config)); #endif diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index d4604b265d..fcdde48487 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -225,7 +225,9 @@ RegionView::~RegionView () bool RegionView::canvas_group_event (GdkEvent* event) { - return trackview.editor().canvas_region_view_event (event, group, this); + if (!in_destructor) { + return trackview.editor().canvas_region_view_event (event, group, this); + } } void diff --git a/gtk2_ardour/rhythm_ferret.cc b/gtk2_ardour/rhythm_ferret.cc index ec5ebc93a1..f159331018 100644 --- a/gtk2_ardour/rhythm_ferret.cc +++ b/gtk2_ardour/rhythm_ferret.cc @@ -273,7 +273,7 @@ RhythmFerret::get_note_onset_function () fatal << string_compose (_("programming error: %1 (%2)"), X_("illegal note onset function string"), txt) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return -1; } diff --git a/gtk2_ardour/route_group_dialog.cc b/gtk2_ardour/route_group_dialog.cc index 3addc1c598..e7e48f777e 100644 --- a/gtk2_ardour/route_group_dialog.cc +++ b/gtk2_ardour/route_group_dialog.cc @@ -207,7 +207,7 @@ RouteGroupDialog::do_run () msg.run (); } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return false; } diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 31c2eb1712..c4d49e40b9 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2015,7 +2015,7 @@ RouteTimeAxisView::add_processor_automation_curve (boost::shared_ptr<Processor> << string_compose (X_("processor automation curve for %1:%2/%3/%4 not registered with track!"), processor->name(), what.type(), (int) what.channel(), what.id() ) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return; } @@ -2481,7 +2481,7 @@ RouteTimeAxisView::add_underlay (StreamView* v, bool /*update_xml*/) if (find(_underlay_streams.begin(), _underlay_streams.end(), v) == _underlay_streams.end()) { if (find(other._underlay_mirrors.begin(), other._underlay_mirrors.end(), this) != other._underlay_mirrors.end()) { fatal << _("programming error: underlay reference pointer pairs are inconsistent!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } _underlay_streams.push_back(v); @@ -2518,7 +2518,7 @@ RouteTimeAxisView::remove_underlay (StreamView* v) if (gm == other._underlay_mirrors.end()) { fatal << _("programming error: underlay reference pointer pairs are inconsistent!") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } v->foreach_regionview(sigc::mem_fun(*this, &RouteTimeAxisView::remove_ghost)); diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index 507245eb3d..1bdc0fe8b0 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -1002,7 +1002,7 @@ Selection::toggle (list<Selectable*> const & selectables) fatal << _("programming error: ") << X_("unknown selectable type passed to Selection::toggle()") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } @@ -1056,7 +1056,7 @@ Selection::add (list<Selectable*> const & selectables) fatal << _("programming error: ") << X_("unknown selectable type passed to Selection::add()") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index da29eb75a8..80ee165a84 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -113,7 +113,7 @@ importmode2string (ImportMode mode) case ImportAsTapeTrack: return _("as new tape tracks"); } - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return _("as new tracks"); } @@ -1891,7 +1891,7 @@ SoundFileOmega::get_channel_disposition () const if (x == disposition_map.end()) { fatal << string_compose (_("programming error: %1 (%2)"), "unknown string for import disposition", str) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } return x->second; diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index ed759f3a7e..73e150549f 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -431,7 +431,7 @@ StreamView::update_rec_box () default: fatal << string_compose (_("programming error: %1"), "illegal track mode") << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return; } @@ -575,7 +575,7 @@ StreamView::child_height () const return height / (_layers * 2 + 1); } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return height; } diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index af8699c001..58969a97f5 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -1312,7 +1312,7 @@ TimeAxisView::preset_height (Height h) return button_height + extra_height; } - /* NOTREACHED */ + abort(); /* NOTREACHED */ return 0; } diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index c698263d57..5948cebddd 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -719,12 +719,10 @@ uint32_t TimeAxisViewItem::fill_opacity () const { if (!rect_visible) { - /* if the frame/rect is marked as invisible, then the - * fill should be transparent. simplest: set - - * alpha/opacity to zero. - */ - return 0; + /* if the frame/rect is marked as "invisible", then the + fill should be translucent.parent. + */ + return 64; } if (_dragging) { @@ -781,19 +779,19 @@ TimeAxisViewItem::set_frame_color() return; } - frame->set_fill_color (get_fill_color()); + frame->set_fill_color (get_fill_color()); set_frame_gradient (); - if (!_recregion) { + if (!_recregion) { uint32_t f = ARDOUR_UI::config()->get_TimeAxisFrame(); - if (!rect_visible) { + if (!rect_visible) { /* make the frame outline be visible but rather transparent */ - f = UINT_RGBA_CHANGE_A (f, 64); - } + f = UINT_RGBA_CHANGE_A (f, 64); + } - frame->set_outline_color (f); - } + frame->set_outline_color (f); + } } void diff --git a/gtk2_ardour/time_selection.cc b/gtk2_ardour/time_selection.cc index a0f33e8c99..8545a345eb 100644 --- a/gtk2_ardour/time_selection.cc +++ b/gtk2_ardour/time_selection.cc @@ -38,7 +38,7 @@ TimeSelection::operator[] (uint32_t which) } } fatal << string_compose (_("programming error: request for non-existent audio range (%1)!"), which) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ return *(new AudioRange(0,0,0)); /* keep the compiler happy; never called */ } diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index 171fc631d5..0f61656033 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -708,7 +708,7 @@ ARDOUR_UI_UTILS::get_icon_path (const char* cname, string icon_set, bool is_imag if (!find_file (def, name, data_file_path)) { fatal << string_compose (_("cannot find icon image for %1 using %2"), name, spath.to_string()) << endmsg; - /*NOTREACHED*/ + abort(); /*NOTREACHED*/ } } |