summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ghostregion.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-02-10 18:16:25 +0000
committerDavid Robillard <d@drobilla.net>2008-02-10 18:16:25 +0000
commit1b657585572298d1a69a7b43e611f59b7e185df3 (patch)
tree5b0ca4e1f222357499f97165a13308ac070c5ddc /gtk2_ardour/ghostregion.h
parente76b028ffdf054775cb697174d00cd0222d675c6 (diff)
Committed underlay support (from Audun).
git-svn-id: svn://localhost/ardour2/branches/3.0@3037 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ghostregion.h')
-rw-r--r--gtk2_ardour/ghostregion.h102
1 files changed, 88 insertions, 14 deletions
diff --git a/gtk2_ardour/ghostregion.h b/gtk2_ardour/ghostregion.h
index 16d945f543..ba02762d0b 100644
--- a/gtk2_ardour/ghostregion.h
+++ b/gtk2_ardour/ghostregion.h
@@ -25,26 +25,100 @@
#include <libgnomecanvasmm.h>
#include <ardour/configuration.h>
#include "canvas.h"
-#include "simplerect.h"
-class AutomationTimeAxisView;
+namespace Gnome {
+ namespace Canvas {
+ class CanvasMidiEvent;
+ class CanvasNote;
+ class CanvasHit;
+ class Diamond;
+ }
+}
-struct GhostRegion : public sigc::trackable
+class MidiStreamView;
+class TimeAxisView;
+
+class GhostRegion : public sigc::trackable
{
- AutomationTimeAxisView& trackview;
- ArdourCanvas::Group* group;
- ArdourCanvas::SimpleRect* base_rect;
- std::vector<ArdourCanvas::WaveView*> waves;
+public:
+ GhostRegion(ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+ virtual ~GhostRegion();
+
+ virtual void set_samples_per_unit(double spu) = 0;
+ virtual void set_height();
+ virtual void set_colors();
+
+ void set_duration(double units);
+
+ guint source_track_color(unsigned char alpha = 0xff);
+ bool is_automation_ghost();
+
+ sigc::signal<void,GhostRegion*> GoingAway;
+
+ TimeAxisView& trackview;
+ TimeAxisView& source_trackview;
+ ArdourCanvas::Group* group;
+ ArdourCanvas::SimpleRect* base_rect;
+};
+
+class AudioGhostRegion : public GhostRegion {
+public:
+ AudioGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+
+ void set_samples_per_unit(double spu);
+ void set_height();
+ void set_colors();
+
+ std::vector<ArdourCanvas::WaveView*> waves;
+};
+
+class MidiGhostRegion : public GhostRegion {
+public:
+ class Event : public sigc::trackable {
+ public:
+ Event(ArdourCanvas::CanvasMidiEvent*);
+ virtual ~Event() {}
+
+ virtual void x_changed() = 0;
+ ArdourCanvas::CanvasMidiEvent* event;
+ };
+
+ class Note : public Event {
+ public:
+ Note(ArdourCanvas::CanvasNote*, ArdourCanvas::Group*);
+ ~Note();
+
+ void x_changed();
+ ArdourCanvas::SimpleRect* rect;
+ };
+
+ class Hit : public Event {
+ public:
+ Hit(ArdourCanvas::CanvasHit*, ArdourCanvas::Group*);
+ ~Hit();
+
+ void x_changed();
+ ArdourCanvas::Diamond* diamond;
+ };
+
+ MidiGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+ MidiGhostRegion(MidiStreamView& msv, TimeAxisView& source_tv, double initial_unit_pos);
+
+ MidiStreamView* midi_view();
+
+ void set_height();
+ void set_samples_per_unit(double spu);
+ void set_colors();
+
+ void update_range();
- GhostRegion (AutomationTimeAxisView& tv, double initial_unit_pos);
- ~GhostRegion ();
+ void add_note(ArdourCanvas::CanvasNote*);
+ void add_hit(ArdourCanvas::CanvasHit*);
- void set_samples_per_unit (double spu);
- void set_duration (double units);
- void set_height ();
- void set_colors ();
+ void clear_events();
- sigc::signal<void,GhostRegion*> GoingAway;
+ typedef std::list<MidiGhostRegion::Event*> EventList;
+ EventList events;
};
#endif /* __ardour_gtk_ghost_region_h__ */