GObject canvas changes
[ardour.git] / gtk2_ardour / automation_line.h
index fb31befbee907677c24c479f0e0f25cb9d641f5b..0567abba0541b2ed25dc6863e3e81eceb6a529e8 100644 (file)
 #include <sys/types.h>
 
 #include <gtkmm.h>
-#include <libgnomecanvasmm/libgnomecanvasmm.h>
+#include <libgnomecanvasmm/line.h>
 #include <sigc++/signal.h>
-
+#include "canvas.h"
+#include "simplerect.h"
 #include <pbd/undo.h>
 
 #include <ardour/automation_event.h>
@@ -46,12 +47,18 @@ class AutomationTimeAxisView;
 class Selectable;
 class Selection;
 
+namespace Gnome {
+       namespace Canvas {
+               class SimpleRect;
+       }
+}
+
 class ControlPoint 
 {
   public:
-        ControlPoint (AutomationLine& al, gint (*event_handler)(Gnome::Canvas::Item*, GdkEvent*, gpointer));
+        ControlPoint (AutomationLine& al);
        ControlPoint (const ControlPoint&, bool dummy_arg_to_force_special_copy_constructor);
-       ~ControlPoint ();
+       virtual ~ControlPoint ();
 
        enum ShapeType {
                Full,
@@ -71,13 +78,16 @@ class ControlPoint
        void set_size (double);
        void set_visible (bool);
 
-       Gnome::Canvas::Item* item;
+       ArdourCanvas::SimpleRect* item;
        AutomationLine& line;
        uint32_t view_index;
        ARDOUR::AutomationList::iterator model;
        bool can_slide;
        bool selected;
        
+  protected:
+       virtual bool event_handler (GdkEvent*);
+
   private:
        double _x;
        double _y;
@@ -88,10 +98,7 @@ class ControlPoint
 class AutomationLine : public sigc::trackable
 {
   public:
-        AutomationLine (string name, TimeAxisView&, Gnome::Canvas::Item&, ARDOUR::AutomationList&,
-                       gint (*point_event_handler)(Gnome::Canvas::Item*, GdkEvent*, gpointer),
-                       gint (*line_event_handler)(Gnome::Canvas::Item*, GdkEvent*, gpointer));
-
+        AutomationLine (string name, TimeAxisView&, ArdourCanvas::Group&, ARDOUR::AutomationList&);
        virtual ~AutomationLine ();
 
        void queue_reset ();
@@ -131,18 +138,15 @@ class AutomationLine : public sigc::trackable
 
        TimeAxisView& trackview;
 
-       Gnome::Canvas::Group* canvas_group() const { return group; }
-       Gnome::Canvas::Item*  parent_group() const { return _parent_group; }
-       Gnome::Canvas::Item*  grab_item() const { return line; }
+       ArdourCanvas::Group& canvas_group() const { return *group; }
+       ArdourCanvas::Item&  parent_group() const { return _parent_group; }
+       ArdourCanvas::Item&  grab_item() const { return *line; }
 
        void show_selection();
        void hide_selection ();
 
        void set_point_size (double size);
 
-       static void invalidate_point (Gnome::Canvas::Points*, uint32_t index);
-       static bool invalid_point (Gnome::Canvas::Points*, uint32_t index);
-       
        virtual string  get_verbose_cursor_string (float);
        virtual void view_to_model_y (double&) = 0;
        virtual void model_to_view_y (double&) = 0;
@@ -168,15 +172,24 @@ class AutomationLine : public sigc::trackable
        bool    no_draw : 1;
        bool    points_visible : 1;
        
-       Gnome::Canvas::Item*  _parent_group;
-       Gnome::Canvas::Group*   group;
-       Gnome::Canvas::Line*   line; /* line */
-       Gnome::Canvas::Points* point_coords; /* coordinates for canvas line */
-       vector<ControlPoint*> control_points; /* visible control points */
+       ArdourCanvas::Group&  _parent_group;
+       ArdourCanvas::Group*   group;
+       ArdourCanvas::Line*   line; /* line */
+       ArdourCanvas::Points  line_points; /* coordinates for canvas line */
+       vector<ControlPoint*>  control_points; /* visible control points */
+
+       struct ALPoint {
+           double x;
+           double y;
+           ALPoint (double xx, double yy) : x(xx), y(yy) {}
+       };
 
-       gint   (*point_callback)(Gnome::Canvas::Item*, GdkEvent*, gpointer);
+       typedef std::vector<ALPoint> ALPoints;
 
-       void determine_visible_control_points (Gnome::Canvas::Points*);
+       static void invalidate_point (ALPoints&, uint32_t index);
+       static bool invalid_point (ALPoints&, uint32_t index);
+       
+       void determine_visible_control_points (ALPoints&);
        void sync_model_from (ControlPoint&);
        void sync_model_with_view_point (ControlPoint&);
        void sync_model_with_view_line (uint32_t, uint32_t);
@@ -190,6 +203,7 @@ class AutomationLine : public sigc::trackable
 
        UndoAction get_memento();
 
+       virtual bool event_handler (GdkEvent*);
        
   private:
        uint32_t drags;