diff --git a/gtk2_ardour/editing_context.cc b/gtk2_ardour/editing_context.cc index 925ec6d29c..6fb3e7666f 100644 --- a/gtk2_ardour/editing_context.cc +++ b/gtk2_ardour/editing_context.cc @@ -155,6 +155,8 @@ EditingContext::EditingContext (std::string const & name) , _dragging_playhead (false) { + EC_LOCAL_TEMPO_SCOPE; + using namespace Gtk::Menu_Helpers; if (!button_bindings) { @@ -247,6 +249,8 @@ EditingContext::EditingContext (std::string const & name) EditingContext::~EditingContext() { + EC_LOCAL_TEMPO_SCOPE; + ActionManager::drop_action_group (_midi_actions); ActionManager::drop_action_group (_common_actions); ActionManager::drop_action_group (editor_actions); @@ -260,6 +264,8 @@ EditingContext::~EditingContext() void EditingContext::ui_parameter_changed (string parameter) { + EC_LOCAL_TEMPO_SCOPE; + if (parameter == "sound-midi-notes") { if (UIConfiguration::instance().get_sound_midi_notes()) { play_note_selection_button.set_active_state (Gtkmm2ext::ExplicitActive); @@ -273,11 +279,15 @@ EditingContext::ui_parameter_changed (string parameter) void EditingContext::parameter_changed (string parameter) { + EC_LOCAL_TEMPO_SCOPE; + } void EditingContext::set_session (ARDOUR::Session* s) { + EC_LOCAL_TEMPO_SCOPE; + SessionHandlePtr::set_session (s); disable_automation_bindings (); } @@ -285,6 +295,8 @@ EditingContext::set_session (ARDOUR::Session* s) void EditingContext::set_selected_midi_region_view (MidiRegionView& mrv) { + EC_LOCAL_TEMPO_SCOPE; + /* clear note selection in all currently selected MidiRegionViews */ if (get_selection().regions.contains (&mrv) && get_selection().regions.size() == 1) { @@ -299,6 +311,8 @@ EditingContext::set_selected_midi_region_view (MidiRegionView& mrv) void EditingContext::register_automation_actions (Bindings* automation_bindings, std::string const & prefix) { + EC_LOCAL_TEMPO_SCOPE; + _automation_actions = ActionManager::create_action_group (automation_bindings, prefix + X_("Automation")); reg_sens (_automation_actions, "create-point", _("Create Automation Point"), sigc::mem_fun (*this, &EditingContext::automation_create_point_at_edit_point)); @@ -313,6 +327,8 @@ EditingContext::register_automation_actions (Bindings* automation_bindings, std: void EditingContext::enable_automation_bindings () { + EC_LOCAL_TEMPO_SCOPE; + if (_automation_actions) { ActionManager::set_sensitive (_automation_actions, true); } @@ -321,6 +337,8 @@ EditingContext::enable_automation_bindings () void EditingContext::disable_automation_bindings () { + EC_LOCAL_TEMPO_SCOPE; + if (_automation_actions) { ActionManager::set_sensitive (_automation_actions, false); } @@ -329,6 +347,8 @@ EditingContext::disable_automation_bindings () void EditingContext::set_action_defaults () { + EC_LOCAL_TEMPO_SCOPE; + #ifndef LIVETRAX follow_playhead_action->set_active (false); follow_playhead_action->set_active (true); @@ -370,6 +390,8 @@ EditingContext::set_action_defaults () void EditingContext::register_common_actions (Bindings* common_bindings, std::string const & prefix) { + EC_LOCAL_TEMPO_SCOPE; + _common_actions = ActionManager::create_action_group (common_bindings, prefix + X_("Editing")); reg_sens (_common_actions, "temporal-zoom-out", _("Zoom Out"), sigc::bind (sigc::mem_fun (*this, &EditingContext::temporal_zoom_step), true)); @@ -457,6 +479,8 @@ EditingContext::register_common_actions (Bindings* common_bindings, std::string void EditingContext::register_midi_actions (Bindings* midi_bindings, std::string const & prefix) { + EC_LOCAL_TEMPO_SCOPE; + _midi_actions = ActionManager::create_action_group (midi_bindings, prefix + X_("Notes")); /* two versions to allow same action for Delete and Backspace */ @@ -587,6 +611,8 @@ EditingContext::register_midi_actions (Bindings* midi_bindings, std::string cons void EditingContext::midi_action (void (MidiView::*method)()) { + EC_LOCAL_TEMPO_SCOPE; + MidiRegionSelection ms = get_selection().midi_regions(); if (ms.empty()) { @@ -614,6 +640,8 @@ EditingContext::midi_action (void (MidiView::*method)()) void EditingContext::next_grid_choice () { + EC_LOCAL_TEMPO_SCOPE; + switch (grid_type()) { case Editing::GridTypeBeatDiv32: set_grid_type (Editing::GridTypeNone); @@ -659,6 +687,8 @@ EditingContext::next_grid_choice () void EditingContext::prev_grid_choice () { + EC_LOCAL_TEMPO_SCOPE; + switch (grid_type()) { case Editing::GridTypeBeatDiv32: set_grid_type (Editing::GridTypeBeatDiv16); @@ -704,6 +734,8 @@ EditingContext::prev_grid_choice () void EditingContext::grid_type_chosen (GridType gt) { + EC_LOCAL_TEMPO_SCOPE; + /* this is driven by a toggle on a radio group, and so is invoked twice, once for the item that became inactive and once for the one that became active. @@ -753,6 +785,8 @@ EditingContext::grid_type_chosen (GridType gt) void EditingContext::draw_length_chosen (GridType type) { + EC_LOCAL_TEMPO_SCOPE; + /* this is driven by a toggle on a radio group, and so is invoked twice, once for the item that became inactive and once for the one that became active. @@ -781,6 +815,8 @@ EditingContext::draw_length_chosen (GridType type) void EditingContext::draw_velocity_chosen (int v) { + EC_LOCAL_TEMPO_SCOPE; + /* this is driven by a toggle on a radio group, and so is invoked twice, once for the item that became inactive and once for the one that became active. @@ -812,6 +848,8 @@ EditingContext::draw_velocity_chosen (int v) void EditingContext::draw_channel_chosen (int c) { + EC_LOCAL_TEMPO_SCOPE; + /* this is driven by a toggle on a radio group, and so is invoked twice, once for the item that became inactive and once for the one that became active. @@ -843,6 +881,8 @@ EditingContext::draw_channel_chosen (int c) void EditingContext::cycle_snap_mode () { + EC_LOCAL_TEMPO_SCOPE; + switch (snap_mode()) { case SnapOff: case SnapNormal: @@ -857,6 +897,8 @@ EditingContext::cycle_snap_mode () void EditingContext::snap_mode_chosen (SnapMode mode) { + EC_LOCAL_TEMPO_SCOPE; + /* this is driven by a toggle on a radio group, and so is invoked twice, once for the item that became inactive and once for the one that became active. @@ -888,6 +930,8 @@ EditingContext::snap_mode_chosen (SnapMode mode) GridType EditingContext::grid_type() const { + EC_LOCAL_TEMPO_SCOPE; + for (auto const & [grid_type,action] : grid_actions) { if (action->get_active()) { return grid_type; @@ -900,6 +944,8 @@ EditingContext::grid_type() const GridType EditingContext::draw_length() const { + EC_LOCAL_TEMPO_SCOPE; + for (auto const & [len,action] : draw_length_actions) { if (action->get_active()) { return len; @@ -912,6 +958,8 @@ EditingContext::draw_length() const int EditingContext::draw_velocity() const { + EC_LOCAL_TEMPO_SCOPE; + for (auto const & [vel,action] : draw_velocity_actions) { if (action->get_active()) { return vel; @@ -924,6 +972,8 @@ EditingContext::draw_velocity() const int EditingContext::draw_channel() const { + EC_LOCAL_TEMPO_SCOPE; + for (auto const & [chn,action] : draw_channel_actions) { if (action->get_active()) { return chn; @@ -936,12 +986,16 @@ EditingContext::draw_channel() const bool EditingContext::grid_musical() const { + EC_LOCAL_TEMPO_SCOPE; + return grid_type_is_musical (grid_type()); } bool EditingContext::grid_type_is_musical(GridType gt) const { + EC_LOCAL_TEMPO_SCOPE; + switch (gt) { case GridTypeBeatDiv32: case GridTypeBeatDiv28: @@ -973,6 +1027,8 @@ EditingContext::grid_type_is_musical(GridType gt) const SnapMode EditingContext::snap_mode() const { + EC_LOCAL_TEMPO_SCOPE; + for (auto const & [mode,action] : snap_mode_actions) { if (action->get_active()) { return mode; @@ -985,12 +1041,16 @@ EditingContext::snap_mode() const void EditingContext::set_draw_length (GridType gt) { + EC_LOCAL_TEMPO_SCOPE; + draw_length_actions[gt]->set_active (true); } void EditingContext::set_draw_velocity (int v) { + EC_LOCAL_TEMPO_SCOPE; + if (v == DRAW_VEL_AUTO) { draw_velocity_actions[v]->set_active (true); } else { @@ -1001,6 +1061,8 @@ EditingContext::set_draw_velocity (int v) void EditingContext::set_draw_channel (int c) { + EC_LOCAL_TEMPO_SCOPE; + if (c == DRAW_CHAN_AUTO) { draw_channel_actions[c]->set_active (true); } else { @@ -1011,18 +1073,24 @@ EditingContext::set_draw_channel (int c) void EditingContext::set_grid_type (GridType gt) { + EC_LOCAL_TEMPO_SCOPE; + grid_actions[gt]->set_active (true); } void EditingContext::set_snap_mode (SnapMode mode) { + EC_LOCAL_TEMPO_SCOPE; + snap_mode_actions[mode]->set_active (true);; } void EditingContext::build_grid_type_menu () { + EC_LOCAL_TEMPO_SCOPE; + using namespace Menu_Helpers; /* there's no Grid, but if Snap is engaged, the Snap preferences will be applied */ @@ -1078,6 +1146,8 @@ EditingContext::build_grid_type_menu () void EditingContext::build_draw_midi_menus () { + EC_LOCAL_TEMPO_SCOPE; + using namespace Menu_Helpers; /* Note-Length when drawing */ @@ -1135,18 +1205,24 @@ EditingContext::build_draw_midi_menus () bool EditingContext::drag_active () const { + EC_LOCAL_TEMPO_SCOPE; + return _drags->active(); } bool EditingContext::preview_video_drag_active () const { + EC_LOCAL_TEMPO_SCOPE; + return _drags->preview_video (); } Temporal::TimeDomain EditingContext::time_domain () const { + EC_LOCAL_TEMPO_SCOPE; + if (_session) { return _session->config.get_default_time_domain(); } @@ -1177,24 +1253,32 @@ EditingContext::time_domain () const void EditingContext::toggle_stationary_playhead () { + EC_LOCAL_TEMPO_SCOPE; + stationary_playhead_action->set_active (!stationary_playhead_action->get_active ()); } void EditingContext::stationary_playhead_chosen () { + EC_LOCAL_TEMPO_SCOPE; + instant_save (); } void EditingContext::set_stationary_playhead (bool yn) { + EC_LOCAL_TEMPO_SCOPE; + stationary_playhead_action->set_active (yn); } bool EditingContext::stationary_playhead () const { + EC_LOCAL_TEMPO_SCOPE; + if (!stationary_playhead_action) { return false; } @@ -1205,12 +1289,16 @@ EditingContext::stationary_playhead () const void EditingContext::toggle_follow_playhead () { + EC_LOCAL_TEMPO_SCOPE; + set_follow_playhead (!follow_playhead_action->get_active(), true); } void EditingContext::follow_playhead_chosen () { + EC_LOCAL_TEMPO_SCOPE; + instant_save (); } @@ -1220,6 +1308,8 @@ EditingContext::follow_playhead_chosen () void EditingContext::set_follow_playhead (bool yn, bool catch_up) { + EC_LOCAL_TEMPO_SCOPE; + assert (follow_playhead_action); follow_playhead_action->set_active (yn); if (yn && catch_up) { @@ -1231,6 +1321,8 @@ EditingContext::set_follow_playhead (bool yn, bool catch_up) bool EditingContext::follow_playhead() const { + EC_LOCAL_TEMPO_SCOPE; + if (!follow_playhead_action) { return false; } @@ -1241,30 +1333,40 @@ EditingContext::follow_playhead() const double EditingContext::time_to_pixel (timepos_t const & pos) const { + EC_LOCAL_TEMPO_SCOPE; + return sample_to_pixel (pos.samples()); } double EditingContext::time_to_pixel_unrounded (timepos_t const & pos) const { + EC_LOCAL_TEMPO_SCOPE; + return sample_to_pixel_unrounded (pos.samples()); } double EditingContext::time_delta_to_pixel (timepos_t const& start, timepos_t const& end) const { + EC_LOCAL_TEMPO_SCOPE; + return sample_to_pixel (end.samples()) - sample_to_pixel (start.samples ()); } double EditingContext::duration_to_pixels (timecnt_t const & dur) const { + EC_LOCAL_TEMPO_SCOPE; + return sample_to_pixel (dur.samples()); } double EditingContext::duration_to_pixels_unrounded (timecnt_t const & dur) const { + EC_LOCAL_TEMPO_SCOPE; + return sample_to_pixel_unrounded (dur.samples()); } @@ -1276,6 +1378,8 @@ EditingContext::duration_to_pixels_unrounded (timecnt_t const & dur) const void EditingContext::snap_to_with_modifier (timepos_t& start, GdkEvent const * event, Temporal::RoundMode direction, SnapPref pref, bool ensure_snap) const { + EC_LOCAL_TEMPO_SCOPE; + if (!_session || !event) { return; } @@ -1298,6 +1402,8 @@ EditingContext::snap_to_with_modifier (timepos_t& start, GdkEvent const * event, void EditingContext::snap_to (timepos_t& start, Temporal::RoundMode direction, SnapPref pref, bool ensure_snap) const { + EC_LOCAL_TEMPO_SCOPE; + if (!_session || (snap_mode() == SnapOff && !ensure_snap)) { return; } @@ -1308,12 +1414,16 @@ EditingContext::snap_to (timepos_t& start, Temporal::RoundMode direction, SnapPr timepos_t EditingContext::snap_to_bbt (timepos_t const & presnap, Temporal::RoundMode direction, SnapPref gpref) const { + EC_LOCAL_TEMPO_SCOPE; + return snap_to_bbt_via_grid (presnap, direction, gpref, grid_type()); } timepos_t EditingContext::snap_to_bbt_via_grid (timepos_t const & presnap, Temporal::RoundMode direction, SnapPref gpref, GridType grid_type) const { + EC_LOCAL_TEMPO_SCOPE; + timepos_t ret(presnap); TempoMap::SharedPtr tmap (TempoMap::use()); @@ -1416,6 +1526,8 @@ EditingContext::snap_to_bbt_via_grid (timepos_t const & presnap, Temporal::Round void EditingContext::check_best_snap (timepos_t const & presnap, timepos_t &test, timepos_t &dist, timepos_t &best) const { + EC_LOCAL_TEMPO_SCOPE; + timepos_t diff = timepos_t (presnap.distance (test).abs ()); if (diff < dist) { dist = diff; @@ -1428,6 +1540,8 @@ EditingContext::check_best_snap (timepos_t const & presnap, timepos_t &test, tim timepos_t EditingContext::canvas_event_time (GdkEvent const * event, double* pcx, double* pcy) const { + EC_LOCAL_TEMPO_SCOPE; + timepos_t pos (canvas_event_sample (event, pcx, pcy)); if (time_domain() == Temporal::AudioTime) { @@ -1440,6 +1554,8 @@ EditingContext::canvas_event_time (GdkEvent const * event, double* pcx, double* samplepos_t EditingContext::canvas_event_sample (GdkEvent const * event, double* pcx, double* pcy) const { + EC_LOCAL_TEMPO_SCOPE; + double x; double y; @@ -1469,6 +1585,8 @@ EditingContext::canvas_event_sample (GdkEvent const * event, double* pcx, double uint32_t EditingContext::count_bars (Beats const & start, Beats const & end) const { + EC_LOCAL_TEMPO_SCOPE; + TempoMapPoints bar_grid; TempoMap::SharedPtr tmap (TempoMap::use()); bar_grid.reserve (4096); @@ -1481,6 +1599,8 @@ EditingContext::count_bars (Beats const & start, Beats const & end) const void EditingContext::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper) { + EC_LOCAL_TEMPO_SCOPE; + if (_session == 0) { return; } @@ -1575,6 +1695,8 @@ EditingContext::compute_bbt_ruler_scale (samplepos_t lower, samplepos_t upper) Quantize* EditingContext::get_quantize_op () { + EC_LOCAL_TEMPO_SCOPE; + if (!quantize_dialog) { quantize_dialog = new QuantizeDialog (*this); } @@ -1600,6 +1722,8 @@ EditingContext::get_quantize_op () timecnt_t EditingContext::relative_distance (timepos_t const & origin, timecnt_t const & duration, Temporal::TimeDomain domain) { + EC_LOCAL_TEMPO_SCOPE; + return Temporal::TempoMap::use()->convert_duration (duration, origin, domain); } @@ -1612,6 +1736,8 @@ EditingContext::relative_distance (timepos_t const & origin, timecnt_t const & d timecnt_t EditingContext::snap_relative_time_to_relative_time (timepos_t const & origin, timecnt_t const & x, bool ensure_snap) const { + EC_LOCAL_TEMPO_SCOPE; + /* x is relative to origin, convert it to global absolute time */ timepos_t const session_pos = origin + x; @@ -1632,12 +1758,16 @@ EditingContext::snap_relative_time_to_relative_time (timepos_t const & origin, t void EditingContext::start_local_tempo_map (std::shared_ptr map) { + EC_LOCAL_TEMPO_SCOPE; + _local_tempo_map = map; } void EditingContext::end_local_tempo_map () { + EC_LOCAL_TEMPO_SCOPE; + _local_tempo_map.reset (); Temporal::TempoMap::fetch (); } @@ -1645,6 +1775,8 @@ EditingContext::end_local_tempo_map () bool EditingContext::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type) { + EC_LOCAL_TEMPO_SCOPE; + if (!session () || session()->loading () || session()->deletion_in_progress ()) { return false; } @@ -1689,6 +1821,8 @@ EditingContext::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType void EditingContext::popup_note_context_menu (ArdourCanvas::Item* item, GdkEvent* event) { + EC_LOCAL_TEMPO_SCOPE; + using namespace Menu_Helpers; NoteBase* note = reinterpret_cast(item->get_data("notebase")); @@ -1734,6 +1868,8 @@ EditingContext::popup_note_context_menu (ArdourCanvas::Item* item, GdkEvent* eve XMLNode* EditingContext::button_settings () const { + EC_LOCAL_TEMPO_SCOPE; + XMLNode* settings = ARDOUR_UI::instance()->editor_settings(); XMLNode* node = find_named_node (*settings, X_("Buttons")); @@ -1747,12 +1883,16 @@ EditingContext::button_settings () const EditingContext::MidiViews EditingContext::filter_to_unique_midi_region_views (RegionSelection const & rs) const { + EC_LOCAL_TEMPO_SCOPE; + return filter_to_unique_midi_region_views (midiviews_from_region_selection (rs)); } EditingContext::MidiViews EditingContext::filter_to_unique_midi_region_views (MidiViews const & mvs) const { + EC_LOCAL_TEMPO_SCOPE; + typedef std::pair,timepos_t> MapEntry; std::set single_region_set; @@ -1782,6 +1922,8 @@ EditingContext::filter_to_unique_midi_region_views (MidiViews const & mvs) const EditingContext::MidiViews EditingContext::midiviews_from_region_selection (RegionSelection const & rs) const { + EC_LOCAL_TEMPO_SCOPE; + MidiViews views; for (auto & rv : rs) { @@ -1797,6 +1939,8 @@ EditingContext::midiviews_from_region_selection (RegionSelection const & rs) con void EditingContext::quantize_region () { + EC_LOCAL_TEMPO_SCOPE; + if (_session) { quantize_regions (midiviews_from_region_selection (region_selection())); } @@ -1805,6 +1949,8 @@ EditingContext::quantize_region () void EditingContext::quantize_regions (const MidiViews& rs) { + EC_LOCAL_TEMPO_SCOPE; + if (rs.empty()) { std::cerr << "no regions\n"; return; @@ -1826,6 +1972,8 @@ EditingContext::quantize_regions (const MidiViews& rs) void EditingContext::legatize_region (bool shrink_only) { + EC_LOCAL_TEMPO_SCOPE; + if (_session) { legatize_regions (midiviews_from_region_selection (region_selection ()), shrink_only); } @@ -1834,6 +1982,8 @@ EditingContext::legatize_region (bool shrink_only) void EditingContext::legatize_regions (const MidiViews& rs, bool shrink_only) { + EC_LOCAL_TEMPO_SCOPE; + if (rs.empty()) { return; } @@ -1845,6 +1995,8 @@ EditingContext::legatize_regions (const MidiViews& rs, bool shrink_only) void EditingContext::transform_region () { + EC_LOCAL_TEMPO_SCOPE; + if (_session) { transform_regions (midiviews_from_region_selection (region_selection ())); } @@ -1853,6 +2005,8 @@ EditingContext::transform_region () void EditingContext::transform_regions (const MidiViews& rs) { + EC_LOCAL_TEMPO_SCOPE; + if (rs.empty()) { return; } @@ -1872,6 +2026,8 @@ EditingContext::transform_regions (const MidiViews& rs) void EditingContext::transpose_region () { + EC_LOCAL_TEMPO_SCOPE; + if (_session) { transpose_regions (midiviews_from_region_selection (region_selection ())); } @@ -1880,6 +2036,8 @@ EditingContext::transpose_region () void EditingContext::transpose_regions (const MidiViews& rs) { + EC_LOCAL_TEMPO_SCOPE; + if (rs.empty()) { return; } @@ -1896,6 +2054,8 @@ EditingContext::transpose_regions (const MidiViews& rs) void EditingContext::edit_notes (MidiView* mrv) { + EC_LOCAL_TEMPO_SCOPE; + MidiView::Selection const & s = mrv->selection(); if (s.empty ()) { @@ -1911,6 +2071,8 @@ EditingContext::edit_notes (MidiView* mrv) void EditingContext::note_edit_done (int r, EditNoteDialog* d) { + EC_LOCAL_TEMPO_SCOPE; + d->done (r); delete d; } @@ -1918,6 +2080,8 @@ EditingContext::note_edit_done (int r, EditNoteDialog* d) PBD::Command* EditingContext::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiView& mrv) { + EC_LOCAL_TEMPO_SCOPE; + Evoral::Sequence::Notes selected; mrv.selection_as_notelist (selected, true); @@ -1936,12 +2100,16 @@ EditingContext::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiView& m void EditingContext::apply_midi_note_edit_op (MidiOperator& op, const RegionSelection& rs) { + EC_LOCAL_TEMPO_SCOPE; + apply_midi_note_edit_op (op, midiviews_from_region_selection (rs)); } void EditingContext::apply_midi_note_edit_op (MidiOperator& op, const MidiViews& rs) { + EC_LOCAL_TEMPO_SCOPE; + if (rs.empty()) { return; } @@ -1972,12 +2140,16 @@ EditingContext::apply_midi_note_edit_op (MidiOperator& op, const MidiViews& rs) double EditingContext::horizontal_position () const { + EC_LOCAL_TEMPO_SCOPE; + return horizontal_adjustment.get_value(); } void EditingContext::set_horizontal_position (double p) { + EC_LOCAL_TEMPO_SCOPE; + p = std::max (0., p); horizontal_adjustment.set_value (p); @@ -1987,6 +2159,8 @@ EditingContext::set_horizontal_position (double p) Gdk::Cursor* EditingContext::get_canvas_cursor () const { + EC_LOCAL_TEMPO_SCOPE; + Glib::RefPtr win = get_canvas_viewport()->get_window(); if (win) { @@ -1999,6 +2173,8 @@ EditingContext::get_canvas_cursor () const void EditingContext::set_canvas_cursor (Gdk::Cursor* cursor) { + EC_LOCAL_TEMPO_SCOPE; + Glib::RefPtr win = get_canvas()->get_window(); if (win && !_cursors->is_invalid (cursor)) { @@ -2017,6 +2193,8 @@ EditingContext::set_canvas_cursor (Gdk::Cursor* cursor) void EditingContext::pack_draw_box (bool with_channel) { + EC_LOCAL_TEMPO_SCOPE; + /* Draw - these MIDI tools are only visible when in Draw mode */ draw_box.set_spacing (2); draw_box.set_border_width (2); @@ -2043,6 +2221,8 @@ EditingContext::pack_draw_box (bool with_channel) void EditingContext::pack_snap_box () { + EC_LOCAL_TEMPO_SCOPE; + snap_box.pack_start (snap_mode_button, false, false); snap_box.pack_start (grid_type_selector, false, false); } @@ -2050,6 +2230,8 @@ EditingContext::pack_snap_box () void EditingContext::bind_mouse_mode_buttons () { + EC_LOCAL_TEMPO_SCOPE; + RefPtr act; act = ActionManager::get_action ((_name + X_("Editing")).c_str(), X_("temporal-zoom-in")); @@ -2102,6 +2284,8 @@ EditingContext::bind_mouse_mode_buttons () Editing::MouseMode EditingContext::current_mouse_mode() const { + EC_LOCAL_TEMPO_SCOPE; + for (auto & [mode,action] : mouse_mode_actions) { if (action->get_active()) { return mode; @@ -2114,6 +2298,8 @@ EditingContext::current_mouse_mode() const void EditingContext::set_mouse_mode (MouseMode m, bool force) { + EC_LOCAL_TEMPO_SCOPE; + if (_drags->active ()) { return; } @@ -2128,6 +2314,8 @@ EditingContext::set_mouse_mode (MouseMode m, bool force) bool EditingContext::on_velocity_scroll_event (GdkEventScroll* ev) { + EC_LOCAL_TEMPO_SCOPE; + int v = PBD::atoi (draw_velocity_selector.get_text ()); switch (ev->direction) { case GDK_SCROLL_DOWN: @@ -2146,6 +2334,8 @@ EditingContext::on_velocity_scroll_event (GdkEventScroll* ev) void EditingContext::set_common_editing_state (XMLNode const & node) { + EC_LOCAL_TEMPO_SCOPE; + double z; if (node.get_property ("zoom", z)) { /* older versions of ardour used floating point samples_per_pixel */ @@ -2191,6 +2381,8 @@ EditingContext::set_common_editing_state (XMLNode const & node) void EditingContext::get_common_editing_state (XMLNode& node) const { + EC_LOCAL_TEMPO_SCOPE; + node.set_property ("zoom", samples_per_pixel); node.set_property ("grid-type", grid_type()); node.set_property ("snap-mode", snap_mode()); @@ -2204,6 +2396,8 @@ EditingContext::get_common_editing_state (XMLNode& node) const bool EditingContext::snap_mode_button_clicked (GdkEventButton* ev) { + EC_LOCAL_TEMPO_SCOPE; + if (ev->button != 3) { cycle_snap_mode(); return true; @@ -2221,6 +2415,8 @@ EditingContext::snap_mode_button_clicked (GdkEventButton* ev) void EditingContext::ensure_visual_change_idle_handler () { + EC_LOCAL_TEMPO_SCOPE; + if (pending_visual_change.idle_handler_id < 0) { /* see comment in add_to_idle_resize above. */ pending_visual_change.idle_handler_id = g_idle_add_full (G_PRIORITY_HIGH_IDLE + 10, _idle_visual_changer, this, NULL); @@ -2237,6 +2433,8 @@ EditingContext::_idle_visual_changer (void* arg) int EditingContext::idle_visual_changer () { + EC_LOCAL_TEMPO_SCOPE; + pending_visual_change.idle_handler_id = -1; if (pending_visual_change.pending == 0) { @@ -2279,6 +2477,8 @@ EditingContext::idle_visual_changer () void EditingContext::reset_x_origin (samplepos_t sample) { + EC_LOCAL_TEMPO_SCOPE; + pending_visual_change.add (VisualChange::TimeOrigin); pending_visual_change.time_origin = sample; ensure_visual_change_idle_handler (); @@ -2287,6 +2487,8 @@ EditingContext::reset_x_origin (samplepos_t sample) void EditingContext::reset_y_origin (double y) { + EC_LOCAL_TEMPO_SCOPE; + pending_visual_change.add (VisualChange::YOrigin); pending_visual_change.y_origin = y; ensure_visual_change_idle_handler (); @@ -2295,6 +2497,8 @@ EditingContext::reset_y_origin (double y) void EditingContext::reset_zoom (samplecnt_t spp) { + EC_LOCAL_TEMPO_SCOPE; + if (_track_canvas_width <= 0) { return; } @@ -2318,6 +2522,8 @@ EditingContext::reset_zoom (samplecnt_t spp) void EditingContext::pre_render () { + EC_LOCAL_TEMPO_SCOPE; + visual_change_queued = false; if (pending_visual_change.pending != 0) { @@ -2354,6 +2560,8 @@ EditingContext::radio_reg_sens (RefPtr action_group, RadioAction::G void EditingContext::update_undo_redo_actions (PBD::UndoHistory const & history) { + EC_LOCAL_TEMPO_SCOPE; + string label; if (undo_action) { @@ -2382,6 +2590,8 @@ EditingContext::update_undo_redo_actions (PBD::UndoHistory const & history) int32_t EditingContext::get_grid_beat_divisions (GridType gt) const { + EC_LOCAL_TEMPO_SCOPE; + switch (gt) { case GridTypeBeatDiv32: return 32; case GridTypeBeatDiv28: return 28; @@ -2419,12 +2629,16 @@ EditingContext::get_grid_beat_divisions (GridType gt) const int32_t EditingContext::get_grid_music_divisions (Editing::GridType gt, uint32_t event_state) const { + EC_LOCAL_TEMPO_SCOPE; + return get_grid_beat_divisions (gt); } Temporal::Beats EditingContext::get_grid_type_as_beats (bool& success, timepos_t const & position) const { + EC_LOCAL_TEMPO_SCOPE; + success = true; int32_t const divisions = get_grid_beat_divisions (grid_type()); @@ -2504,6 +2718,8 @@ EditingContext::get_grid_type_as_beats (bool& success, timepos_t const & positio Temporal::Beats EditingContext::get_draw_length_as_beats (bool& success, timepos_t const & position) const { + EC_LOCAL_TEMPO_SCOPE; + success = true; GridType grid_to_use = draw_length() == DRAW_LEN_AUTO ? grid_type() : draw_length(); int32_t const divisions = get_grid_beat_divisions (grid_to_use); @@ -2519,6 +2735,8 @@ EditingContext::get_draw_length_as_beats (bool& success, timepos_t const & posit void EditingContext::select_automation_line (GdkEventButton* event, ArdourCanvas::Item* item, ARDOUR::SelectionOperation op) { + EC_LOCAL_TEMPO_SCOPE; + AutomationLine* al = reinterpret_cast (item->get_data ("line")); std::list selectables; double mx = event->x; @@ -2569,6 +2787,8 @@ EditingContext::select_automation_line (GdkEventButton* event, ArdourCanvas::Ite void EditingContext::reset_point_selection () { + EC_LOCAL_TEMPO_SCOPE; + for (PointSelection::iterator i = selection->points.begin(); i != selection->points.end(); ++i) { ARDOUR::AutomationList::iterator j = (*i)->model (); (*j)->value = (*i)->line().the_list()->descriptor ().normal; @@ -2578,6 +2798,8 @@ EditingContext::reset_point_selection () void EditingContext::choose_canvas_cursor_on_entry (ItemType type) { + EC_LOCAL_TEMPO_SCOPE; + if (_drags->active()) { return; } @@ -2593,12 +2815,16 @@ EditingContext::choose_canvas_cursor_on_entry (ItemType type) void EditingContext::play_note_selection_clicked () { + EC_LOCAL_TEMPO_SCOPE; + UIConfiguration::instance().set_sound_midi_notes (!UIConfiguration::instance().get_sound_midi_notes()); } void EditingContext::cycle_zoom_focus () { + EC_LOCAL_TEMPO_SCOPE; + switch (zoom_focus()) { case ZoomFocusLeft: set_zoom_focus (ZoomFocusRight); @@ -2624,6 +2850,8 @@ EditingContext::cycle_zoom_focus () void EditingContext::temporal_zoom_step_mouse_focus_scale (bool zoom_out, double scale) { + EC_LOCAL_TEMPO_SCOPE; + ZoomFocus old_zf (zoom_focus()); PBD::Unwinder uw (temporary_zoom_focus_change, true); set_zoom_focus (Editing::ZoomFocusMouse); @@ -2634,18 +2862,24 @@ EditingContext::temporal_zoom_step_mouse_focus_scale (bool zoom_out, double scal void EditingContext::temporal_zoom_step_mouse_focus (bool zoom_out) { + EC_LOCAL_TEMPO_SCOPE; + temporal_zoom_step_mouse_focus_scale (zoom_out, 2.0); } void EditingContext::temporal_zoom_step (bool zoom_out) { + EC_LOCAL_TEMPO_SCOPE; + temporal_zoom_step_scale (zoom_out, 2.0); } void EditingContext::temporal_zoom_step_scale (bool zoom_out, double scale) { + EC_LOCAL_TEMPO_SCOPE; + ENSURE_GUI_THREAD (*this, &EditingContext::temporal_zoom_step, zoom_out, scale) samplecnt_t nspp = samples_per_pixel; @@ -2676,6 +2910,8 @@ EditingContext::temporal_zoom_step_scale (bool zoom_out, double scale) void EditingContext::temporal_zoom (samplecnt_t spp) { + EC_LOCAL_TEMPO_SCOPE; + if (!_session) { return; } @@ -2807,6 +3043,8 @@ EditingContext::temporal_zoom (samplecnt_t spp) void EditingContext::calc_extra_zoom_edges (samplepos_t &start, samplepos_t &end) { + EC_LOCAL_TEMPO_SCOPE; + /* this func helps make sure we leave a little space at each end of the editor so that the zoom doesn't fit the region precisely to the screen. @@ -2839,6 +3077,8 @@ EditingContext::calc_extra_zoom_edges (samplepos_t &start, samplepos_t &end) void EditingContext::temporal_zoom_by_sample (samplepos_t start, samplepos_t end) { + EC_LOCAL_TEMPO_SCOPE; + if (!_session) return; if ((start == 0 && end == 0) || end < start) { @@ -2867,6 +3107,8 @@ EditingContext::temporal_zoom_by_sample (samplepos_t start, samplepos_t end) void EditingContext::temporal_zoom_to_sample (bool coarser, samplepos_t sample) { + EC_LOCAL_TEMPO_SCOPE; + if (!_session) { return; } @@ -2918,6 +3160,8 @@ EditingContext::temporal_zoom_to_sample (bool coarser, samplepos_t sample) bool EditingContext::mouse_sample (samplepos_t& where, bool& in_track_canvas) const { + EC_LOCAL_TEMPO_SCOPE; + /* gdk_window_get_pointer() has X11's XQueryPointer semantics in that it only * pays attentions to subwindows. this means that menu windows are ignored, and * if the pointer is in a menu, the return window from the call will be the @@ -2966,6 +3210,8 @@ EditingContext::mouse_sample (samplepos_t& where, bool& in_track_canvas) const samplepos_t EditingContext::window_event_sample (GdkEvent const * event, double* pcx, double* pcy) const { + EC_LOCAL_TEMPO_SCOPE; + ArdourCanvas::Duple d; if (!gdk_event_get_coords (event, &d.x, &d.y)) { @@ -2991,6 +3237,8 @@ EditingContext::window_event_sample (GdkEvent const * event, double* pcx, double Editing::ZoomFocus EditingContext::zoom_focus () const { + EC_LOCAL_TEMPO_SCOPE; + for (auto & [mode,action] : zoom_focus_actions) { if (action->get_active()) { return mode; @@ -3003,6 +3251,8 @@ EditingContext::zoom_focus () const void EditingContext::zoom_focus_chosen (ZoomFocus focus) { + EC_LOCAL_TEMPO_SCOPE; + if (temporary_zoom_focus_change) { /* we are just changing settings momentarily, no need to do anything */ return; @@ -3024,6 +3274,8 @@ EditingContext::zoom_focus_chosen (ZoomFocus focus) void EditingContext::alt_delete_ () { + EC_LOCAL_TEMPO_SCOPE; + delete_ (); } @@ -3031,6 +3283,8 @@ EditingContext::alt_delete_ () void EditingContext::cut () { + EC_LOCAL_TEMPO_SCOPE; + cut_copy (Cut); } @@ -3038,12 +3292,16 @@ EditingContext::cut () void EditingContext::copy () { + EC_LOCAL_TEMPO_SCOPE; + cut_copy (Copy); } void EditingContext::load_shared_bindings () { + EC_LOCAL_TEMPO_SCOPE; + Bindings* m = Bindings::get_bindings (X_("MIDI")); Bindings* b = Bindings::get_bindings (X_("Editing")); Bindings* a = Bindings::get_bindings (X_("Automation")); @@ -3081,6 +3339,8 @@ EditingContext::load_shared_bindings () void EditingContext::drop_grid () { + EC_LOCAL_TEMPO_SCOPE; + hide_grid_lines (); grid_lines.reset (); } @@ -3088,6 +3348,8 @@ EditingContext::drop_grid () void EditingContext::hide_grid_lines () { + EC_LOCAL_TEMPO_SCOPE; + if (grid_lines) { grid_lines->hide(); } @@ -3096,6 +3358,8 @@ EditingContext::hide_grid_lines () void EditingContext::maybe_draw_grid_lines (ArdourCanvas::Container* group) { + EC_LOCAL_TEMPO_SCOPE; + if (!_session) { return; } @@ -3127,6 +3391,8 @@ EditingContext::maybe_draw_grid_lines (ArdourCanvas::Container* group) void EditingContext::update_grid () { + EC_LOCAL_TEMPO_SCOPE; + if (!_session) { return; } @@ -3141,6 +3407,8 @@ EditingContext::update_grid () Location* EditingContext::transport_loop_location() { + EC_LOCAL_TEMPO_SCOPE; + if (_session) { return _session->locations()->auto_loop_location(); } else { @@ -3151,6 +3419,8 @@ EditingContext::transport_loop_location() void EditingContext::set_loop_range (timepos_t const & start, timepos_t const & end, string cmd) { + EC_LOCAL_TEMPO_SCOPE; + if (!_session) { return; } @@ -3183,6 +3453,8 @@ EditingContext::set_loop_range (timepos_t const & start, timepos_t const & end, bool EditingContext::allow_trim_cursors () const { + EC_LOCAL_TEMPO_SCOPE; + auto mouse_mode = current_mouse_mode(); return mouse_mode == MouseContent || mouse_mode == MouseTimeFX || mouse_mode == MouseDraw; } @@ -3191,6 +3463,8 @@ EditingContext::allow_trim_cursors () const void EditingContext::reset_x_origin_to_follow_playhead () { + EC_LOCAL_TEMPO_SCOPE; + assert (_session); samplepos_t const sample = _playhead_cursor->current_sample (); @@ -3242,6 +3516,8 @@ EditingContext::reset_x_origin_to_follow_playhead () void EditingContext::center_screen (samplepos_t sample) { + EC_LOCAL_TEMPO_SCOPE; + samplecnt_t const page = _visible_canvas_width * samples_per_pixel; /* if we're off the page, then scroll. @@ -3255,6 +3531,8 @@ EditingContext::center_screen (samplepos_t sample) void EditingContext::center_screen_internal (samplepos_t sample, float page) { + EC_LOCAL_TEMPO_SCOPE; + page /= 2; if (sample > page) {