X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fhit.cc;h=41944eb3aff02f679cc66ee6272482dff822f4e0;hb=95a61717faa4b427be0e7821ee91f7df81065815;hp=a7d1a9b47b9212d381bcc4e31819538f3a4a8a32;hpb=bca507a80811e0878f976434767bc45cd61f5ab3;p=ardour.git diff --git a/gtk2_ardour/hit.cc b/gtk2_ardour/hit.cc index a7d1a9b47b..41944eb3af 100644 --- a/gtk2_ardour/hit.cc +++ b/gtk2_ardour/hit.cc @@ -17,64 +17,41 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include "temporal/beats.h" + #include "evoral/Note.hpp" + #include "canvas/polygon.h" -#include "midi_region_view.h" -#include "public_editor.h" -#include "utils.h" +#include "canvas/debug.h" + #include "hit.h" using namespace ARDOUR; using namespace ArdourCanvas; -Hit::Hit ( - MidiRegionView& region, - Group* group, - double /*size*/, - const boost::shared_ptr note, - bool with_events) +Hit::Hit (MidiRegionView& region, Item* parent, double size, const boost::shared_ptr note, bool with_events) : NoteBase (region, with_events, note) { - _polygon = new Polygon (group); + _polygon = new ArdourCanvas::Polygon (parent); + CANVAS_DEBUG_NAME (_polygon, "note"); set_item (_polygon); + set_height (size); } -void -Hit::move_event (double dx, double dy) -{ - _polygon->move (Duple (dx, dy)); -} - -Coord -Hit::x0 () const -{ - boost::optional bbox = _polygon->bounding_box (); - assert (bbox); - return bbox.get().x0; -} - -Coord -Hit::x1 () const +Hit::~Hit () { - boost::optional bbox = _polygon->bounding_box (); - assert (bbox); - return bbox.get().x1; + delete _polygon; } -Coord -Hit::y0 () const -{ - boost::optional bbox = _polygon->bounding_box (); - assert (bbox); - return bbox.get().y0; -} - -Coord -Hit::y1 () const +void +Hit::move_event (double dx, double dy) { - boost::optional bbox = _polygon->bounding_box (); - assert (bbox); - return bbox.get().y1; + 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 @@ -101,10 +78,32 @@ Hit::hide () _polygon->hide (); } +Points +Hit::points(Distance height) +{ + /* draw a diamond */ + + Points p; + + const double half_height = height/2.0; + p.push_back (Duple (-half_height, 0)); // left, middle + p.push_back (Duple (0, -half_height)); // top + p.push_back (Duple (+half_height, 0)); // right, middle + p.push_back (Duple (0, +half_height)); // bottom + + return p; +} + void -Hit::set_height (Distance /*height*/) +Hit::set_height (Distance height) +{ + _polygon->set (points(height)); +} + +Duple +Hit::position () { - /* XXX */ + return _polygon->position (); } void @@ -112,3 +111,37 @@ Hit::set_position (Duple position) { _polygon->set_position (position); } + +Coord +Hit::x0 () const +{ + /* left vertex */ + return _polygon->position().x + _polygon->get()[0].x; +} + +Coord +Hit::x1 () const +{ + /* right vertex */ + return _polygon->position().x + _polygon->get()[2].x; +} + +Coord +Hit::y0 () const +{ + /* top vertex */ + return _polygon->position().y + _polygon->get()[1].y; +} + +Coord +Hit::y1 () const +{ + /* bottom vertex */ + return _polygon->position().y + _polygon->get()[3].y; +} + +void +Hit::set_ignore_events (bool ignore) +{ + _polygon->set_ignore_events (ignore); +}