-ControlPoint::ControlPoint (AutomationLine& al)
- : line (al)
-{
- model = al.the_list().end();
- view_index = 0;
- can_slide = true;
- _x = 0;
- _y = 0;
- _shape = Full;
- _size = 4.0;
- selected = false;
-
- item = new Canvas::SimpleRect (line.canvas_group());
- item->property_draw() = true;
- item->property_fill() = false;
- item->property_fill_color_rgba() = color_map[cControlPointFill];
- item->property_outline_color_rgba() = color_map[cControlPointOutline];
- item->property_outline_pixels() = 1;
- item->set_data ("control_point", this);
- item->signal_event().connect (mem_fun (this, &ControlPoint::event_handler));
-
- hide ();
- set_visible (false);
-}
-
-ControlPoint::ControlPoint (const ControlPoint& other, bool dummy_arg_to_force_special_copy_constructor)
- : line (other.line)
-{
- if (&other == this) {
- return;
- }
-
- model = other.model;
- view_index = other.view_index;
- can_slide = other.can_slide;
- _x = other._x;
- _y = other._y;
- _shape = other._shape;
- _size = other._size;
- selected = false;
-
- item = new Canvas::SimpleRect (line.canvas_group());
- item->property_fill() = false;
- item->property_outline_color_rgba() = color_map[cEnteredControlPointOutline];
- item->property_outline_pixels() = 1;
-
- /* NOTE: no event handling in copied ControlPoints */
-
- hide ();
- set_visible (false);
-}
-
-ControlPoint::~ControlPoint ()
-{
- delete item;
-}
-
-bool
-ControlPoint::event_handler (GdkEvent* event)
-{
- return PublicEditor::instance().canvas_control_point_event (event, item, this);
-}
-
-void
-ControlPoint::hide ()
-{
- item->hide();
-}
-
-void
-ControlPoint::show()
-{
- item->show();
-}
-
-void
-ControlPoint::set_visible (bool yn)
-{
- item->property_draw() = (gboolean) yn;
-}
-
-void
-ControlPoint::reset (double x, double y, AutomationList::iterator mi, uint32_t vi, ShapeType shape)
-{
- model = mi;
- view_index = vi;
- move_to (x, y, shape);
-}
-
-void
-ControlPoint::show_color (bool entered, bool hide_too)
-{
- if (entered) {
- if (selected) {
- item->property_outline_color_rgba() = color_map[cEnteredControlPointSelected];
- set_visible(true);
- } else {
- item->property_outline_color_rgba() = color_map[cEnteredControlPoint];
- if (hide_too) {
- set_visible(false);
- }
- }
-
- } else {
- if (selected) {
- item->property_outline_color_rgba() = color_map[cControlPointSelected];
- set_visible(true);
- } else {
- item->property_outline_color_rgba() = color_map[cControlPoint];
- if (hide_too) {
- set_visible(false);
- }
- }
- }
-}
-
-void
-ControlPoint::set_size (double sz)
-{
- _size = sz;
-
-#if 0
- if (_size > 6.0) {
- item->property_fill() = (gboolean) TRUE;
- } else {
- item->property_fill() = (gboolean) FALSE;
- }
-#endif
-
- move_to (_x, _y, _shape);
-}
-
-void
-ControlPoint::move_to (double x, double y, ShapeType shape)
-{
- double x1 = 0;
- double x2 = 0;
- double half_size = rint(_size/2.0);
-
- switch (shape) {
- case Full:
- x1 = x - half_size;
- x2 = x + half_size;
- break;
- case Start:
- x1 = x;
- x2 = x + half_size;
- break;
- case End:
- x1 = x - half_size;
- x2 = x;
- break;
- }
-
- item->property_x1() = x1;
- item->property_x2() = x2;
- item->property_y1() = y - half_size;
- item->property_y2() = y + half_size;
-
- _x = x;
- _y = y;
- _shape = shape;
-}
-
-/*****/
-
-AutomationLine::AutomationLine (const string & name, TimeAxisView& tv, ArdourCanvas::Group& parent, AutomationList& al)