PBD::Signal1<void,Marker*> 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)
case SessionStart:
case RangeStart:
-
+
points = new ArdourCanvas::Points ();
points->push_back (Gnome::Art::Point (0.0, 0.0));
points->push_back (Gnome::Art::Point (6.5, 6.5));
frame_position = frame;
unit_position = editor.frame_to_unit (frame);
unit_position -= _shift;
-
- group = new Group (parent, unit_position, 1.0);
+
+ group = new Group (parent, unit_position, 0);
_name_background = new ArdourCanvas::SimpleRect (*group);
_name_background->property_outline_pixels() = 1;
/* adjust to properly locate the tip */
- mark = new Polygon (*group);
+ mark = new ArdourCanvas::Polygon (*group);
mark->property_points() = *points;
set_color_rgba (rgba);
mark->property_width_pixels() = 1;
Glib::RefPtr<Pango::Layout> layout = foo.create_pango_layout (X_("Hg")); /* ascender + descender */
int width;
- layout->set_font_description (*name_font);
+ layout->set_font_description (name_font);
Gtkmm2ext::get_ink_pixel_size (layout, width, name_height);
name_pixbuf = new ArdourCanvas::Pixbuf(*group);
void Marker::reparent(ArdourCanvas::Group & parent)
{
- group->reparent(parent);
+ group->reparent (parent);
_parent = &parent;
}
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 ();
Marker::setup_name_display ()
{
double limit = DBL_MAX;
-
+
if (label_on_left ()) {
limit = _left_label_limit;
} else {
}
/* Work out how wide the name can be */
- int name_width = min ((double) pixel_width (_name, *name_font) + 2, limit);
+ int name_width = min ((double) pixel_width (_name, name_font) + 2, limit);
if (name_width == 0) {
name_width = 1;
}
_name_background->property_x1() = name_pixbuf->property_x() - _label_offset + 2;
_name_background->property_x2() = name_pixbuf->property_x() + name_width;
}
-
+
_name_background->property_y1() = 0;
_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)
{
group->move (new_unit_position - unit_position, 0.0);
frame_position = frame;
unit_position = new_unit_position;
-
- setup_line_x ();
}
void
Marker::show ()
{
_shown = true;
-
+
group->show ();
setup_line ();
}
Marker::hide ()
{
_shown = false;
-
+
group->hide ();
setup_line ();
}
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;
if (_left_label_limit < 0) {
_left_label_limit = 0;
}
-
+
if (label_on_left ()) {
setup_name_display ();
}
if (_right_label_limit < 0) {
_right_label_limit = 0;
}
-
+
if (!label_on_left ()) {
setup_name_display ();
}
/***********************************************************************/
-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());
/***********************************************************************/
-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());