X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmarker.cc;h=9bc475214ac24f2709942ef92a6f2f6e5135575f;hb=73a6b8ef25bb90ad6c66b25b17da5962a38291d2;hp=d5517b4bcedeed72ae4c536a8bda071f1921771a;hpb=93c7aeba048f19df5abee5e4325ef8b0ef62c279;p=ardour.git diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc index d5517b4bce..9bc475214a 100644 --- a/gtk2_ardour/marker.cc +++ b/gtk2_ardour/marker.cc @@ -15,23 +15,27 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include -#include +#include "ardour/tempo.h" #include "marker.h" #include "public_editor.h" #include "utils.h" #include "canvas_impl.h" +#include "ardour_ui.h" +#include "simpleline.h" #include "i18n.h" +using namespace std; +using namespace ARDOUR; + 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; @@ -241,19 +245,22 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con mark->property_fill_color_rgba() = rgba; mark->property_outline_color_rgba() = rgba; mark->property_width_pixels() = 1; - Pango::FontDescription font = get_font_for_style (N_("MarkerText")); - + Pango::FontDescription* font = get_font_for_style (N_("MarkerText")); + //cerr << " font->get_size() = " << font->get_size() << " is_absolute = " << pango_font_description_get_size_is_absolute(font->gobj()) << " to_string = " << font->to_string() << endl; text = new Text (*group); + text->property_font_desc() = *font; text->property_text() = annotation.c_str(); - text->property_font_desc() = font; + + delete font; + if (annotate_left) { - text->property_x() = -(text->property_text_width()); + text->property_x() = -(text->property_text_width()); } else { - text->property_x() = label_offset; + text->property_x() = label_offset; } text->property_y() = 0.0; text->property_anchor() = Gtk::ANCHOR_NW; - text->property_fill_color() = "black"; + text->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_MarkerLabel.get(); editor.ZoomChanged.connect (mem_fun (*this, &Marker::reposition)); @@ -263,14 +270,73 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con group->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_marker_event), mark, this)); } + line = 0; + } + Marker::~Marker () { + drop_references (); + /* destroying the parent group destroys its contents, namely any polygons etc. that we added */ delete text; delete mark; delete points; + + delete line; + line = 0; +} + +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; + } +} + +void +Marker::add_line (ArdourCanvas::Group* group, double y_origin, double initial_height) +{ + if (!line) { + + line = new ArdourCanvas::SimpleLine (*group); + line->property_color_rgba() = ARDOUR_UI::config()->canvasvar_EditPoint.get(); + line->property_x1() = unit_position + shift; + line->property_y1() = y_origin; + line->property_x2() = unit_position + shift; + line->property_y2() = y_origin + initial_height; + + line->signal_event().connect (bind (mem_fun (editor, &PublicEditor::canvas_marker_event), mark, this)); + } + + show_line (); +} + +void +Marker::show_line () +{ + if (line) { + line->raise_to_top(); + line->show (); + } +} + +void +Marker::hide_line () +{ + if (line) { + line->hide (); + } } ArdourCanvas::Item& @@ -296,6 +362,11 @@ Marker::set_position (nframes_t frame) group->move (new_unit_position - unit_position, 0.0); frame_position = frame; unit_position = new_unit_position; + + if (line) { + line->property_x1() = unit_position + shift; + line->property_x2() = unit_position + shift; + } } void @@ -320,6 +391,7 @@ void Marker::set_color_rgba (uint32_t color) { mark->property_fill_color_rgba() = color; + mark->property_outline_color_rgba() = color; } /***********************************************************************/