示例#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
文件: rut-button.c 项目: cee1/rig
static RutInputEventStatus
_rut_button_grab_input_cb (RutInputEvent *event,
                           void *user_data)
{
  ButtonGrabState *state = user_data;
  RutButton *button = state->button;

  if(rut_input_event_get_type (event) == RUT_INPUT_EVENT_TYPE_MOTION)
    {
      RutShell *shell = button->ctx->shell;
      if (rut_motion_event_get_action (event) == RUT_MOTION_EVENT_ACTION_UP)
        {
          rut_shell_ungrab_input (shell, _rut_button_grab_input_cb, user_data);

          rut_closure_list_invoke (&button->on_click_cb_list,
                                   RutButtonClickCallback,
                                   button);

          g_slice_free (ButtonGrabState, state);

          button->state = BUTTON_STATE_NORMAL;
          rut_shell_queue_redraw (button->ctx->shell);

          return RUT_INPUT_EVENT_STATUS_HANDLED;
        }
      else if (rut_motion_event_get_action (event) ==
               RUT_MOTION_EVENT_ACTION_MOVE)
        {
          float x = rut_motion_event_get_x (event);
          float y = rut_motion_event_get_y (event);
          RutCamera *camera = state->camera;

          rut_camera_unproject_coord (camera,
                                      &state->transform,
                                      &state->inverse_transform,
                                      0,
                                      &x,
                                      &y);

          if (x < 0 || x > button->width ||
              y < 0 || y > button->height)
            button->state = BUTTON_STATE_ACTIVE_CANCEL;
          else
            button->state = BUTTON_STATE_ACTIVE;

          rut_shell_queue_redraw (button->ctx->shell);

          return RUT_INPUT_EVENT_STATUS_HANDLED;
        }
    }

  return RUT_INPUT_EVENT_STATUS_UNHANDLED;
}
示例#3
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;
}