-gint
-CrossfadeEditor::_point_event (GnomeCanvasItem* item, GdkEvent* event, gpointer data)
-{
- CrossfadeEditor* ed = static_cast<CrossfadeEditor*> (data);
- return ed->point_event (item, event);
-}
-
-gint
-CrossfadeEditor::point_event (GnomeCanvasItem* item, GdkEvent* event)
-{
- Point* point = static_cast<Point*> (gtk_object_get_data (GTK_OBJECT (item), "point"));
-
- if (point->curve != fade[current].line) {
- return FALSE;
- }
-
- switch (event->type) {
- case GDK_BUTTON_PRESS:
- point_grabbed = true;
- break;
- case GDK_BUTTON_RELEASE:
- point_grabbed = false;
-
- if (Keyboard::is_delete_event (&event->button)) {
- fade[current].points.remove (point);
- delete point;
- }
-
- redraw ();
- break;
-
- case GDK_MOTION_NOTIFY:
- if (point_grabbed) {
- double new_x, new_y;
-
- /* can't drag first or last points horizontally */
-
- if (point == fade[current].points.front() || point == fade[current].points.back()) {
- new_x = point->x;
- } else {
- new_x = (event->motion.x - canvas_border)/effective_width();
- }
-
- new_y = 1.0 - ((event->motion.y - canvas_border)/effective_height());
- point->move_to (x_coordinate (new_x), y_coordinate (new_y),
- new_x, new_y);
- redraw ();
- }
- break;
- default:
- break;
- }
- return TRUE;
-}
-
-gint
-CrossfadeEditor::_curve_event (GnomeCanvasItem* item, GdkEvent* event, gpointer data)
-{
- CrossfadeEditor* ed = static_cast<CrossfadeEditor*> (data);
- return ed->curve_event (item, event);
-}
-
-gint
-CrossfadeEditor::curve_event (GnomeCanvasItem* item, GdkEvent* event)
-{
- /* treat it like a toplevel event */
-
- return canvas_event (item, event);
-}