Redraw MIDI region views on zoom and track height changes.
authorDavid Robillard <d@drobilla.net>
Sat, 9 Jun 2007 06:10:30 +0000 (06:10 +0000)
committerDavid Robillard <d@drobilla.net>
Sat, 9 Jun 2007 06:10:30 +0000 (06:10 +0000)
Disable excessive/old debug prints.
Fix region view heights.

git-svn-id: svn://localhost/ardour2/trunk@1982 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/audio_region_view.cc
gtk2_ardour/audio_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
libs/ardour/midi_model.cc
libs/ardour/smf_source.cc

index bc0e3671c3a21d65f650d02c4a7649ac10f5fccc..3fb1a016e43c9fa7fb6ffa562376e9b8f62b9628 100644 (file)
@@ -400,7 +400,7 @@ AudioRegionView::region_muted ()
 void
 AudioRegionView::set_y_position_and_height (double y, double h)
 {
-       RegionView::set_y_position_and_height(y, h - 2);
+       RegionView::set_y_position_and_height(y, h - 1);
 
        _y_position = y;
        _height = h;
index e581e011460ce1cbb7aff7ec077b14d6ccd7ceae..1facc652a9212974acd8c64e3ead68366bf073d3 100644 (file)
@@ -147,7 +147,6 @@ class AudioRegionView : public RegionView
     void fade_out_active_changed ();
 
     void region_resized (ARDOUR::Change);
-    void region_moved (void *);
     void region_muted ();
     void region_scale_amplitude_changed ();
        void region_renamed ();
index 1750ece8a4ed8778ddd65e337a733b23056df07c..678f97b6c6798b252231861f49d629766b28a2e9 100644 (file)
@@ -89,14 +89,27 @@ MidiRegionView::init (Gdk::Color& basic_color, bool wfd)
 
        if (wfd) {
                midi_region()->midi_source(0)->load_model();
-
-               begin_write();
-               for (size_t i=0; i < midi_region()->midi_source(0)->model()->n_events(); ++i)
-                       add_event(midi_region()->midi_source(0)->model()->event_at(i));
-               end_write();
+               display_events();
        }
 }
 
+
+void
+MidiRegionView::display_events()
+{
+       for (std::vector<ArdourCanvas::Item*>::iterator i = _events.begin(); i != _events.end(); ++i)
+               delete *i;
+       
+       _events.clear();
+       begin_write();
+
+       for (size_t i=0; i < midi_region()->midi_source(0)->model()->n_events(); ++i)
+               add_event(midi_region()->midi_source(0)->model()->event_at(i));
+
+       end_write();
+}
+
+
 MidiRegionView::~MidiRegionView ()
 {
        in_destructor = true;
@@ -112,6 +125,47 @@ MidiRegionView::midi_region() const
        return boost::dynamic_pointer_cast<MidiRegion>(_region);
 }
 
+void
+MidiRegionView::region_resized (Change what_changed)
+{
+       RegionView::region_resized(what_changed);
+
+       if (what_changed & ARDOUR::PositionChanged) {
+       
+               display_events();
+       
+       } else if (what_changed & Change (StartChanged)) {
+
+               //cerr << "MIDI RV START CHANGED" << endl;
+
+       } else if (what_changed & Change (LengthChanged)) {
+               
+               //cerr << "MIDI RV LENGTH CHANGED" << endl;
+       
+       }
+}
+
+void
+MidiRegionView::reset_width_dependent_items (double pixel_width)
+{
+       RegionView::reset_width_dependent_items(pixel_width);
+       assert(_pixel_width == pixel_width);
+               
+       display_events();
+}
+
+void
+MidiRegionView::set_y_position_and_height (double y, double h)
+{
+       RegionView::set_y_position_and_height(y, h - 1);
+               
+       display_events();
+
+       if (name_text) {
+               name_text->raise_to_top();
+       }
+}
+
 void
 MidiRegionView::show_region_editor ()
 {
@@ -150,11 +204,11 @@ MidiRegionView::end_write()
 void
 MidiRegionView::add_event (const MidiEvent& ev)
 {
-       printf("Event, time = %f, size = %zu, data = ", ev.time, ev.size);
+       /*printf("Event, time = %f, size = %zu, data = ", ev.time, ev.size);
        for (size_t i=0; i < ev.size; ++i) {
                printf("%X ", ev.buffer[i]);
        }
-       printf("\n\n");
+       printf("\n\n");*/
 
        double y1 = trackview.height / 2.0;
        if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) {
index 597ae646bf062a62ab08f13f6ce36377cc1167ec..4a00102cecd56f49321e4e30c7b48ff4e9f0fd75 100644 (file)
@@ -57,6 +57,8 @@ class MidiRegionView : public RegionView
        virtual void init (Gdk::Color& base_color, bool wait_for_data = false);
        
        boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const;
+       
+       void set_y_position_and_height (double, double);
     
     void show_region_editor ();
 
@@ -82,13 +84,17 @@ class MidiRegionView : public RegionView
                        Gdk::Color& basic_color,
                        TimeAxisViewItem::Visibility);
     
-    void region_moved (void *);
+    void region_resized (ARDOUR::Change);
 
     void set_flags (XMLNode *);
     void store_flags ();
+    
+       void reset_width_dependent_items (double pixel_width);
 
   private:
 
+       void display_events();
+
        std::vector<ArdourCanvas::Item*> _events;
        ArdourCanvas::SimpleRect**       _active_notes;
 };
index 9ee64d27d76eaa645fcfae3b4f330e8c40a863d5..2d3346df562ecaa0f5d9278a9aa109afa49ea4c3 100644 (file)
@@ -137,7 +137,7 @@ RegionView::init (Gdk::Color& basic_color, bool wfd)
 
        reset_width_dependent_items ((double) _region->length() / samples_per_unit);
 
-       set_y_position_and_height (0, trackview.height);
+       set_y_position_and_height (0, trackview.height - 2);
 
        _region->StateChanged.connect (mem_fun(*this, &RegionView::region_changed));
 
index c444d19fdc4cc9e6e0e66902c13523be5fcaf247..6277354519338132435ebccae792814ca9c605be 100644 (file)
@@ -100,7 +100,6 @@ class RegionView : public TimeAxisViewItem
                TimeAxisViewItem::Visibility);
     
     virtual void region_resized (ARDOUR::Change);
-    void         region_moved (void *);
     virtual void region_muted ();
     void         region_locked ();
     void         region_opacity ();
index dc58afa8ea42b57d1aa643f09f5730330812b4a1..bfc1e4b30000abcf61d864bd4caa7313f05f7930 100644 (file)
@@ -75,7 +75,7 @@ MidiModel::append(double time, size_t size, Byte* in_buffer)
 {
        assert(_events.empty() || time >= _events.back().time);
 
-       cerr << "Model event: time = " << time << endl;
+       //cerr << "Model event: time = " << time << endl;
 
        Byte* my_buffer = new Byte[size];
        memcpy(my_buffer, in_buffer, size);
index d1192f518690449d745ccb42ffa5c78da61dd52e..4f3fbd1fd91d2ddd95f0cfa676bd2295e495e6d4 100644 (file)
@@ -137,7 +137,7 @@ SMFSource::init (string pathstr, bool must_exist)
 int
 SMFSource::open()
 {
-       cerr << "Opening SMF file " << path() << " writeable: " << writable() << endl;
+       //cerr << "Opening SMF file " << path() << " writeable: " << writable() << endl;
 
        assert(writable()); // FIXME;
 
@@ -149,7 +149,7 @@ SMFSource::open()
                uint32_t track_size_be = 0;
                fread(&track_size_be, 4, 1, _fd);
                _track_size = GUINT32_FROM_BE(track_size_be);
-               cerr << "SMF - read track size " << _track_size << endl;
+               //cerr << "SMF - read track size " << _track_size << endl;
 
        // We're making a new file
        } else {