examples/actor-model: Add activate transition
Show a simple transition when the current menu item is activated.
This commit is contained in:
parent
bf0ca91662
commit
eda436f0c4
@ -114,7 +114,7 @@ example_menu_item_model_init (ExampleMenuItemModel *self)
|
|||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ MenuItem */
|
/* {{{ MenuItemView */
|
||||||
|
|
||||||
/* This is our "view" of a Menu item; it changes state depending on whether
|
/* This is our "view" of a Menu item; it changes state depending on whether
|
||||||
* the "selected" property is set. The "view" reflects the state of the
|
* the "selected" property is set. The "view" reflects the state of the
|
||||||
@ -209,17 +209,66 @@ example_menu_item_view_class_init (ExampleMenuItemViewClass *klass)
|
|||||||
g_object_class_install_properties (gobject_class, MENU_ITEM_VIEW_N_PROPS, menu_item_view_props);
|
g_object_class_install_properties (gobject_class, MENU_ITEM_VIEW_N_PROPS, menu_item_view_props);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
example_menu_item_view__transition_stopped (ClutterActor *actor,
|
||||||
|
const char *transition,
|
||||||
|
gboolean is_finished)
|
||||||
|
{
|
||||||
|
clutter_actor_set_scale (actor, 1.0, 1.0);
|
||||||
|
clutter_actor_set_opacity (actor, 255);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
example_menu_item_view_init (ExampleMenuItemView *self)
|
example_menu_item_view_init (ExampleMenuItemView *self)
|
||||||
{
|
{
|
||||||
ClutterText *text = CLUTTER_TEXT (self);
|
ClutterText *text = CLUTTER_TEXT (self);
|
||||||
ClutterActor *actor = CLUTTER_ACTOR (self);
|
ClutterActor *actor = CLUTTER_ACTOR (self);
|
||||||
|
ClutterTransition *scalex_trans, *scaley_trans, *fade_trans;
|
||||||
|
ClutterTransition *group;
|
||||||
|
|
||||||
clutter_text_set_font_name (text, "Sans Bold 24px");
|
clutter_text_set_font_name (text, "Sans Bold 24px");
|
||||||
clutter_text_set_color (text, CLUTTER_COLOR_White);
|
clutter_text_set_color (text, CLUTTER_COLOR_White);
|
||||||
|
|
||||||
clutter_actor_set_margin_left (actor, 12);
|
clutter_actor_set_margin_left (actor, 12);
|
||||||
clutter_actor_set_margin_right (actor, 12);
|
clutter_actor_set_margin_right (actor, 12);
|
||||||
|
|
||||||
|
clutter_actor_set_pivot_point (actor, 0.5, 0.5);
|
||||||
|
|
||||||
|
scalex_trans = clutter_property_transition_new ("scale-x");
|
||||||
|
clutter_transition_set_from (scalex_trans, G_TYPE_FLOAT, 1.0);
|
||||||
|
clutter_transition_set_to (scalex_trans, G_TYPE_FLOAT, 3.0);
|
||||||
|
|
||||||
|
scaley_trans = clutter_property_transition_new ("scale-y");
|
||||||
|
clutter_transition_set_from (scaley_trans, G_TYPE_FLOAT, 1.0);
|
||||||
|
clutter_transition_set_to (scaley_trans, G_TYPE_FLOAT, 3.0);
|
||||||
|
|
||||||
|
fade_trans = clutter_property_transition_new ("opacity");
|
||||||
|
clutter_transition_set_to (fade_trans, G_TYPE_UINT, 0);
|
||||||
|
|
||||||
|
group = clutter_transition_group_new ();
|
||||||
|
clutter_transition_group_add_transition (CLUTTER_TRANSITION_GROUP (group), scalex_trans);
|
||||||
|
clutter_transition_group_add_transition (CLUTTER_TRANSITION_GROUP (group), scaley_trans);
|
||||||
|
clutter_transition_group_add_transition (CLUTTER_TRANSITION_GROUP (group), fade_trans);
|
||||||
|
clutter_timeline_set_duration (CLUTTER_TIMELINE (group), 250);
|
||||||
|
clutter_timeline_set_progress_mode (CLUTTER_TIMELINE (group), CLUTTER_EASE_OUT);
|
||||||
|
|
||||||
|
clutter_actor_add_transition (actor, "activateTransition", group);
|
||||||
|
g_object_unref (group);
|
||||||
|
|
||||||
|
clutter_timeline_stop (CLUTTER_TIMELINE (group));
|
||||||
|
|
||||||
|
g_signal_connect (actor, "transition-stopped",
|
||||||
|
G_CALLBACK (example_menu_item_view__transition_stopped),
|
||||||
|
group);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
example_menu_item_view_activate (ExampleMenuItemView *self)
|
||||||
|
{
|
||||||
|
ClutterTransition *t;
|
||||||
|
|
||||||
|
t = clutter_actor_get_transition (CLUTTER_ACTOR (self), "activateTransition");
|
||||||
|
clutter_timeline_start (CLUTTER_TIMELINE (t));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* }}} */
|
||||||
@ -310,6 +359,19 @@ example_menu_select_prev (ExampleMenu *self)
|
|||||||
return example_menu_select_item (self, self->current_idx - 1);
|
return example_menu_select_item (self, self->current_idx - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
example_menu_activate_item (ExampleMenu *self)
|
||||||
|
{
|
||||||
|
ClutterActor *child;
|
||||||
|
|
||||||
|
child = clutter_actor_get_child_at_index (CLUTTER_ACTOR (self),
|
||||||
|
self->current_idx);
|
||||||
|
if (child == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
example_menu_item_view_activate ((ExampleMenuItemView *) child);
|
||||||
|
}
|
||||||
|
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ main */
|
/* {{{ main */
|
||||||
@ -338,6 +400,11 @@ on_key_press (ClutterActor *stage,
|
|||||||
item = example_menu_select_next ((ExampleMenu *) menu);
|
item = example_menu_select_next ((ExampleMenu *) menu);
|
||||||
clutter_actor_get_position (item, &p.x, &p.y);
|
clutter_actor_get_position (item, &p.x, &p.y);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CLUTTER_KEY_Return:
|
||||||
|
case CLUTTER_KEY_KP_Enter:
|
||||||
|
example_menu_activate_item ((ExampleMenu *) menu);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item != NULL)
|
if (item != NULL)
|
||||||
|
Loading…
Reference in New Issue
Block a user