X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_ops.cc;h=9206f1516bfc1a2581d69237d028a346e5ec58d3;hb=fddb3778120e25b3b8e8134084e260dac07c1365;hp=2e5055e755258f4c726da924a3ed478fef31b616;hpb=acfc44f3889704587ff281c6348523b2811e7c2e;p=ardour.git diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 2e5055e755..9206f1516b 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -1736,7 +1736,7 @@ Editor::temporal_zoom_region (bool both_axes) for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { if (find (tracks.begin(), tracks.end(), (*i)) == tracks.end()) { - hide_track_in_display (**i, true); + hide_track_in_display (*i, true); } } @@ -1776,7 +1776,13 @@ Editor::temporal_zoom_session () ENSURE_GUI_THREAD (*this, &Editor::temporal_zoom_session) if (_session) { - temporal_zoom_by_frame (_session->current_start_frame(), _session->current_end_frame(), "zoom to _session"); + nframes_t const l = _session->current_end_frame() - _session->current_start_frame(); + double s = _session->current_start_frame() - l * 0.01; + if (s < 0) { + s = 0; + } + nframes_t const e = _session->current_end_frame() + l * 0.01; + temporal_zoom_by_frame (nframes_t (s), e, "zoom to _session"); } } @@ -2227,7 +2233,8 @@ Editor::insert_region_list_drag (boost::shared_ptr region, int x, int y) } void -Editor::insert_route_list_drag (boost::shared_ptr route, int x, int y) { +Editor::insert_route_list_drag (boost::shared_ptr route, int x, int y) +{ double wx, wy; double cx, cy; nframes_t where; @@ -2235,7 +2242,7 @@ Editor::insert_route_list_drag (boost::shared_ptr route, int x, int y) { RouteTimeAxisView *source_rtv = 0; track_canvas->window_to_world (x, y, wx, wy); - wx += _horizontal_position; + wx += horizontal_position (); wy += vertical_adjustment.get_value(); GdkEvent event; @@ -3655,6 +3662,8 @@ Editor::bounce_range_selection (bool replace, bool enable_processing) InterThreadInfo itt; playlist->clear_history (); + playlist->clear_owned_history (); + boost::shared_ptr r = rtv->track()->bounce_range (start, start+cnt, itt, enable_processing); if (replace) { @@ -3664,7 +3673,13 @@ Editor::bounce_range_selection (bool replace, bool enable_processing) playlist->add_region (r, start); } - _session->add_command (new StatefulDiffCommand (playlist)); + vector cmds; + playlist->rdiff (cmds); + for (vector::iterator j = cmds.begin(); j != cmds.end(); ++j) { + _session->add_command (*j); + } + + _session->add_command (new StatefulDiffCommand (playlist)); } commit_reversible_command (); @@ -4598,7 +4613,7 @@ Command* Editor::apply_midi_note_edit_op_to_region (MidiOperator& op, MidiRegionView& mrv) { Evoral::Sequence::Notes selected; - mrv.selection_as_notelist (selected); + mrv.selection_as_notelist (selected, true); vector::Notes> v; v.push_back (selected); @@ -4641,6 +4656,47 @@ Editor::apply_midi_note_edit_op (MidiOperator& op) rs.clear (); } +void +Editor::fork_region () +{ + RegionSelection rs; + + get_regions_for_action (rs); + + if (rs.empty()) { + return; + } + + begin_reversible_command (_("Fork Region(s)")); + + track_canvas->get_window()->set_cursor (*wait_cursor); + gdk_flush (); + + for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) { + RegionSelection::iterator tmp = r; + ++tmp; + + MidiRegionView* const mrv = dynamic_cast(*r); + + if (mrv) { + boost::shared_ptr playlist = mrv->region()->playlist(); + boost::shared_ptr newregion = mrv->midi_region()->clone (); + + playlist->clear_history (); + cerr << "Replace region with " << newregion->name() << endl; + playlist->replace_region (mrv->region(), newregion, mrv->region()->position()); + _session->add_command(new StatefulDiffCommand (playlist)); + } + + r = tmp; + } + + commit_reversible_command (); + rs.clear (); + + track_canvas->get_window()->set_cursor (*current_canvas_cursor); +} + void Editor::quantize_region () { @@ -6009,7 +6065,7 @@ Editor::playhead_backward_to_grid () } void -Editor::set_track_height (uint32_t h) +Editor::set_track_height (Height h) { TrackSelection& ts (selection->tracks); @@ -6318,7 +6374,7 @@ Editor::fit_tracks (TrackViewList & tracks) uint32_t h = (uint32_t) floor ((_canvas_height - child_heights - canvas_timebars_vsize) / tracks.size()); double first_y_pos = DBL_MAX; - if (h < TimeAxisView::hSmall) { + if (h < TimeAxisView::preset_height (HeightSmall)) { MessageDialog msg (*this, _("There are too many tracks to fit in the current window")); /* too small to be displayed */ return; @@ -6350,7 +6406,7 @@ Editor::fit_tracks (TrackViewList & tracks) first_y_pos = std::min ((*t)->y_position (), first_y_pos); } else { if (prev_was_selected && next_is_selected) { - hide_track_in_display (**t); + hide_track_in_display (*t); } }