mirror of
https://github.com/brl/mutter.git
synced 2024-12-24 12:02:04 +00:00
[test-pick] Improve to include a covering actor
Three tests are now performed on the picked squares. First there is no covering actor which is the same as the original test. Then there is a hidden covering actor which should not affect the results. Finally there is a covering actor with a clip set on it so that only actors at the borders of the stage should be pickable.
This commit is contained in:
parent
77dc4fd66b
commit
bced9c65e7
@ -21,7 +21,45 @@ struct _State
|
||||
static gboolean
|
||||
on_timeout (State *state)
|
||||
{
|
||||
int test_num = 0;
|
||||
int y, x;
|
||||
ClutterActor *over_actor = NULL;
|
||||
|
||||
for (test_num = 0; test_num < 3; test_num++)
|
||||
{
|
||||
if (test_num == 0)
|
||||
{
|
||||
if (g_test_verbose ())
|
||||
g_print ("No covering actor:\n");
|
||||
}
|
||||
if (test_num == 1)
|
||||
{
|
||||
static const ClutterColor red = { 0xff, 0x00, 0x00, 0xff };
|
||||
/* Create an actor that covers the whole stage but that
|
||||
isn't visible so it shouldn't affect the picking */
|
||||
over_actor = clutter_rectangle_new_with_color (&red);
|
||||
clutter_actor_set_size (over_actor, STAGE_WIDTH, STAGE_HEIGHT);
|
||||
clutter_container_add (CLUTTER_CONTAINER (state->stage),
|
||||
over_actor, NULL);
|
||||
clutter_actor_hide (over_actor);
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("Invisible covering actor:\n");
|
||||
}
|
||||
else if (test_num == 2)
|
||||
{
|
||||
/* Make the actor visible but set a clip so that only some
|
||||
of the actors are accessible */
|
||||
clutter_actor_show (over_actor);
|
||||
clutter_actor_set_clip (over_actor,
|
||||
state->actor_width * 2,
|
||||
state->actor_height * 2,
|
||||
state->actor_width * (ACTORS_X - 4),
|
||||
state->actor_height * (ACTORS_Y - 4));
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("Clipped covering actor:\n");
|
||||
}
|
||||
|
||||
for (y = 0; y < ACTORS_Y; y++)
|
||||
for (x = 0; x < ACTORS_X; x++)
|
||||
@ -36,26 +74,41 @@ on_timeout (State *state)
|
||||
+ state->actor_height / 2);
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("actor %u -> ", state->gids[y * ACTORS_X + x]);
|
||||
g_print ("% 3i,% 3i / % 4i -> ",
|
||||
x, y, (int) state->gids[y * ACTORS_X + x]);
|
||||
|
||||
if (actor == NULL)
|
||||
{
|
||||
if (g_test_verbose ())
|
||||
g_print ("NULL: FAIL\n");
|
||||
}
|
||||
else
|
||||
else if (actor == over_actor)
|
||||
{
|
||||
gid = clutter_actor_get_gid (actor);
|
||||
if (gid == state->gids[y * ACTORS_X + x])
|
||||
if (test_num == 2
|
||||
&& x >= 2 && x < ACTORS_X - 2
|
||||
&& y >= 2 && y < ACTORS_Y - 2)
|
||||
pass = TRUE;
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("% 8i: %s\n", gid, pass ? "pass" : "FAIL");
|
||||
g_print ("over_actor: %s\n", pass ? "pass" : "FAIL");
|
||||
}
|
||||
else
|
||||
{
|
||||
gid = clutter_actor_get_gid (actor);
|
||||
if (gid == state->gids[y * ACTORS_X + x]
|
||||
&& (test_num != 2
|
||||
|| x < 2 || x >= ACTORS_X - 2
|
||||
|| y < 2 || y >= ACTORS_Y - 2))
|
||||
pass = TRUE;
|
||||
|
||||
if (g_test_verbose ())
|
||||
g_print ("% 10i: %s\n", gid, pass ? "pass" : "FAIL");
|
||||
}
|
||||
|
||||
if (!pass)
|
||||
state->pass = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
clutter_main_quit ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user