more NSD madness curing; fix up canvas range rects and marker line height mgmt
[ardour.git] / gtk2_ardour / marker.cc
index a61f4ef0c3f15ad0f3afd2a28e1558b9ee7ea4a2..7dd45499e7fdf914c0dc61cf706ddeafbe10dd7a 100644 (file)
 #include "utils.h"
 #include "canvas_impl.h"
 #include "ardour_ui.h"
+#include "simpleline.h"
 
 #include "i18n.h"
 
 Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, const string& annotation, 
                Type type, nframes_t frame, bool handle_events)
 
-       : editor (ed), _type(type)
+       : editor (ed), _parent(&parent), _type(type)
 {
        double label_offset = 0;
        bool annotate_left = false;
@@ -267,12 +268,14 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con
        }
 
        line = 0;
-       line_points = 0;
 
 }
 
+
 Marker::~Marker ()
 {
+       drop_references ();
+
        /* destroying the parent group destroys its contents, namely any polygons etc. that we added */
        delete text;
        delete mark;
@@ -280,7 +283,22 @@ Marker::~Marker ()
 
        if (line) {
                delete line;
-               delete line_points;
+       }
+}
+
+void Marker::reparent(ArdourCanvas::Group & parent)
+{
+       group->reparent(parent);
+       _parent = &parent;
+}
+
+
+void
+Marker::set_line_vpos (double pos, double height)
+{
+       if (line) {
+               line->property_y1() = pos;
+               line->property_y2() = pos + height;
        }
 }
 
@@ -289,14 +307,14 @@ Marker::add_line (ArdourCanvas::Group* group, double initial_height)
 {
        if (!line) {
 
-               line_points = new ArdourCanvas::Points ();
-               line_points->push_back (Gnome::Art::Point (unit_position + shift, 0.0));
-               line_points->push_back (Gnome::Art::Point (unit_position + shift, initial_height));                     
-               
-               line = new ArdourCanvas::Line (*group);
-               line->property_width_pixels() = 1;
-               line->property_points() = *line_points;
-               line->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_EditCursor.get();
+               line = new ArdourCanvas::SimpleLine (*group);
+               line->property_color_rgba() = ARDOUR_UI::config()->canvasvar_EditPoint.get();
+               line->property_x1() = unit_position + shift;
+               line->property_y1() = 0.0;
+               line->property_x2() = unit_position + shift;
+               line->property_y2() = initial_height;
+
+               line->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_marker_event), mark, this));
        }
 
        show_line ();
@@ -344,9 +362,8 @@ Marker::set_position (nframes_t frame)
        unit_position = new_unit_position;
 
        if (line) {
-               (*line_points)[0].set_x (unit_position + shift);
-               (*line_points)[1].set_x (unit_position + shift);
-               line->property_points() = *line_points;
+               line->property_x1() = unit_position + shift;
+               line->property_x2() = unit_position + shift;
        }
 }
 
@@ -372,6 +389,7 @@ void
 Marker::set_color_rgba (uint32_t color)
 {
        mark->property_fill_color_rgba() = color;
+       mark->property_outline_color_rgba() = color;
 }
 
 /***********************************************************************/