static rut_input_event_status_t control_point_input_cb( rut_input_region_t *region, rut_input_event_t *event, void *user_data) { control_point_t *point = user_data; entity_state_t *entity_state = point->entity_state; rig_selection_tool_t *tool = entity_state->tool; c_return_val_if_fail(tool->selected_entities != NULL, RUT_INPUT_EVENT_STATUS_UNHANDLED); if (rut_input_event_get_type(event) == RUT_INPUT_EVENT_TYPE_MOTION && rut_motion_event_get_action(event) == RUT_MOTION_EVENT_ACTION_DOWN && rut_motion_event_get_button_state(event) == RUT_BUTTON_STATE_1) { // float x = rut_motion_event_get_x (event); // float y = rut_motion_event_get_y (event); grab_state_t *state = c_slice_new0(grab_state_t); state->tool = tool; state->entity_state = entity_state; state->point = point; rut_shell_grab_input(tool->shell, rut_input_event_get_camera(event), control_point_grab_cb, state); return RUT_INPUT_EVENT_STATUS_HANDLED; } return RUT_INPUT_EVENT_STATUS_UNHANDLED; }
static RutInputEventStatus control_point_input_cb (RutInputRegion *region, RutInputEvent *event, void *user_data) { ControlPoint *point = user_data; EntityState *entity_state = point->entity_state; RigSelectionTool *tool = entity_state->tool; g_return_val_if_fail (tool->selected_entities != NULL, RUT_INPUT_EVENT_STATUS_UNHANDLED); if (rut_input_event_get_type (event) == RUT_INPUT_EVENT_TYPE_MOTION && rut_motion_event_get_action (event) == RUT_MOTION_EVENT_ACTION_DOWN && rut_motion_event_get_button_state (event) == RUT_BUTTON_STATE_1) { //float x = rut_motion_event_get_x (event); //float y = rut_motion_event_get_y (event); GrabState *state = g_slice_new0 (GrabState); state->tool = tool; state->entity_state = entity_state; state->point = point; rut_shell_grab_input (tool->ctx->shell, rut_input_event_get_camera (event), control_point_grab_cb, state); return RUT_INPUT_EVENT_STATUS_HANDLED; } return RUT_INPUT_EVENT_STATUS_UNHANDLED; }
static rut_input_event_status_t control_point_grab_cb(rut_input_event_t *event, void *user_data) { grab_state_t *state = user_data; rig_selection_tool_t *tool = state->tool; // entity_state_t *entity_state = state->entity_state; // control_point_t *point = state->point; rut_input_event_status_t status = RUT_INPUT_EVENT_STATUS_UNHANDLED; rut_motion_event_action_t action; if (rut_input_event_get_type(event) == RUT_INPUT_EVENT_TYPE_KEY && rut_key_event_get_keysym(event) == RUT_KEY_Escape) { rut_shell_ungrab_input( tool->view->shell, control_point_grab_cb, state); c_slice_free(grab_state_t, state); return RUT_INPUT_EVENT_STATUS_HANDLED; } if (rut_input_event_get_type(event) != RUT_INPUT_EVENT_TYPE_MOTION) return RUT_INPUT_EVENT_STATUS_UNHANDLED; action = rut_motion_event_get_action(event); switch (action) { case RUT_MOTION_EVENT_ACTION_MOVE: case RUT_MOTION_EVENT_ACTION_UP: { // float x = rut_motion_event_get_x (event); // float y = rut_motion_event_get_y (event); if (action == RUT_MOTION_EVENT_ACTION_UP) { if ((rut_motion_event_get_button_state(event) & RUT_BUTTON_STATE_1) == 0) { status = RUT_INPUT_EVENT_STATUS_HANDLED; rut_shell_ungrab_input( tool->shell, control_point_grab_cb, state); c_slice_free(grab_state_t, state); } } else status = RUT_INPUT_EVENT_STATUS_HANDLED; } break; default: break; } return status; }
static RutInputEventStatus control_point_grab_cb (RutInputEvent *event, void *user_data) { GrabState *state = user_data; RigSelectionTool *tool = state->tool; //EntityState *entity_state = state->entity_state; //ControlPoint *point = state->point; RutInputEventStatus status = RUT_INPUT_EVENT_STATUS_UNHANDLED; RutMotionEventAction action; if (rut_input_event_get_type (event) == RUT_INPUT_EVENT_TYPE_KEY && rut_key_event_get_keysym (event) == RUT_KEY_Escape) { rut_shell_ungrab_input (tool->view->context->shell, control_point_grab_cb, state); g_slice_free (GrabState, state); return RUT_INPUT_EVENT_STATUS_HANDLED; } if (rut_input_event_get_type (event) != RUT_INPUT_EVENT_TYPE_MOTION) return RUT_INPUT_EVENT_STATUS_UNHANDLED; action = rut_motion_event_get_action (event); switch (action) { case RUT_MOTION_EVENT_ACTION_MOVE: case RUT_MOTION_EVENT_ACTION_UP: { //float x = rut_motion_event_get_x (event); //float y = rut_motion_event_get_y (event); if (action == RUT_MOTION_EVENT_ACTION_UP) { if ((rut_motion_event_get_button_state (event) & RUT_BUTTON_STATE_1) == 0) { status = RUT_INPUT_EVENT_STATUS_HANDLED; rut_shell_ungrab_input (tool->ctx->shell, control_point_grab_cb, state); g_slice_free (GrabState, state); } } else status = RUT_INPUT_EVENT_STATUS_HANDLED; } break; default: break; } return status; }