X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fghostregion.h;h=5c57289151b0ffdd8f4336d21535f250913fc3b1;hb=b68b4d10a2f5a9d630b6ad22674f5fdf39a67aae;hp=85b6d96ed143ba2b9260c691fb2103f1f5c04cdb;hpb=23e7cf10191270d70357ccf0ed9294f020c7b7ab;p=ardour.git diff --git a/gtk2_ardour/ghostregion.h b/gtk2_ardour/ghostregion.h index 85b6d96ed1..5c57289151 100644 --- a/gtk2_ardour/ghostregion.h +++ b/gtk2_ardour/ghostregion.h @@ -21,9 +21,10 @@ #define __ardour_gtk_ghost_region_h__ #include +#include #include "pbd/signals.h" -namespace ArdourCanvas { +namespace ArdourWaveView { class WaveView; } @@ -32,11 +33,18 @@ class Note; class Hit; class MidiStreamView; class TimeAxisView; +class RegionView; +class MidiRegionView; class GhostRegion : public sigc::trackable { public: - GhostRegion(ArdourCanvas::Container* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos); + GhostRegion(RegionView& rv, + ArdourCanvas::Container* parent, + TimeAxisView& tv, + TimeAxisView& source_tv, + double initial_unit_pos); + virtual ~GhostRegion(); virtual void set_samples_per_pixel (double) = 0; @@ -48,40 +56,52 @@ public: guint source_track_color(unsigned char alpha = 0xff); bool is_automation_ghost(); + RegionView& parent_rv; /** TimeAxisView that is the AutomationTimeAxisView that we are on */ TimeAxisView& trackview; /** TimeAxisView that we are a ghost for */ TimeAxisView& source_trackview; ArdourCanvas::Container* group; ArdourCanvas::Rectangle* base_rect; - - static PBD::Signal1 CatchDeletion; }; class AudioGhostRegion : public GhostRegion { public: - AudioGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos); + AudioGhostRegion(RegionView& rv, + TimeAxisView& tv, + TimeAxisView& source_tv, + double initial_unit_pos); void set_samples_per_pixel (double); void set_height(); void set_colors(); - std::vector waves; + std::vector waves; }; class MidiGhostRegion : public GhostRegion { public: - class GhostEvent : public sigc::trackable { - public: - GhostEvent(::NoteBase *, ArdourCanvas::Container *); - virtual ~GhostEvent (); - - NoteBase* event; - ArdourCanvas::Rectangle* rect; + class GhostEvent : public sigc::trackable + { + public: + GhostEvent(::NoteBase *, ArdourCanvas::Container *); + virtual ~GhostEvent (); + + NoteBase* event; + ArdourCanvas::Item* item; + bool is_hit; }; - MidiGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos); - MidiGhostRegion(MidiStreamView& msv, TimeAxisView& source_tv, double initial_unit_pos); + MidiGhostRegion(MidiRegionView& rv, + TimeAxisView& tv, + TimeAxisView& source_tv, + double initial_unit_pos); + + MidiGhostRegion(MidiRegionView& rv, + MidiStreamView& msv, + TimeAxisView& source_tv, + double initial_unit_pos); + ~MidiGhostRegion(); MidiStreamView* midi_view(); @@ -90,19 +110,27 @@ public: void set_samples_per_pixel (double spu); void set_colors(); - void update_range(); + void update_contents_height(); void add_note(NoteBase*); - void update_note (NoteBase*); + void update_note (GhostEvent* note); + void update_hit (GhostEvent* hit); void remove_note (NoteBase*); + void redisplay_model(); void clear_events(); private: + ArdourCanvas::Container* _note_group; + Gtkmm2ext::Color _outline; + ArdourCanvas::Rectangle* _tmp_rect; + ArdourCanvas::Polygon* _tmp_poly; - MidiGhostRegion::GhostEvent* find_event (NoteBase*); + MidiRegionView& parent_mrv; + typedef Evoral::Note NoteType; + MidiGhostRegion::GhostEvent* find_event (boost::shared_ptr); - typedef std::list EventList; + typedef boost::unordered_map, MidiGhostRegion::GhostEvent* > EventList; EventList events; EventList::iterator _optimization_iterator; };