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; }