Move time converters only to the region views that actually need them.
authorDavid Robillard <d@drobilla.net>
Thu, 20 Nov 2014 22:36:09 +0000 (17:36 -0500)
committerDavid Robillard <d@drobilla.net>
Sat, 22 Nov 2014 05:46:15 +0000 (00:46 -0500)
A step towards sorting out time issues more solidly, the time situation of MIDI
region views and automation region views is slightly different.

gtk2_ardour/automation_region_view.cc
gtk2_ardour/automation_region_view.h
gtk2_ardour/midi_region_view.cc
gtk2_ardour/midi_region_view.h
gtk2_ardour/region_view.cc
gtk2_ardour/region_view.h

index ab13a99c16034819b243c41f62627e268ff3e4fc..f7c2b6b642081fef1207a9b257be51ae53a7c8d1 100644 (file)
 
 #include "i18n.h"
 
-AutomationRegionView::AutomationRegionView (ArdourCanvas::Container*                      parent,
-                                           AutomationTimeAxisView&                   time_axis,
-                                           boost::shared_ptr<ARDOUR::Region>         region,
-                                           const Evoral::Parameter&                  param,
-                                           boost::shared_ptr<ARDOUR::AutomationList> list,
-                                           double                                    spu,
-                                           uint32_t                                  basic_color)
+AutomationRegionView::AutomationRegionView (ArdourCanvas::Container*                  parent,
+                                            AutomationTimeAxisView&                   time_axis,
+                                            boost::shared_ptr<ARDOUR::Region>         region,
+                                            const Evoral::Parameter&                  param,
+                                            boost::shared_ptr<ARDOUR::AutomationList> list,
+                                            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;
        }
index 4e97e2f36781fc7b5bc9b200fd40cadc151cbb95..d8f0b2637ffcebcb0ffbb8daa44a12b688d37a4e 100644 (file)
@@ -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;
 };
index cfb5108a6060aba3ba5998b2b2015848637f5f3b..503f2302c317695b58d5a74454d7d72e3cdec69f 100644 (file)
@@ -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,
-                                TimeAxisViewItem::Visibility visibility)
+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
index 9885b98f3a93e6aa9aa027764c98444e639ccfe0..f6a6889017c98e26ebbb2c4ce54473be25447f5f 100644 (file)
@@ -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);
@@ -379,26 +387,28 @@ private:
 
        uint8_t  _current_range_min;
        uint8_t  _current_range_max;
-
-       typedef std::list<NoteBase*> Events;
+       
+       typedef std::list<NoteBase*>                          Events;
        typedef std::vector< boost::shared_ptr<PatchChange> > PatchChanges;
-       typedef std::vector< boost::shared_ptr<SysEx> > SysExes;
+       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;
        SysExes                              _sys_exes;
        Note**                               _active_notes;
-       ArdourCanvas::Container*                 _note_group;
+       ArdourCanvas::Container*             _note_group;
        ARDOUR::MidiModel::NoteDiffCommand*  _note_diff_command;
        Note*                                _ghost_note;
        double                               _last_ghost_x;
        double                               _last_ghost_y;
-       ArdourCanvas::Rectangle*            _step_edit_cursor;
+       ArdourCanvas::Rectangle*             _step_edit_cursor;
        Evoral::MusicalTime                  _step_edit_cursor_width;
        Evoral::MusicalTime                  _step_edit_cursor_position;
-       NoteBase*                            _channel_selection_scoped_note;
-
+       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.
index 49b47332ae1239e2e9171f434355d42d129163b6..b5620768840337e8acba3fffd17b2ec490c6e14d 100644 (file)
@@ -65,12 +65,12 @@ static const int32_t sync_mark_width = 9;
 
 PBD::Signal1<void,RegionView*> RegionView::RegionViewGoingAway;
 
-RegionView::RegionView (ArdourCanvas::Container*              parent,
+RegionView::RegionView (ArdourCanvas::Container*          parent,
                         TimeAxisView&                     tv,
                         boost::shared_ptr<ARDOUR::Region> r,
                         double                            spu,
                         uint32_t                          basic_color,
-                       bool                              automation)
+                        bool                              automation)
        : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), false, automation,
                            (automation ? TimeAxisViewItem::ShowFrame :
                             TimeAxisViewItem::Visibility (TimeAxisViewItem::ShowNameText|
@@ -85,9 +85,7 @@ RegionView::RegionView (ArdourCanvas::Container*              parent,
        , _pixel_width(1.0)
        , 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())
+       , _silence_text (0)
 {
        GhostRegion::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RegionView::remove_ghost, this, _1), gui_context());
 }
@@ -95,9 +93,7 @@ RegionView::RegionView (ArdourCanvas::Container*              parent,
 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())
+       , _silence_text (0)
 {
        /* derived concrete type will call init () */
 
@@ -112,9 +108,7 @@ RegionView::RegionView (const RegionView& other)
 RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other_region)
        : 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())
+       , _silence_text (0)
 {
        /* this is a pseudo-copy constructor used when dragging regions
           around on the canvas.
@@ -130,13 +124,13 @@ RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other
        GhostRegion::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&RegionView::remove_ghost, this, _1), gui_context());
 }
 
-RegionView::RegionView (ArdourCanvas::Container*         parent,
-                        TimeAxisView&                tv,
+RegionView::RegionView (ArdourCanvas::Container*          parent,
+                        TimeAxisView&                     tv,
                         boost::shared_ptr<ARDOUR::Region> r,
-                        double                       spu,
-                        uint32_t                     basic_color,
-                       bool                         recording,
-                        TimeAxisViewItem::Visibility visibility)
+                        double                            spu,
+                        uint32_t                          basic_color,
+                        bool                              recording,
+                        TimeAxisViewItem::Visibility      visibility)
        : TimeAxisViewItem (r->name(), *parent, tv, spu, basic_color, r->position(), r->length(), recording, false, visibility)
        , _region (r)
        , sync_mark(0)
@@ -148,9 +142,7 @@ RegionView::RegionView (ArdourCanvas::Container*         parent,
        , _pixel_width(1.0)
        , 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())
+       , _silence_text (0)
 {
 }
 
@@ -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;
index 0837c075f0e3615cd8d593c5b639d63fe3ae23df..cb6b56912fe84ad4929f4123c5839f09ea4035ab 100644 (file)
@@ -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__ */