Пример #1
0
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;
}
Пример #2
0
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;
}