Fix ExportFormatSpecification copy-c'tor
[ardour.git] / gtk2_ardour / hit.cc
index de63e187e45fca1436e8a46bba91ede6d5aabe11..41944eb3aff02f679cc66ee6272482dff822f4e0 100644 (file)
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
+#include "temporal/beats.h"
+
 #include "evoral/Note.hpp"
 
 #include "canvas/polygon.h"
 #include "canvas/debug.h"
 
-#include "midi_region_view.h"
-#include "public_editor.h"
-#include "utils.h"
 #include "hit.h"
 
 using namespace ARDOUR;
 using namespace ArdourCanvas;
 
-Hit::Hit (MidiRegionView& region, Group* group, double size, const boost::shared_ptr<NoteType> note, bool with_events) 
+Hit::Hit (MidiRegionView& region, Item* parent, double size, const boost::shared_ptr<NoteType> note, bool with_events)
        : NoteBase (region, with_events, note)
 {
-       _polygon = new ArdourCanvas::Polygon (group);
+       _polygon = new ArdourCanvas::Polygon (parent);
        CANVAS_DEBUG_NAME (_polygon, "note");
        set_item (_polygon);
        set_height (size);
 }
 
+Hit::~Hit ()
+{
+       delete _polygon;
+}
+
 void
 Hit::move_event (double dx, double dy)
 {
-       _polygon->move (Duple (dx, dy));
+       Points points = _polygon->get();
+       Points moved;
+       for (Points::iterator p = points.begin(); p != points.end(); ++p) {
+               moved.push_back ((*p).translate (ArdourCanvas::Duple (dx, dy)));
+       }
+       _polygon->set (moved);
 }
 
 void
@@ -69,8 +78,8 @@ Hit::hide ()
        _polygon->hide ();
 }
 
-void
-Hit::set_height (Distance height)
+Points
+Hit::points(Distance height)
 {
        /* draw a diamond */
 
@@ -82,7 +91,19 @@ Hit::set_height (Distance height)
        p.push_back (Duple (+half_height, 0)); // right, middle
        p.push_back (Duple (0, +half_height)); // bottom
 
-       _polygon->set (p);
+       return p;
+}
+
+void
+Hit::set_height (Distance height)
+{
+       _polygon->set (points(height));
+}
+
+Duple
+Hit::position ()
+{
+       return _polygon->position ();
 }
 
 void
@@ -95,26 +116,32 @@ Coord
 Hit::x0 () const
 {
        /* left vertex */
-       return _polygon->get()[0].x;
+       return _polygon->position().x + _polygon->get()[0].x;
 }
 
 Coord
 Hit::x1 () const
 {
        /* right vertex */
-       return _polygon->get()[2].x;
+       return _polygon->position().x + _polygon->get()[2].x;
 }
 
 Coord
 Hit::y0 () const
 {
        /* top vertex */
-       return _polygon->get()[1].y;
+       return _polygon->position().y + _polygon->get()[1].y;
 }
 
 Coord
 Hit::y1 () const
 {
        /* bottom vertex */
-       return _polygon->get()[3].y;
+       return _polygon->position().y + _polygon->get()[3].y;
+}
+
+void
+Hit::set_ignore_events (bool ignore)
+{
+       _polygon->set_ignore_events (ignore);
 }