mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 08:36:32 +01:00
Move time converters only to the region views that actually need them.
A step towards sorting out time issues more solidly, the time situation of MIDI region views and automation region views is slightly different.
This commit is contained in:
parent
2966dd4a9f
commit
41a9060df9
6 changed files with 82 additions and 55 deletions
|
|
@ -47,6 +47,8 @@ AutomationRegionView::AutomationRegionView (ArdourCanvas::Container*
|
|||
double spu,
|
||||
uint32_t basic_color)
|
||||
: RegionView(parent, time_axis, region, spu, basic_color, true)
|
||||
, _region_relative_time_converter(region->session().tempo_map(), region->position())
|
||||
, _source_relative_time_converter(region->session().tempo_map(), region->position() - region->start())
|
||||
, _parameter(param)
|
||||
{
|
||||
if (list) {
|
||||
|
|
@ -251,6 +253,15 @@ AutomationRegionView::region_resized (const PBD::PropertyChange& what_changed)
|
|||
{
|
||||
RegionView::region_resized (what_changed);
|
||||
|
||||
if (what_changed.contains (ARDOUR::Properties::position)) {
|
||||
_region_relative_time_converter.set_origin_b(_region->position());
|
||||
}
|
||||
|
||||
if (what_changed.contains (ARDOUR::Properties::start) ||
|
||||
what_changed.contains (ARDOUR::Properties::position)) {
|
||||
_source_relative_time_converter.set_origin_b (_region->position() - _region->start());
|
||||
}
|
||||
|
||||
if (!_line) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,6 +54,14 @@ public:
|
|||
float times,
|
||||
boost::shared_ptr<const ARDOUR::AutomationList> slist);
|
||||
|
||||
ARDOUR::BeatsFramesConverter const & region_relative_time_converter () const {
|
||||
return _region_relative_time_converter;
|
||||
}
|
||||
|
||||
ARDOUR::BeatsFramesConverter const & source_relative_time_converter () const {
|
||||
return _source_relative_time_converter;
|
||||
}
|
||||
|
||||
inline AutomationTimeAxisView* automation_view() const
|
||||
{ return dynamic_cast<AutomationTimeAxisView*>(&trackview); }
|
||||
|
||||
|
|
@ -75,6 +83,8 @@ protected:
|
|||
void exited();
|
||||
|
||||
private:
|
||||
ARDOUR::BeatsFramesConverter _region_relative_time_converter;
|
||||
ARDOUR::BeatsFramesConverter _source_relative_time_converter;
|
||||
Evoral::Parameter _parameter;
|
||||
boost::shared_ptr<AutomationLine> _line;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -91,11 +91,16 @@ PBD::Signal1<void, MidiRegionView *> MidiRegionView::SelectionCleared;
|
|||
|
||||
#define MIDI_BP_ZERO ((Config->get_first_midi_bank_is_zero())?0:1)
|
||||
|
||||
MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv,
|
||||
boost::shared_ptr<MidiRegion> r, double spu, uint32_t basic_color)
|
||||
MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
|
||||
RouteTimeAxisView& tv,
|
||||
boost::shared_ptr<MidiRegion> r,
|
||||
double spu,
|
||||
uint32_t basic_color)
|
||||
: RegionView (parent, tv, r, spu, basic_color)
|
||||
, _current_range_min(0)
|
||||
, _current_range_max(0)
|
||||
, _region_relative_time_converter(r->session().tempo_map(), r->position())
|
||||
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
|
||||
, _active_notes(0)
|
||||
, _note_group (new ArdourCanvas::Container (group))
|
||||
, _note_diff_command (0)
|
||||
|
|
@ -128,12 +133,17 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi
|
|||
SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ());
|
||||
}
|
||||
|
||||
MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv,
|
||||
boost::shared_ptr<MidiRegion> r, double spu, uint32_t basic_color,
|
||||
MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
|
||||
RouteTimeAxisView& tv,
|
||||
boost::shared_ptr<MidiRegion> r,
|
||||
double spu,
|
||||
uint32_t basic_color,
|
||||
TimeAxisViewItem::Visibility visibility)
|
||||
: RegionView (parent, tv, r, spu, basic_color, false, visibility)
|
||||
, _current_range_min(0)
|
||||
, _current_range_max(0)
|
||||
, _region_relative_time_converter(r->session().tempo_map(), r->position())
|
||||
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
|
||||
, _active_notes(0)
|
||||
, _note_group (new ArdourCanvas::Container (parent))
|
||||
, _note_diff_command (0)
|
||||
|
|
@ -181,6 +191,8 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other)
|
|||
, RegionView (other)
|
||||
, _current_range_min(0)
|
||||
, _current_range_max(0)
|
||||
, _region_relative_time_converter(other.region_relative_time_converter())
|
||||
, _source_relative_time_converter(other.source_relative_time_converter())
|
||||
, _active_notes(0)
|
||||
, _note_group (new ArdourCanvas::Container (get_canvas_group()))
|
||||
, _note_diff_command (0)
|
||||
|
|
@ -210,6 +222,8 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr<M
|
|||
: RegionView (other, boost::shared_ptr<Region> (region))
|
||||
, _current_range_min(0)
|
||||
, _current_range_max(0)
|
||||
, _region_relative_time_converter(other.region_relative_time_converter())
|
||||
, _source_relative_time_converter(other.source_relative_time_converter())
|
||||
, _active_notes(0)
|
||||
, _note_group (new ArdourCanvas::Container (get_canvas_group()))
|
||||
, _note_diff_command (0)
|
||||
|
|
@ -1353,11 +1367,17 @@ MidiRegionView::region_resized (const PropertyChange& what_changed)
|
|||
RegionView::region_resized(what_changed);
|
||||
|
||||
if (what_changed.contains (ARDOUR::Properties::position)) {
|
||||
_region_relative_time_converter.set_origin_b(_region->position());
|
||||
set_duration(_region->length(), 0);
|
||||
if (_enable_display) {
|
||||
redisplay_model();
|
||||
}
|
||||
}
|
||||
|
||||
if (what_changed.contains (ARDOUR::Properties::start) ||
|
||||
what_changed.contains (ARDOUR::Properties::position)) {
|
||||
_source_relative_time_converter.set_origin_b (_region->position() - _region->start());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -275,6 +275,14 @@ public:
|
|||
/** Convert a timestamp in absolute frames to beats measured from source start*/
|
||||
double absolute_frames_to_source_beats(framepos_t) const;
|
||||
|
||||
ARDOUR::BeatsFramesConverter const & region_relative_time_converter () const {
|
||||
return _region_relative_time_converter;
|
||||
}
|
||||
|
||||
ARDOUR::BeatsFramesConverter const & source_relative_time_converter () const {
|
||||
return _source_relative_time_converter;
|
||||
}
|
||||
|
||||
void goto_previous_note (bool add_to_selection);
|
||||
void goto_next_note (bool add_to_selection);
|
||||
void change_note_lengths (bool, bool, Evoral::MusicalTime beats, bool start, bool end);
|
||||
|
|
@ -384,6 +392,9 @@ private:
|
|||
typedef std::vector< boost::shared_ptr<PatchChange> > PatchChanges;
|
||||
typedef std::vector< boost::shared_ptr<SysEx> > SysExes;
|
||||
|
||||
ARDOUR::BeatsFramesConverter _region_relative_time_converter;
|
||||
ARDOUR::BeatsFramesConverter _source_relative_time_converter;
|
||||
|
||||
boost::shared_ptr<ARDOUR::MidiModel> _model;
|
||||
Events _events;
|
||||
PatchChanges _patch_changes;
|
||||
|
|
@ -399,7 +410,6 @@ private:
|
|||
Evoral::MusicalTime _step_edit_cursor_position;
|
||||
NoteBase* _channel_selection_scoped_note;
|
||||
|
||||
|
||||
/** A group used to temporarily reparent _note_group to during start trims, so
|
||||
* that the notes don't move with the parent region view.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -86,8 +86,6 @@ RegionView::RegionView (ArdourCanvas::Container* parent,
|
|||
, in_destructor(false)
|
||||
, wait_for_data(false)
|
||||
, _silence_text (0)
|
||||
, _region_relative_time_converter(r->session().tempo_map(), r->position())
|
||||
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
|
||||
{
|
||||
GhostRegion::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RegionView::remove_ghost, this, _1), gui_context());
|
||||
}
|
||||
|
|
@ -96,8 +94,6 @@ RegionView::RegionView (const RegionView& other)
|
|||
: sigc::trackable(other)
|
||||
, TimeAxisViewItem (other)
|
||||
, _silence_text (0)
|
||||
, _region_relative_time_converter(other.region_relative_time_converter())
|
||||
, _source_relative_time_converter(other.source_relative_time_converter())
|
||||
{
|
||||
/* derived concrete type will call init () */
|
||||
|
||||
|
|
@ -113,8 +109,6 @@ RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other
|
|||
: sigc::trackable(other)
|
||||
, TimeAxisViewItem (other)
|
||||
, _silence_text (0)
|
||||
, _region_relative_time_converter(other_region->session().tempo_map(), other_region->position())
|
||||
, _source_relative_time_converter(other_region->session().tempo_map(), other_region->position() - other_region->start())
|
||||
{
|
||||
/* this is a pseudo-copy constructor used when dragging regions
|
||||
around on the canvas.
|
||||
|
|
@ -149,8 +143,6 @@ RegionView::RegionView (ArdourCanvas::Container* parent,
|
|||
, in_destructor(false)
|
||||
, wait_for_data(false)
|
||||
, _silence_text (0)
|
||||
, _region_relative_time_converter(r->session().tempo_map(), r->position())
|
||||
, _source_relative_time_converter(r->session().tempo_map(), r->position() - r->start())
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -417,11 +409,6 @@ RegionView::region_resized (const PropertyChange& what_changed)
|
|||
|
||||
if (what_changed.contains (ARDOUR::Properties::position)) {
|
||||
set_position (_region->position(), 0);
|
||||
_region_relative_time_converter.set_origin_b (_region->position());
|
||||
}
|
||||
|
||||
if (what_changed.contains (ARDOUR::Properties::start) || what_changed.contains (ARDOUR::Properties::position)) {
|
||||
_source_relative_time_converter.set_origin_b (_region->position() - _region->start());
|
||||
}
|
||||
|
||||
PropertyChange s_and_l;
|
||||
|
|
|
|||
|
|
@ -97,14 +97,6 @@ class RegionView : public TimeAxisViewItem
|
|||
|
||||
static PBD::Signal1<void,RegionView*> RegionViewGoingAway;
|
||||
|
||||
ARDOUR::BeatsFramesConverter const & region_relative_time_converter () const {
|
||||
return _region_relative_time_converter;
|
||||
}
|
||||
|
||||
ARDOUR::BeatsFramesConverter const & source_relative_time_converter () const {
|
||||
return _source_relative_time_converter;
|
||||
}
|
||||
|
||||
/** Called when a front trim is about to begin */
|
||||
virtual void trim_front_starting () {}
|
||||
|
||||
|
|
@ -192,9 +184,6 @@ class RegionView : public TimeAxisViewItem
|
|||
/** a text item to display strip silence statistics
|
||||
*/
|
||||
ArdourCanvas::Text* _silence_text;
|
||||
|
||||
ARDOUR::BeatsFramesConverter _region_relative_time_converter;
|
||||
ARDOUR::BeatsFramesConverter _source_relative_time_converter;
|
||||
};
|
||||
|
||||
#endif /* __gtk_ardour_region_view_h__ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue