From c9028cee48f804e5d19cd36b55447cb19e0fd811 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 16 May 2012 16:12:20 +0100 Subject: [PATCH] Move scroll actor test to the examples Nothing specific to test, and the code is idiomatic enough to be used as an example. --- clutter/clutter-scroll-actor.c | 8 +++++ examples/Makefile.am | 1 + .../scroll-actor.c | 32 +++++++++++++------ tests/interactive/Makefile.am | 1 - 4 files changed, 32 insertions(+), 10 deletions(-) rename tests/interactive/test-scroll-actor.c => examples/scroll-actor.c (83%) diff --git a/clutter/clutter-scroll-actor.c b/clutter/clutter-scroll-actor.c index c1a7b2318..6e534a019 100644 --- a/clutter/clutter-scroll-actor.c +++ b/clutter/clutter-scroll-actor.c @@ -36,6 +36,14 @@ * #ClutterScrollActor does not provide pointer or keyboard event handling, * nor does it provide visible scroll handles. * + * + * + * + * FIXME: MISSING XINCLUDE CONTENT + * + * + * + * * #ClutterScrollActor is available since Clutter 1.12. */ diff --git a/examples/Makefile.am b/examples/Makefile.am index dc2d3588f..d637ebecf 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -10,6 +10,7 @@ all_examples = \ flow-layout \ layout-manager \ rounded-rectangle \ + scroll-actor \ threads if PIXBUF_TESTS diff --git a/tests/interactive/test-scroll-actor.c b/examples/scroll-actor.c similarity index 83% rename from tests/interactive/test-scroll-actor.c rename to examples/scroll-actor.c index 8f344ef17..a5ffe3c90 100644 --- a/tests/interactive/test-scroll-actor.c +++ b/examples/scroll-actor.c @@ -1,6 +1,5 @@ #include #include -#include #include static const char *menu_items_name[] = { @@ -36,6 +35,7 @@ select_item_at_index (ClutterActor *scroll, clutter_text_set_color (CLUTTER_TEXT (item), CLUTTER_COLOR_White); } + /* wrap around the index */ if (index_ < 0) index_ = clutter_actor_get_n_children (menu) - 1; else if (index_ >= clutter_actor_get_n_children (menu)) @@ -44,12 +44,21 @@ select_item_at_index (ClutterActor *scroll, item = clutter_actor_get_child_at_index (menu, index_); clutter_actor_get_position (item, &point.x, &point.y); + /* scroll to the actor's position; the menu actor is always set at (0, 0), + * so it does not contribute any further offset, and we can use the position + * of its children to ask the ScrollActor to scroll the visible region; if + * the menu actor had an offset, or was transformed, we would have needed to + * get their relative transformed position instead. + */ clutter_actor_save_easing_state (scroll); clutter_scroll_actor_scroll_to_point (CLUTTER_SCROLL_ACTOR (scroll), &point); clutter_actor_restore_easing_state (scroll); clutter_text_set_color (CLUTTER_TEXT (item), CLUTTER_COLOR_LightSkyBlue); + /* store the index of the currently selected item, so that we can + * implement select_next_item() and select_prev_item() + */ g_object_set_data (G_OBJECT (scroll), "selected-item", GINT_TO_POINTER (index_)); } @@ -92,6 +101,7 @@ create_menu_actor (ClutterActor *scroll) ClutterLayoutManager *layout_manager; guint i; + /* this is our menu; it contains items in a vertical layout */ layout_manager = clutter_box_layout_new (); clutter_box_layout_set_orientation (CLUTTER_BOX_LAYOUT (layout_manager), CLUTTER_ORIENTATION_VERTICAL); @@ -101,6 +111,7 @@ create_menu_actor (ClutterActor *scroll) clutter_actor_set_layout_manager (menu, layout_manager); clutter_actor_set_background_color (menu, CLUTTER_COLOR_Black); + /* these are the items */ for (i = 0; i < menu_items_len; i++) clutter_actor_add_child (menu, create_menu_item (menu_items_name[i])); @@ -112,18 +123,26 @@ create_scroll_actor (ClutterActor *stage) { ClutterActor *scroll; + /* our scrollable viewport */ scroll = clutter_scroll_actor_new (); clutter_actor_set_name (scroll, "scroll"); + /* give a vertical offset, and constrain the viewport so that its size + * is bound to the stage size + */ clutter_actor_set_position (scroll, 0.f, 18.f); clutter_actor_add_constraint (scroll, clutter_align_constraint_new (stage, CLUTTER_ALIGN_X_AXIS, 0.5)); clutter_actor_add_constraint (scroll, clutter_bind_constraint_new (stage, CLUTTER_BIND_HEIGHT, -36.f)); + /* we only want to scroll the contents vertically, and + * ignore any horizontal component + */ clutter_scroll_actor_set_scroll_mode (CLUTTER_SCROLL_ACTOR (scroll), CLUTTER_SCROLL_VERTICALLY); clutter_actor_add_child (scroll, create_menu_actor (scroll)); + /* select the first item */ select_item_at_index (scroll, 0); return scroll; @@ -149,20 +168,15 @@ on_key_press (ClutterActor *stage, return CLUTTER_EVENT_STOP; } -G_MODULE_EXPORT const char * -test_scroll_actor_describe (void) -{ - return "Scrolling actor example."; -} - -G_MODULE_EXPORT int -test_scroll_actor_main (int argc, char *argv[]) +int +main (int argc, char *argv[]) { ClutterActor *stage; if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS) return EXIT_FAILURE; + /* create a new stage */ stage = clutter_stage_new (); clutter_stage_set_title (CLUTTER_STAGE (stage), "Scroll Actor"); clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE); diff --git a/tests/interactive/Makefile.am b/tests/interactive/Makefile.am index c2be9f4dc..2d7d37fb7 100644 --- a/tests/interactive/Makefile.am +++ b/tests/interactive/Makefile.am @@ -49,7 +49,6 @@ UNIT_TESTS = \ test-devices.c \ test-content.c \ test-keyframe-transition.c \ - test-scroll-actor.c \ test-bind-constraint.c if X11_TESTS