gesture-action: Clean up

The GestureAction is marked as abstract, but it has a constructor. It
should be possible to create simple gesture recognizers through signal
handling alone, so we might as well have GestureAction be a concrete
class from the start.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2585
This commit is contained in:
Emmanuele Bassi 2011-06-10 14:32:00 +01:00
parent ba72235b66
commit 0058c78b79
2 changed files with 42 additions and 34 deletions

View File

@ -68,11 +68,11 @@ struct _ClutterGestureActionPrivate
guint actor_capture_id; guint actor_capture_id;
gulong stage_capture_id; gulong stage_capture_id;
gboolean in_drag;
gfloat press_x, press_y; gfloat press_x, press_y;
gfloat last_motion_x, last_motion_y; gfloat last_motion_x, last_motion_y;
gfloat release_x, release_y; gfloat release_x, release_y;
guint in_drag : 1;
}; };
enum enum
@ -87,8 +87,7 @@ enum
static guint gesture_signals[LAST_SIGNAL] = { 0, }; static guint gesture_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_ABSTRACT_TYPE (ClutterGestureAction, clutter_gesture_action, G_DEFINE_TYPE (ClutterGestureAction, clutter_gesture_action, CLUTTER_TYPE_ACTION);
CLUTTER_TYPE_ACTION);
static gboolean static gboolean
signal_accumulator (GSignalInvocationHint *ihint, signal_accumulator (GSignalInvocationHint *ihint,
@ -213,17 +212,17 @@ actor_captured_event_cb (ClutterActor *actor,
if (priv->stage == NULL) if (priv->stage == NULL)
priv->stage = clutter_actor_get_stage (actor); priv->stage = clutter_actor_get_stage (actor);
priv->stage_capture_id = g_signal_connect_after (priv->stage, priv->stage_capture_id =
"captured-event", g_signal_connect_after (priv->stage, "captured-event",
G_CALLBACK (stage_captured_event_cb), G_CALLBACK (stage_captured_event_cb),
action); action);
return FALSE; return FALSE;
} }
static void static void
clutter_gesture_action_set_actor (ClutterActorMeta *meta, clutter_gesture_action_set_actor (ClutterActorMeta *meta,
ClutterActor *actor) ClutterActor *actor)
{ {
ClutterGestureActionPrivate *priv = CLUTTER_GESTURE_ACTION (meta)->priv; ClutterGestureActionPrivate *priv = CLUTTER_GESTURE_ACTION (meta)->priv;
ClutterActorMetaClass *meta_class = ClutterActorMetaClass *meta_class =
@ -245,9 +244,12 @@ clutter_gesture_action_set_actor (ClutterActorMeta *meta,
} }
if (actor != NULL) if (actor != NULL)
priv->actor_capture_id = g_signal_connect (actor, "captured-event", {
G_CALLBACK (actor_captured_event_cb), priv->actor_capture_id =
meta); g_signal_connect (actor, "captured-event",
G_CALLBACK (actor_captured_event_cb),
meta);
}
meta_class->set_actor (meta, actor); meta_class->set_actor (meta, actor);
} }
@ -268,6 +270,8 @@ clutter_gesture_action_class_init (ClutterGestureActionClass *klass)
* *
* The ::gesture_begin signal is emitted when the #ClutterActor to which * The ::gesture_begin signal is emitted when the #ClutterActor to which
* a #ClutterGestureAction has been applied starts receiving a gesture. * a #ClutterGestureAction has been applied starts receiving a gesture.
*
* Since: 1.8
*/ */
gesture_signals[GESTURE_BEGIN] = gesture_signals[GESTURE_BEGIN] =
g_signal_new (I_("gesture-begin"), g_signal_new (I_("gesture-begin"),
@ -286,6 +290,8 @@ clutter_gesture_action_class_init (ClutterGestureActionClass *klass)
* *
* The ::gesture-progress signal is emitted for each motion event after * The ::gesture-progress signal is emitted for each motion event after
* the #ClutterGestureAction::gesture-begin signal has been emitted. * the #ClutterGestureAction::gesture-begin signal has been emitted.
*
* Since: 1.8
*/ */
gesture_signals[GESTURE_PROGRESS] = gesture_signals[GESTURE_PROGRESS] =
g_signal_new (I_("gesture-progress"), g_signal_new (I_("gesture-progress"),
@ -349,6 +355,10 @@ clutter_gesture_action_init (ClutterGestureAction *self)
{ {
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_GESTURE_ACTION, self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, CLUTTER_TYPE_GESTURE_ACTION,
ClutterGestureActionPrivate); ClutterGestureActionPrivate);
self->priv->press_x = self->priv->press_y = 0.f;
self->priv->last_motion_x = self->priv->last_motion_y = 0.f;
self->priv->release_x = self->priv->release_y = 0.f;
} }
/** /**
@ -476,7 +486,7 @@ clutter_gesture_action_get_release_coords (ClutterGestureAction *action,
*/ */
void void
clutter_gesture_action_set_required_devices (ClutterGestureAction *action, clutter_gesture_action_set_required_devices (ClutterGestureAction *action,
guint n_required_devices) guint n_required_devices)
{ {
if (n_required_devices != 1) if (n_required_devices != 1)
{ {

View File

@ -77,9 +77,9 @@ struct _ClutterGestureActionClass
ClutterActor *actor); ClutterActor *actor);
gboolean (* gesture_progress) (ClutterGestureAction *action, gboolean (* gesture_progress) (ClutterGestureAction *action,
ClutterActor *actor); ClutterActor *actor);
void (* gesture_end) (ClutterGestureAction *action, void (* gesture_end) (ClutterGestureAction *action,
ClutterActor *actor); ClutterActor *actor);
void (* gesture_cancel) (ClutterGestureAction *action, void (* gesture_cancel) (ClutterGestureAction *action,
ClutterActor *actor); ClutterActor *actor);
/*< private >*/ /*< private >*/
@ -92,28 +92,26 @@ struct _ClutterGestureActionClass
void (* _clutter_gesture_action7) (void); void (* _clutter_gesture_action7) (void);
}; };
GType clutter_gesture_action_get_type (void) G_GNUC_CONST; GType clutter_gesture_action_get_type (void) G_GNUC_CONST;
ClutterAction *clutter_gesture_action_new (void); ClutterAction * clutter_gesture_action_new (void);
void clutter_gesture_action_get_press_coords (ClutterGestureAction *action, void clutter_gesture_action_get_press_coords (ClutterGestureAction *action,
guint device, guint device,
gfloat *press_x, gfloat *press_x,
gfloat *press_y); gfloat *press_y);
void clutter_gesture_action_get_motion_coords (ClutterGestureAction *action,
guint device,
gfloat *motion_x,
gfloat *motion_y);
void clutter_gesture_action_get_release_coords (ClutterGestureAction *action,
guint device,
gfloat *release_x,
gfloat *release_y);
void clutter_gesture_action_get_motion_coords (ClutterGestureAction *action, void clutter_gesture_action_set_required_devices (ClutterGestureAction *action,
guint device, guint n_required_devices);
gfloat *motion_x, guint clutter_gesture_action_get_required_devices (ClutterGestureAction *action);
gfloat *motion_y);
void clutter_gesture_action_get_release_coords (ClutterGestureAction *action,
guint device,
gfloat *release_x,
gfloat *release_y);
void clutter_gesture_action_set_required_devices (ClutterGestureAction *action,
guint n_required_devices);
guint clutter_gesture_action_get_required_devices (ClutterGestureAction *action);
G_END_DECLS G_END_DECLS