drag-action: Disable picking during drag

While dragging we don't need to perform picking to determine the actor
underneath the pointer, for two reasons:

  • we use a capture on the stage to determine the motion delta.
  • we know the actor underneath the pointer because that's the
    actor we are dragging around.

This change should make dragging actors in complex scenes a bit faster.
This commit is contained in:
Emmanuele Bassi 2010-06-22 16:12:53 +01:00
parent d89270d7c1
commit 62c08b4a09

View File

@ -89,8 +89,9 @@ struct _ClutterDragActionPrivate
gfloat transformed_press_x; gfloat transformed_press_x;
gfloat transformed_press_y; gfloat transformed_press_y;
guint emit_delayed_press : 1; guint emit_delayed_press : 1;
guint in_drag : 1; guint in_drag : 1;
guint motion_events_enabled : 1;
}; };
enum enum
@ -127,6 +128,9 @@ emit_drag_begin (ClutterDragAction *action,
{ {
ClutterDragActionPrivate *priv = action->priv; ClutterDragActionPrivate *priv = action->priv;
priv->motion_events_enabled = clutter_get_motion_events_enabled ();
clutter_set_motion_events_enabled (FALSE);
g_signal_emit (action, drag_signals[DRAG_BEGIN], 0, g_signal_emit (action, drag_signals[DRAG_BEGIN], 0,
actor, actor,
priv->press_x, priv->press_y, priv->press_x, priv->press_y,
@ -219,6 +223,8 @@ emit_drag_end (ClutterDragAction *action,
priv->capture_id = 0; priv->capture_id = 0;
} }
clutter_set_motion_events_enabled (priv->motion_events_enabled);
priv->in_drag = FALSE; priv->in_drag = FALSE;
} }