diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc index 6f0898d5dc..f1797c39c9 100644 --- a/gtk2_ardour/marker.cc +++ b/gtk2_ardour/marker.cc @@ -45,12 +45,11 @@ using namespace Gtkmm2ext; PBD::Signal1 Marker::CatchDeletion; -Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, ArdourCanvas::Group& line_parent, guint32 rgba, const string& annotation, +Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, const string& annotation, Type type, framepos_t frame, bool handle_events) : editor (ed) , _parent (&parent) - , _line_parent (&line_parent) , _line (0) , _type (type) , _selected (false) @@ -288,7 +287,7 @@ Marker::~Marker () void Marker::reparent(ArdourCanvas::Group & parent) { - group->reparent(parent); + group->reparent (parent); _parent = &parent; } @@ -313,24 +312,22 @@ Marker::setup_line () if (_line == 0) { - _line = new ArdourCanvas::SimpleLine (*_line_parent); + _line = new ArdourCanvas::SimpleLine (*group); _line->property_color_rgba() = ARDOUR_UI::config()->canvasvar_EditPoint.get(); - setup_line_x (); - _line->signal_event().connect (sigc::bind (sigc::mem_fun (editor, &PublicEditor::canvas_marker_event), mark, this)); } + /* work out where to start the line from so that it extends from the top of the canvas */ double yo = 0; - if (!_selected) { - /* work out where to start the line from so that it extends only as far as the mark */ - double x = 0; - _parent->i2w (x, yo); - _line_parent->w2i (x, yo); - } + double xo = 0; - _line->property_y1() = yo + 10; - _line->property_y2() = yo + 10 + _canvas_height; + _line->i2w (xo, yo); + + _line->property_x1() = _shift; + _line->property_x2() = _shift; + _line->property_y1() = -yo; // zero in world coordinates, negative in item/parent coordinate space + _line->property_y2() = -yo + _canvas_height; _line->property_color_rgba() = _selected ? ARDOUR_UI::config()->canvasvar_EditPoint.get() : _color; _line->raise_to_top (); @@ -406,15 +403,6 @@ Marker::setup_name_display () _name_background->property_y2() = 13; } -void -Marker::setup_line_x () -{ - if (_line) { - _line->property_x1() = unit_position + _shift - 0.5; - _line->property_x2() = unit_position + _shift - 0.5; - } -} - void Marker::set_position (framepos_t frame) { @@ -423,8 +411,6 @@ Marker::set_position (framepos_t frame) group->move (new_unit_position - unit_position, 0.0); frame_position = frame; unit_position = new_unit_position; - - setup_line_x (); } void @@ -460,12 +446,6 @@ Marker::set_color_rgba (uint32_t c) if (_line && !_selected) { _line->property_color_rgba() = _color; - - /* For reasons unknown this is necessary to ensure that the line colour - gets updated. - */ - _line->hide (); - _line->show (); } _name_background->property_fill() = true; @@ -505,9 +485,9 @@ Marker::set_right_label_limit (double p) /***********************************************************************/ -TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Group& parent, ArdourCanvas::Group& line_parent, guint32 rgba, const string& text, +TempoMarker::TempoMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const string& text, ARDOUR::TempoSection& temp) - : Marker (editor, parent, line_parent, rgba, text, Tempo, 0, false), + : Marker (editor, parent, rgba, text, Tempo, 0, false), _tempo (temp) { set_position (_tempo.frame()); @@ -520,9 +500,9 @@ TempoMarker::~TempoMarker () /***********************************************************************/ -MeterMarker::MeterMarker (PublicEditor& editor, ArdourCanvas::Group& parent, ArdourCanvas::Group& line_parent, guint32 rgba, const string& text, +MeterMarker::MeterMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const string& text, ARDOUR::MeterSection& m) - : Marker (editor, parent, line_parent, rgba, text, Meter, 0, false), + : Marker (editor, parent, rgba, text, Meter, 0, false), _meter (m) { set_position (_meter.frame()); diff --git a/gtk2_ardour/marker.h b/gtk2_ardour/marker.h index fbc7e18a50..ea01856565 100644 --- a/gtk2_ardour/marker.h +++ b/gtk2_ardour/marker.h @@ -56,7 +56,7 @@ class Marker : public sigc::trackable }; - Marker (PublicEditor& editor, ArdourCanvas::Group &, ArdourCanvas::Group &, guint32 rgba, const std::string& text, Type, + Marker (PublicEditor& editor, ArdourCanvas::Group &, guint32 rgba, const std::string& text, Type, framepos_t frame = 0, bool handle_events = true); virtual ~Marker (); @@ -99,7 +99,6 @@ class Marker : public sigc::trackable Pango::FontDescription* name_font; ArdourCanvas::Group* _parent; - ArdourCanvas::Group* _line_parent; ArdourCanvas::Group *group; ArdourCanvas::Polygon *mark; ArdourCanvas::Pixbuf *name_pixbuf; @@ -131,7 +130,7 @@ class Marker : public sigc::trackable class TempoMarker : public Marker { public: - TempoMarker (PublicEditor& editor, ArdourCanvas::Group &, ArdourCanvas::Group &, guint32 rgba, const std::string& text, ARDOUR::TempoSection&); + TempoMarker (PublicEditor& editor, ArdourCanvas::Group &, guint32 rgba, const std::string& text, ARDOUR::TempoSection&); ~TempoMarker (); ARDOUR::TempoSection& tempo() const { return _tempo; } @@ -143,7 +142,7 @@ class TempoMarker : public Marker class MeterMarker : public Marker { public: - MeterMarker (PublicEditor& editor, ArdourCanvas::Group &, ArdourCanvas::Group &, guint32 rgba, const std::string& text, ARDOUR::MeterSection&); + MeterMarker (PublicEditor& editor, ArdourCanvas::Group &, guint32 rgba, const std::string& text, ARDOUR::MeterSection&); ~MeterMarker (); ARDOUR::MeterSection& meter() const { return _meter; }