diff options
author | Ben Loftis <ben@harrisonconsoles.com> | 2014-07-23 14:36:21 -0500 |
---|---|---|
committer | Ben Loftis <ben@harrisonconsoles.com> | 2014-07-23 14:36:21 -0500 |
commit | e85ff4dad26ef13b0351de0dfd92ce22022cd611 (patch) | |
tree | 59f29f3200418080ab8fcbf3c83e135349849f5d | |
parent | 1bbb60df5d44f426423c48fe9cddacf291520ab5 (diff) |
Cut and Copy should remember the white space at the end of a range.
This will be used when you paste with Ripple; it maintains the whitespace that you chose in the selection.
Also fix default setting of Dim contol by storing the default(normal) value for MPControl Controllables.
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/monitor_processor.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/playlist.h | 3 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 20 |
4 files changed, 26 insertions, 2 deletions
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 36b2cdb2e9..e524fde94a 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -1521,7 +1521,7 @@ RouteTimeAxisView::paste (framepos_t pos, float times, Selection& selection, siz pl->clear_changes (); if (Config->get_edit_mode() == Ripple) { - std::pair<framepos_t, framepos_t> extent = (*p)->get_extent(); + std::pair<framepos_t, framepos_t> extent = (*p)->get_extent_with_endspace(); framecnt_t amount = extent.second - extent.first; pl->ripple(pos, amount * times, boost::shared_ptr<Region>()); } diff --git a/libs/ardour/ardour/monitor_processor.h b/libs/ardour/ardour/monitor_processor.h index 2fe108a427..39aaeca67f 100644 --- a/libs/ardour/ardour/monitor_processor.h +++ b/libs/ardour/ardour/monitor_processor.h @@ -46,6 +46,7 @@ public: MPControl (T initial, const std::string& name, PBD::Controllable::Flag flag, float lower = 0.0f, float upper = 1.0f) : PBD::Controllable (name, flag) + , _normal (initial) , _value (initial) , _lower (lower) , _upper (upper) @@ -76,6 +77,7 @@ public: double lower () const { return _lower; } double upper () const { return _upper; } + double normal () const { return _normal; } /* "access as T" API */ @@ -114,6 +116,7 @@ protected: T _value; T _lower; T _upper; + T _normal; }; class LIBARDOUR_API MonitorProcessor : public Processor diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 0cb68cd805..bb211dbe58 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -120,6 +120,7 @@ public: uint32_t n_regions() const; bool all_regions_empty() const; std::pair<framepos_t, framepos_t> get_extent () const; + std::pair<framepos_t, framepos_t> get_extent_with_endspace() const; layer_t top_layer() const; EditMode get_edit_mode() const { return _edit_mode; } @@ -396,6 +397,8 @@ public: void setup_layering_indices (RegionList const &); void coalesce_and_check_crossfades (std::list<Evoral::Range<framepos_t> >); boost::shared_ptr<RegionList> find_regions_at (framepos_t); + + framepos_t _end_space; //this is used when we are pasting a range with extra space at the end }; } /* namespace ARDOUR */ diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 4214e9031d..77666977fc 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -256,6 +256,10 @@ Playlist::Playlist (boost::shared_ptr<const Playlist> other, framepos_t start, f add_region_internal (new_region, position); } + //keep track of any dead space at end (for pasting into Ripple or Splice mode) + //at the end of construction, any length of cnt beyond the extents of the regions is end_space + _end_space = cnt - (get_extent().second - get_extent().first); + in_set_state--; first_set_state = false; } @@ -315,6 +319,7 @@ Playlist::init (bool hide) _frozen = false; _capture_insertion_underway = false; _combine_ops = 0; + _end_space = 0; _session.history().BeginUndoRedo.connect_same_thread (*this, boost::bind (&Playlist::begin_undo, this)); _session.history().EndUndoRedo.connect_same_thread (*this, boost::bind (&Playlist::end_undo, this)); @@ -1104,6 +1109,10 @@ Playlist::flush_notifications (bool from_undo) in_partition = false; } + + //keep track of any dead space at end (for pasting into Ripple or Splice mode) + framepos_t wanted_length = end-start; + _end_space = wanted_length - get_extent().second-get_extent().first; } boost::shared_ptr<Playlist> @@ -1188,7 +1197,8 @@ Playlist::flush_notifications (bool from_undo) new_name += '.'; new_name += buf; - cnt = min (_get_extent().second - start, cnt); + // cnt = min (_get_extent().second - start, cnt); (We need the full range length when copy/pasting in Ripple. Why was this limit here? It's not in CUT... ) + return PlaylistFactory::create (shared_from_this(), start, cnt, new_name, result_is_hidden); } @@ -2243,6 +2253,14 @@ Playlist::get_extent () const } pair<framepos_t, framepos_t> +Playlist::get_extent_with_endspace () const +{ + pair<framepos_t, framepos_t> l = get_extent(); + l.second += _end_space; + return l; +} + +pair<framepos_t, framepos_t> Playlist::_get_extent () const { pair<framepos_t, framepos_t> ext (max_framepos, 0); |