fix up dragging notes in percussive mode

git-svn-id: svn://localhost/ardour2/branches/3.0@5749 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2009-10-07 15:05:52 +00:00
parent 2d81a5636d
commit cd32030762
4 changed files with 47 additions and 48 deletions

View File

@@ -22,39 +22,7 @@ CanvasHit::on_event(GdkEvent* ev)
void
CanvasHit::move_event(double dx, double dy)
{
move (dx, dy);
#if 0
cerr << "Move event by " << dx << " " << dy << endl;
points->coords[0] += dx;
points->coords[1] += dy;
points->coords[2] += dx;
points->coords[3] += dy;
points->coords[4] += dx;
points->coords[5] += dy;
points->coords[6] += dx;
points->coords[7] += dy;
cerr << "Coords now " << endl
<< '\t' << points->coords[0] << ", " << points->coords[1] << endl
<< '\t' << points->coords[2] << ", " << points->coords[3] << endl
<< '\t' << points->coords[4] << ", " << points->coords[5] << endl
<< '\t' << points->coords[6] << ", " << points->coords[7] << endl
;
if (_text) {
_text->property_x() = _text->property_x() + dx;
_text->property_y() = _text->property_y() + dy;
}
hide ();
show ();
// request_update ();
#endif
move_by (dx, dy);
}
} // namespace Gnome

View File

@@ -24,10 +24,13 @@ using namespace Gnome::Art;
Diamond::Diamond(Group& group, double height)
: Polygon(group)
, _x (0)
, _y (0)
, _h (height)
{
points = gnome_canvas_points_new (4);
g_object_set (gobj(), "points", points, NULL);
set_height (height);
move_to (0, 0);
}
Diamond::~Diamond ()
@@ -36,24 +39,47 @@ Diamond::~Diamond ()
}
void
Diamond::set_height(double height)
Diamond::set_height (double height)
{
double x1, y1, x2, y2;
get_bounds (x1, y1, x2, y2);
_h = height;
move_to (_x, _y);
}
points->coords[0] = x1;
points->coords[1] = y1 + height*2.0;
void
Diamond::move_to (double x, double y)
{
_x = x;
_y = y;
points->coords[2] = x2 + height;
points->coords[3] = y1 + height;
points->coords[0] = _x;
points->coords[1] = _y + (_h * 2.0);
points->coords[4] = x1;
points->coords[5] = y2;
points->coords[6] = x2 -height;
points->coords[7] = y2 + height;
points->coords[2] = _x + _h;
points->coords[3] = _y + _h;
points->coords[4] = _x;
points->coords[5] = _y;
points->coords[6] = _x - _h;
points->coords[7] = _y + _h;
g_object_set (gobj(), "points", points, NULL);
}
void
Diamond::move_by (double dx, double dy)
{
points->coords[0] += dx;
points->coords[1] += dy;
points->coords[2] += dx;
points->coords[3] += dy;
points->coords[4] += dx;
points->coords[5] += dy;
points->coords[6] += dx;
points->coords[7] += dy;
g_object_set (gobj(), "points", points, NULL);
}

View File

@@ -34,9 +34,14 @@ class Diamond : public Polygon
Diamond(Group& group, double height);
~Diamond ();
void move_to (double x, double y);
void move_by (double dx, double dy);
void set_height(double height);
protected:
double _x;
double _y;
double _h;
GnomeCanvasPoints* points;
};

View File

@@ -1235,7 +1235,7 @@ MidiRegionView::update_hit (CanvasHit* ev)
const double diamond_size = midi_stream_view()->note_height() / 2.0;
const double y = midi_stream_view()->note_to_y(note->note()) + ((diamond_size-2) / 4.0);
ev->move_event (x, y);
ev->move_to (x, y);
}
/** Add a MIDI note to the view (with length).