cookbook: Example using allocation-changed to sync actor size
An alternative method (not using constraints) to bind one actor's size and position to another. Used as an example in the recipe about resizing one actor in sync with a source actor.
This commit is contained in:
parent
8a149521ce
commit
c3cbf1533f
@ -10,6 +10,7 @@ noinst_PROGRAMS = \
|
||||
textures-reflection \
|
||||
textures-split-go \
|
||||
textures-sub-texture \
|
||||
layouts-bind-constraint-allocation \
|
||||
layouts-bind-constraint-overlay \
|
||||
layouts-bind-constraint-stage \
|
||||
layouts-stacking \
|
||||
@ -54,6 +55,7 @@ text_shadow_SOURCES = text-shadow.c
|
||||
textures_reflection_SOURCES = textures-reflection.c
|
||||
textures_split_go_SOURCES = textures-split-go.c
|
||||
textures_sub_texture_SOURCES = textures-sub-texture.c
|
||||
layouts_bind_constraint_allocation_SOURCES = layouts-bind-constraint-allocation.c
|
||||
layouts_bind_constraint_overlay_SOURCES = layouts-bind-constraint-overlay.c
|
||||
layouts_bind_constraint_stage_SOURCES = layouts-bind-constraint-stage.c
|
||||
layouts_stacking_SOURCES = layouts-stacking.c
|
||||
|
70
doc/cookbook/examples/layouts-bind-constraint-allocation.c
Normal file
70
doc/cookbook/examples/layouts-bind-constraint-allocation.c
Normal file
@ -0,0 +1,70 @@
|
||||
#include <stdlib.h>
|
||||
#include <clutter/clutter.h>
|
||||
|
||||
#define OVERLAY_FACTOR 1.1
|
||||
|
||||
static const ClutterColor stage_color = { 0x33, 0x33, 0x55, 0xff };
|
||||
static const ClutterColor red = { 0xff, 0x00, 0x00, 0xff };
|
||||
static const ClutterColor blue = { 0x00, 0x00, 0xff, 0x66 };
|
||||
|
||||
void
|
||||
allocation_changed_cb (ClutterActor *actor,
|
||||
const ClutterActorBox *allocation,
|
||||
ClutterAllocationFlags flags,
|
||||
gpointer user_data)
|
||||
{
|
||||
ClutterActor *overlay = CLUTTER_ACTOR (user_data);
|
||||
|
||||
gfloat width, height, x, y;
|
||||
clutter_actor_box_get_size (allocation, &width, &height);
|
||||
clutter_actor_box_get_origin (allocation, &x, &y);
|
||||
|
||||
clutter_actor_set_size (overlay,
|
||||
width * OVERLAY_FACTOR,
|
||||
height * OVERLAY_FACTOR);
|
||||
|
||||
clutter_actor_set_position (overlay,
|
||||
x - ((OVERLAY_FACTOR - 1) * width * 0.5),
|
||||
y - ((OVERLAY_FACTOR - 1) * width * 0.5));
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
ClutterActor *stage;
|
||||
ClutterActor *actor;
|
||||
ClutterActor *overlay;
|
||||
|
||||
clutter_init (&argc, &argv);
|
||||
|
||||
stage = clutter_stage_get_default ();
|
||||
clutter_actor_set_size (stage, 400, 400);
|
||||
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
|
||||
g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL);
|
||||
|
||||
actor = clutter_rectangle_new_with_color (&red);
|
||||
clutter_actor_set_size (actor, 100, 100);
|
||||
clutter_actor_set_position (actor, 150, 150);
|
||||
|
||||
overlay = clutter_rectangle_new_with_color (&blue);
|
||||
|
||||
g_signal_connect (actor,
|
||||
"allocation-changed",
|
||||
G_CALLBACK (allocation_changed_cb),
|
||||
overlay);
|
||||
|
||||
clutter_container_add (CLUTTER_CONTAINER (stage), actor, overlay, NULL);
|
||||
|
||||
clutter_actor_animate (actor, CLUTTER_LINEAR, 2000,
|
||||
"width", 300.0,
|
||||
"height", 300.0,
|
||||
"x", 50.0,
|
||||
"y", 50.0,
|
||||
NULL);
|
||||
|
||||
clutter_actor_show (stage);
|
||||
|
||||
clutter_main ();
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
Loading…
Reference in New Issue
Block a user