static void clutter_drag_action_set_property (GObject *gobject, guint prop_id, const GValue *value, GParamSpec *pspec) { ClutterDragAction *action = CLUTTER_DRAG_ACTION (gobject); ClutterDragActionPrivate *priv = action->priv; switch (prop_id) { case PROP_X_DRAG_THRESHOLD: clutter_drag_action_set_drag_threshold (action, g_value_get_uint (value), priv->y_drag_threshold); break; case PROP_Y_DRAG_THRESHOLD: clutter_drag_action_set_drag_threshold (action, priv->x_drag_threshold, g_value_get_uint (value)); break; case PROP_DRAG_HANDLE: clutter_drag_action_set_drag_handle (action, g_value_get_object (value)); break; case PROP_DRAG_AXIS: clutter_drag_action_set_drag_axis (action, g_value_get_enum (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); } }
G_MODULE_EXPORT int test_drag_main (int argc, char *argv[]) { ClutterActor *stage, *handle; ClutterAction *action; GError *error; error = NULL; clutter_init_with_args (&argc, &argv, "test-drag", entries, NULL, &error); if (error != NULL) { g_print ("Unable to run test-drag: %s\n", error->message); g_error_free (error); return EXIT_FAILURE; } stage = clutter_stage_new (); clutter_stage_set_title (CLUTTER_STAGE (stage), "Drag Test"); clutter_actor_set_size (stage, 800, 600); g_signal_connect (stage, "destroy", G_CALLBACK (clutter_main_quit), NULL); handle = clutter_rectangle_new (); clutter_rectangle_set_color (CLUTTER_RECTANGLE (handle), CLUTTER_COLOR_SkyBlue); clutter_actor_set_size (handle, 128, 128); clutter_actor_set_position (handle, (800 - 128) / 2, (600 - 128) / 2); clutter_actor_set_reactive (handle, TRUE); clutter_container_add_actor (CLUTTER_CONTAINER (stage), handle); g_signal_connect (handle, "enter-event", G_CALLBACK (on_enter), NULL); g_signal_connect (handle, "leave-event", G_CALLBACK (on_leave), NULL); action = clutter_drag_action_new (); clutter_drag_action_set_drag_threshold (CLUTTER_DRAG_ACTION (action), x_drag_threshold, y_drag_threshold); clutter_drag_action_set_drag_axis (CLUTTER_DRAG_ACTION (action), get_drag_axis (drag_axis)); g_signal_connect (action, "drag-begin", G_CALLBACK (on_drag_begin), NULL); g_signal_connect (action, "drag-end", G_CALLBACK (on_drag_end), NULL); clutter_actor_add_action (handle, action); clutter_actor_add_effect_with_name (handle, "disable", clutter_desaturate_effect_new (0.0)); clutter_actor_add_effect_with_name (handle, "curl", clutter_page_turn_effect_new (0.0, 45.0, 12.0)); clutter_actor_show (stage); clutter_main (); return EXIT_SUCCESS; }
static void clutter_widget_init ( ClutterWidget *_self ) { ClutterWidgetPrivate *priv; ClutterAction *action; ClutterState *state; _self->priv = priv = CLUTTER_WIDGET_GET_PRIVATE (_self); priv->borderColor = *CLUTTER_COLOR_LightGray; clutter_actor_set_reactive ( CLUTTER_ACTOR(_self), TRUE ); // TODO: only in drag-bar { action = clutter_drag_action_new (); clutter_drag_action_set_drag_threshold (CLUTTER_DRAG_ACTION (action), 0, 0); clutter_drag_action_set_drag_axis ( CLUTTER_DRAG_ACTION (action), CLUTTER_DRAG_X_AXIS&CLUTTER_DRAG_Y_AXIS ); g_signal_connect (action, "drag-begin", G_CALLBACK (on_drag_begin), NULL); g_signal_connect (action, "drag-end", G_CALLBACK (on_drag_end), NULL); clutter_actor_add_action (CLUTTER_ACTOR(_self), action); clutter_actor_add_effect_with_name (CLUTTER_ACTOR(_self), "disable", clutter_desaturate_effect_new (0.0)); // } TODO end // init state machine state = clutter_state_new (); g_object_set_data_full ( G_OBJECT (_self), "hover-state-machine", state, g_object_unref ); g_signal_connect ( _self, "enter-event", G_CALLBACK (on_enter), state ); g_signal_connect ( _self, "leave-event", G_CALLBACK (on_leave), state ); clutter_state_set ( state, NULL, "normal", _self, "border-color", CLUTTER_LINEAR, CLUTTER_COLOR_DarkGray, NULL ); clutter_state_set ( state, NULL, "hover", _self, "border-color", CLUTTER_LINEAR, CLUTTER_COLOR_LightSkyBlue, NULL ); clutter_state_set_duration ( state, NULL, NULL, 200 ); // set init state clutter_state_set_state (state, "normal"); }