Commit ed2fdf85 authored by Emmanuele Bassi's avatar Emmanuele Bassi

gesture: Make threshold-trigger-edge public

When the threshold-trigger-edge property was introduced in
GestureAction, it was late in the cycle and I elected to keep it
private, given the fact that nobody was subclassing GestureAction
outside of Clutter itself.

These days, people are experimenting more with the GestureAction API, so
they will need access to the various knobs that control the class
default behaviour.

https://bugzilla.gnome.org/show_bug.cgi?id=710227
parent b0227644
......@@ -1357,6 +1357,29 @@ typedef enum { /*< prefix=CLUTTER_ZOOM >*/
CLUTTER_ZOOM_BOTH
} ClutterZoomAxis;
/**
* ClutterGestureTriggerEdge:
* @CLUTTER_GESTURE_TRIGGER_EDGE_NONE: Tell #ClutterGestureAction that
* the gesture must begin immediately and there's no drag limit that
* will cause its cancellation;
* @CLUTTER_GESTURE_TRIGGER_EDGE_AFTER: Tell #ClutterGestureAction that
* it needs to wait until the drag threshold has been exceeded before
* considering that the gesture has begun;
* @CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE: Tell #ClutterGestureAction that
* the gesture must begin immediately and that it must be cancelled
* once the drag exceed the configured threshold.
*
* Enum passed to the clutter_gesture_action_set_threshold_trigger_edge()
* function.
*
* Since: 1.18
*/
typedef enum {
CLUTTER_GESTURE_TRIGGER_EDGE_NONE = 0,
CLUTTER_GESTURE_TRIGGER_EDGE_AFTER,
CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE
} ClutterGestureTriggerEdge;
G_END_DECLS
#endif /* __CLUTTER_ENUMS_H__ */
......@@ -26,34 +26,6 @@
G_BEGIN_DECLS
/*< private >
* ClutterGestureTriggerEdge:
* @CLUTTER_GESTURE_TRIGGER_EDGE_NONE: Tell #ClutterGestureAction that
* the gesture must begin immediately and there's no drag limit that
* will cause its cancellation;
* @CLUTTER_GESTURE_TRIGGER_EDGE_AFTER: Tell #ClutterGestureAction that
* it needs to wait until the drag threshold has been exceeded before
* considering that the gesture has begun;
* @CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE: Tell #ClutterGestureAction that
* the gesture must begin immediately and that it must be cancelled
* once the drag exceed the configured threshold.
*
* Enum passed to the clutter_gesture_action_set_threshold_trigger_edge()
* function.
*/
typedef enum
{
CLUTTER_GESTURE_TRIGGER_EDGE_NONE = 0,
CLUTTER_GESTURE_TRIGGER_EDGE_AFTER,
CLUTTER_GESTURE_TRIGGER_EDGE_BEFORE
} ClutterGestureTriggerEdge;
G_GNUC_INTERNAL
void clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
ClutterGestureTriggerEdge edge);
G_GNUC_INTERNAL
ClutterGestureTriggerEdge clutter_gesture_action_get_threshold_trigger_egde (ClutterGestureAction *action);
G_END_DECLS
#endif /* __CLUTTER_GESTURE_ACTION_PRIVATE_H__ */
......@@ -133,6 +133,7 @@ enum
PROP_0,
PROP_N_TOUCH_POINTS,
PROP_THRESHOLD_TRIGGER_EDGE,
PROP_LAST
};
......@@ -552,40 +553,6 @@ default_event_handler (ClutterGestureAction *action,
return TRUE;
}
/*< private >
* clutter_gesture_action_set_threshold_trigger_edge:
* @action: a #ClutterGestureAction
* @edge: the %ClutterGestureTriggerEdge
*
* Sets the edge trigger for the gesture drag threshold, if any.
*
* This function can be called by #ClutterGestureAction subclasses that needs
* to change the %CLUTTER_GESTURE_TRIGGER_EDGE_AFTER default.
*/
void
clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
ClutterGestureTriggerEdge edge)
{
if (action->priv->edge != edge)
action->priv->edge = edge;
}
/*< private >
* clutter_gesture_action_get_threshold_trigger_egde:
* @action: a #ClutterGestureAction
*
* Retrieves the edge trigger of the gesture @action, as set using
* clutter_gesture_action_set_threshold_trigger_edge().
*
* Return value: the edge trigger
*/
ClutterGestureTriggerEdge
clutter_gesture_action_get_threshold_trigger_egde (ClutterGestureAction *action)
{
return action->priv->edge;
}
static void
clutter_gesture_action_set_property (GObject *gobject,
guint prop_id,
......@@ -600,6 +567,10 @@ clutter_gesture_action_set_property (GObject *gobject,
clutter_gesture_action_set_n_touch_points (self, g_value_get_int (value));
break;
case PROP_THRESHOLD_TRIGGER_EDGE:
clutter_gesture_action_set_threshold_trigger_edge (self, g_value_get_enum (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
......@@ -620,6 +591,10 @@ clutter_gesture_action_get_property (GObject *gobject,
g_value_set_int (value, self->priv->requested_nb_points);
break;
case PROP_THRESHOLD_TRIGGER_EDGE:
g_value_set_enum (value, self->priv->edge);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
break;
......@@ -666,6 +641,24 @@ clutter_gesture_action_class_init (ClutterGestureActionClass *klass)
1, G_MAXINT, 1,
CLUTTER_PARAM_READWRITE);
/**
* ClutterGestureAction:threshold-trigger-edge:
*
* The trigger edge to be used by the action to either emit the
* #ClutterGestureAction::gesture-begin signal or to emit the
* #ClutterGestureAction::gesture-cancel signal.
*
* Since: 1.18
*/
gesture_props[PROP_THRESHOLD_TRIGGER_EDGE] =
g_param_spec_enum ("threshold-trigger-edge",
P_("Threshold Trigger Edge"),
P_("The trigger edge used by the action"),
CLUTTER_TYPE_GESTURE_TRIGGER_EDGE,
CLUTTER_GESTURE_TRIGGER_EDGE_NONE,
CLUTTER_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_properties (gobject_class,
PROP_LAST,
gesture_props);
......@@ -1161,3 +1154,49 @@ clutter_gesture_action_cancel (ClutterGestureAction *action)
cancel_gesture (action);
}
/**
* clutter_gesture_action_set_threshold_trigger_edge:
* @action: a #ClutterGestureAction
* @edge: the %ClutterGestureTriggerEdge
*
* Sets the edge trigger for the gesture drag threshold, if any.
*
* This function should only be called by sub-classes of
* #ClutterGestureAction during their construction phase.
*
* Since: 1.18
*/
void
clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
ClutterGestureTriggerEdge edge)
{
g_return_if_fail (CLUTTER_IS_GESTURE_ACTION (action));
if (action->priv->edge == edge)
return;
action->priv->edge = edge;
g_object_notify_by_pspec (G_OBJECT (action), gesture_props[PROP_THRESHOLD_TRIGGER_EDGE]);
}
/**
* clutter_gesture_action_get_threshold_trigger_egde:
* @action: a #ClutterGestureAction
*
* Retrieves the edge trigger of the gesture @action, as set using
* clutter_gesture_action_set_threshold_trigger_edge().
*
* Return value: the edge trigger
*
* Since: 1.18
*/
ClutterGestureTriggerEdge
clutter_gesture_action_get_threshold_trigger_egde (ClutterGestureAction *action)
{
g_return_val_if_fail (CLUTTER_IS_GESTURE_ACTION (action),
CLUTTER_GESTURE_TRIGGER_EDGE_NONE);
return action->priv->edge;
}
......@@ -149,6 +149,12 @@ const ClutterEvent * clutter_gesture_action_get_last_event (ClutterGestu
CLUTTER_AVAILABLE_IN_1_12
void clutter_gesture_action_cancel (ClutterGestureAction *action);
CLUTTER_AVAILABLE_IN_1_18
void clutter_gesture_action_set_threshold_trigger_edge (ClutterGestureAction *action,
ClutterGestureTriggerEdge edge);
CLUTTER_AVAILABLE_IN_1_18
ClutterGestureTriggerEdge clutter_gesture_action_get_threshold_trigger_egde (ClutterGestureAction *action);
G_END_DECLS
#endif /* __CLUTTER_GESTURE_ACTION_H__ */
......@@ -750,10 +750,13 @@ clutter_gesture_action_get_n_touch_points
clutter_gesture_action_get_press_coords
clutter_gesture_action_get_release_coords
clutter_gesture_action_get_sequence
clutter_gesture_action_get_threshold_trigger_egde
clutter_gesture_action_get_type
clutter_gesture_action_get_velocity
clutter_gesture_action_set_n_touch_points
clutter_gesture_action_set_threshold_trigger_edge
clutter_gesture_action_new
clutter_gesture_trigger_edge_get_type
clutter_get_accessibility_enabled
clutter_get_actor_by_gid
clutter_get_current_event
......
......@@ -2989,6 +2989,8 @@ clutter_gesture_action_set_n_touch_points
clutter_gesture_action_get_n_current_points
clutter_gesture_action_get_sequence
clutter_gesture_action_get_device
clutter_gesture_action_set_threshold_trigger_edge
clutter_gesture_action_get_threshold_trigger_egde
clutter_gesture_action_cancel
<SUBSECTION Standard>
CLUTTER_GESTURE_ACTION
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment