Small cleanup.
[ardour.git] / gtk2_ardour / canvas-note.h
index 5529c908446fbcebb9673d5b421e8b47f295fac2..49a37c17c9a4e6cc988eb5109fe0c3534f4bf41f 100644 (file)
@@ -1,6 +1,7 @@
 /*
-    Copyright (C) 2007 Paul Davis 
+    Copyright (C) 2007 Paul Davis
     Author: Dave Robillard
+    Author: Hans Baier
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 #include <iostream>
 #include "simplerect.h"
-#include "canvas-midi-event.h"
+#include "canvas-note-event.h"
 #include "midi_util.h"
 
 namespace Gnome {
 namespace Canvas {
 
-class CanvasNote : public SimpleRect, public CanvasMidiEvent {
-public:
-       CanvasNote(MidiRegionView& region, Group& group, const ARDOUR::MidiModel::Note* note=NULL)
-               : SimpleRect(group), CanvasMidiEvent(region, this, note)
-       {
-       }
-       
-       virtual void selected(bool yn) {
-               if (!_note)
-                       return;
-               else if (yn)
-                       property_outline_color_rgba()
-                                       = ARDOUR_UI::config()->canvasvar_MidiNoteSelectedOutline.get();
-               else
-                       property_outline_color_rgba() = note_outline_color(_note->velocity());
+class CanvasNote : public SimpleRect, public CanvasNoteEvent 
+{
+ public:
+       typedef Evoral::Note<Evoral::MusicalTime> NoteType;
+
+       CanvasNote (MidiRegionView&                   region,
+                   Group&                            group,
+                   const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>(),
+                    bool with_events = true);
+
+       double x1() { return property_x1(); }
+       double y1() { return property_y1(); }
+       double x2() { return property_x2(); }
+       double y2() { return property_y2(); }
+
+       void set_outline_color(uint32_t c) { property_outline_color_rgba() = c; hide(); show(); }
+       void set_fill_color(uint32_t c)    { property_fill_color_rgba()    = c; hide(); show(); }
+
+       void show() { SimpleRect::show(); }
+       void hide() { SimpleRect::hide(); }
+
+       bool on_event(GdkEvent* ev);
+       void move_event(double dx, double dy);
+};
+
+class NoEventCanvasNote : public CanvasNote
+{
+  public:
+       NoEventCanvasNote (MidiRegionView& region,
+                           Group& group,
+                           const boost::shared_ptr<NoteType> note = boost::shared_ptr<NoteType>())
+               : CanvasNote (region, group, note, false) {}
+        
+       double point_vfunc(double, double, int, int, GnomeCanvasItem**) {
+               /* return a huge value to tell the canvas that we're never the item for an event */
+               return 9999999999999.0;
        }
-       
-       bool on_event(GdkEvent* ev) { return CanvasMidiEvent::on_event(ev); }
 };
 
 } // namespace Gnome