mirror of
https://github.com/brl/mutter.git
synced 2024-11-30 03:50:47 -05:00
state: added a "target-state" property
When set the ClutterState transitions to the new state.
This commit is contained in:
parent
9c4467707f
commit
d156550633
@ -111,6 +111,12 @@ typedef struct _ClutterStateKey
|
|||||||
gint ref_count; /* reference count for boxed life time */
|
gint ref_count; /* reference count for boxed life time */
|
||||||
} _ClutterStateKey;
|
} _ClutterStateKey;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
PROP_0,
|
||||||
|
PROP_TARGET_STATE
|
||||||
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
COMPLETED,
|
COMPLETED,
|
||||||
@ -443,7 +449,7 @@ clutter_state_change (ClutterState *this,
|
|||||||
g_return_val_if_fail (target_state_name != NULL, NULL);
|
g_return_val_if_fail (target_state_name != NULL, NULL);
|
||||||
|
|
||||||
if (target_state_name == NULL)
|
if (target_state_name == NULL)
|
||||||
target_state_name = "default";
|
target_state_name = g_intern_static_string ("default");
|
||||||
|
|
||||||
target_state_name = g_intern_string (target_state_name);
|
target_state_name = g_intern_string (target_state_name);
|
||||||
if (priv->target_state_name == NULL)
|
if (priv->target_state_name == NULL)
|
||||||
@ -464,6 +470,8 @@ clutter_state_change (ClutterState *this,
|
|||||||
priv->source_state_name = priv->target_state_name;
|
priv->source_state_name = priv->target_state_name;
|
||||||
priv->target_state_name = target_state_name;
|
priv->target_state_name = target_state_name;
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (this), "target-state");
|
||||||
|
|
||||||
if (animate)
|
if (animate)
|
||||||
{
|
{
|
||||||
guint duration;
|
guint duration;
|
||||||
@ -562,11 +570,11 @@ clutter_state_change (ClutterState *this,
|
|||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
clutter_state_set (ClutterState *state,
|
clutter_state_set (ClutterState *state,
|
||||||
const gchar *source_state_name,
|
const gchar *source_state_name,
|
||||||
const gchar *target_state_name,
|
const gchar *target_state_name,
|
||||||
gpointer first_object,
|
gpointer first_object,
|
||||||
const gchar *first_property_name,
|
const gchar *first_property_name,
|
||||||
gulong first_mode,
|
gulong first_mode,
|
||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
GObjectClass *klass;
|
GObjectClass *klass;
|
||||||
@ -855,10 +863,12 @@ clutter_state_get_keys (ClutterState *state,
|
|||||||
{
|
{
|
||||||
ClutterStateKey *key = k->data;
|
ClutterStateKey *key = k->data;
|
||||||
|
|
||||||
if ((object == NULL || (object == key->object)) &&
|
if ( (object == NULL || (object == key->object))
|
||||||
(source_state_name == NULL || source_state == key->source_state) &&
|
&& (source_state_name == NULL
|
||||||
(property_name == NULL ||
|
||source_state == key->source_state)
|
||||||
((property_name == key->property_name))))
|
&& (property_name == NULL
|
||||||
|
||(property_name == key->property_name))
|
||||||
|
)
|
||||||
{
|
{
|
||||||
targets = g_list_prepend (targets, key);
|
targets = g_list_prepend (targets, key);
|
||||||
}
|
}
|
||||||
@ -923,14 +933,54 @@ clutter_state_get_timeline (ClutterState *state)
|
|||||||
return state->priv->timeline;
|
return state->priv->timeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_state_set_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
const GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
ClutterState *state = CLUTTER_STATE (object);
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_TARGET_STATE:
|
||||||
|
clutter_state_change (state, g_value_get_string (value), TRUE);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
clutter_state_get_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
ClutterState *state = CLUTTER_STATE (object);
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_TARGET_STATE:
|
||||||
|
g_value_set_string (value,
|
||||||
|
clutter_state_get_target_state (state));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
clutter_state_class_init (ClutterStateClass *klass)
|
clutter_state_class_init (ClutterStateClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (klass, sizeof (ClutterStatePrivate));
|
g_type_class_add_private (klass, sizeof (ClutterStatePrivate));
|
||||||
|
|
||||||
gobject_class->finalize = clutter_state_finalize;
|
gobject_class->finalize = clutter_state_finalize;
|
||||||
|
gobject_class->set_property = clutter_state_set_property;
|
||||||
|
gobject_class->get_property = clutter_state_get_property;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterState::completed:
|
* ClutterState::completed:
|
||||||
@ -949,6 +999,21 @@ clutter_state_class_init (ClutterStateClass *klass)
|
|||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
clutter_marshal_VOID__VOID,
|
clutter_marshal_VOID__VOID,
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClutterState:target-state:
|
||||||
|
*
|
||||||
|
* The currently set target state, setting it causes the
|
||||||
|
* state machine to transition to the new state, use
|
||||||
|
* clutter_state_change() directly to directly jump to
|
||||||
|
* a state.
|
||||||
|
*/
|
||||||
|
pspec = g_param_spec_string ("target-state",
|
||||||
|
"Target State",
|
||||||
|
"Currently set state",
|
||||||
|
"default",
|
||||||
|
CLUTTER_PARAM_READWRITE);
|
||||||
|
g_object_class_install_property (gobject_class, PROP_TARGET_STATE, pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Loading…
Reference in New Issue
Block a user