X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fmidi_streamview.h;h=f4328ab0934557a572d903e9a70a937685feef16;hb=b976bf8986290e8f4812a50e7fdd98b9cbeb4249;hp=87fc003283839b82136338a4cf7b9f416d16ed6c;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h index 87fc003283..f4328ab093 100644 --- a/gtk2_ardour/midi_streamview.h +++ b/gtk2_ardour/midi_streamview.h @@ -27,20 +27,22 @@ #include "streamview.h" #include "time_axis_view_item.h" #include "route_time_axis.h" -#include "canvas.h" namespace Gdk { class Color; } namespace ARDOUR { - class Route; - class Diskstream; class Crossfade; - class PeakData; + class MidiModel; class MidiRegion; + class Route; class Source; - class MidiModel; + struct PeakData; +} + +namespace ArdourCanvas { + class LineSet; } class PublicEditor; @@ -53,12 +55,11 @@ class Selection; class MidiStreamView : public StreamView { - public: +public: MidiStreamView (MidiTimeAxisView&); ~MidiStreamView (); void set_selected_regionviews (RegionSelection&); - void get_selectables (jack_nframes_t start, jack_nframes_t end, std::list&); void get_inverted_selectables (Selection&, std::list& results); enum VisibleNoteRange { @@ -67,7 +68,7 @@ class MidiStreamView : public StreamView }; Gtk::Adjustment note_range_adjustment; - ArdourCanvas::Group* midi_underlay_group; + ArdourCanvas::Container* midi_underlay_group; void set_note_range(VisibleNoteRange r); @@ -76,42 +77,44 @@ class MidiStreamView : public StreamView void update_note_range(uint8_t note_num); - void redisplay_diskstream (); + void set_layer_display (LayerDisplay); + //bool can_change_layer_display() const { return false; } // revert this change for now. Although stacked view is weirdly implemented wrt the "scroomer", it is still necessary to be able to manage layered regions. + void redisplay_track (); - inline double contents_height() const - { return (_trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); } + inline double contents_height() const { + return (child_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); + } - inline double note_to_y(uint8_t note) const - { return contents_height() - - (note + 1 - lowest_note()) * note_height() + 1; } + inline double note_to_y(uint8_t note) const { + return contents_height() - (note + 1 - lowest_note()) * note_height() + 1; + } - inline uint8_t y_to_note(double y) const - { return (uint8_t)((contents_height() - y - 1) - / contents_height() * (double)contents_note_range()) - + lowest_note(); } + uint8_t y_to_note(double y) const; - inline double note_height() const - { return contents_height() / (double)contents_note_range(); } + inline double note_height() const { + return contents_height() / (double)contents_note_range(); + } - inline uint8_t contents_note_range() const - { return highest_note() - lowest_note() + 1; } + inline uint8_t contents_note_range() const { + return highest_note() - lowest_note() + 1; + } sigc::signal NoteRangeChanged; RegionView* create_region_view (boost::shared_ptr, bool, bool); - private: - void setup_rec_box (); + bool paste (ARDOUR::framepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num); - void rec_data_range_ready ( - jack_nframes_t start, - jack_nframes_t dur, - boost::weak_ptr src); + void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views); + + void suspend_updates (); + void resume_updates (); + +protected: + void setup_rec_box (); + void update_rec_box (); - void update_rec_regions ( - boost::shared_ptr data, - jack_nframes_t start, - jack_nframes_t dur); +private: RegionView* add_region_view_internal ( boost::shared_ptr, @@ -119,17 +122,18 @@ class MidiStreamView : public StreamView bool recording = false); void display_region(MidiRegionView* region_view, bool load_model); - void display_diskstream (boost::shared_ptr ds); + void display_track (boost::shared_ptr tr); void update_contents_height (); + void draw_note_lines(); - void apply_note_range(uint8_t lowest, uint8_t highest, bool to_region_views); bool update_data_note_range(uint8_t min, uint8_t max); void update_contents_metrics(boost::shared_ptr r); void color_handler (); void note_range_adjustment_changed(); + void apply_note_range_to_regions (); bool _range_dirty; double _range_sum_cache; @@ -138,6 +142,8 @@ class MidiStreamView : public StreamView uint8_t _data_note_min; ///< in data uint8_t _data_note_max; ///< in data ArdourCanvas::LineSet* _note_lines; + /** true if updates to the note lines and regions are currently suspended */ + bool _updates_suspended; }; #endif /* __ardour_midi_streamview_h__ */