示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
文件: rut-button.c 项目: cee1/rig
static RutInputEventStatus
_rut_button_input_cb (RutInputRegion *region,
                      RutInputEvent *event,
                      void *user_data)
{
  RutButton *button = user_data;

  if(rut_input_event_get_type (event) == RUT_INPUT_EVENT_TYPE_MOTION &&
     rut_motion_event_get_action (event) == RUT_MOTION_EVENT_ACTION_DOWN)
    {
      RutShell *shell = button->ctx->shell;
      ButtonGrabState *state = g_slice_new (ButtonGrabState);
      const CoglMatrix *view;

      state->button = button;
      state->camera = rut_input_event_get_camera (event);
      view = rut_camera_get_view_transform (state->camera);
      state->transform = *view;
      rut_graphable_apply_transform (button, &state->transform);
      if (!cogl_matrix_get_inverse (&state->transform,
                                    &state->inverse_transform))
        {
          g_warning ("Failed to calculate inverse of button transform\n");
          g_slice_free (ButtonGrabState, state);
          return RUT_INPUT_EVENT_STATUS_UNHANDLED;
        }

      rut_shell_grab_input (shell,
                            state->camera,
                            _rut_button_grab_input_cb,
                            state);
      //button->grab_x = rut_motion_event_get_x (event);
      //button->grab_y = rut_motion_event_get_y (event);

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

      return RUT_INPUT_EVENT_STATUS_HANDLED;
    }

  return RUT_INPUT_EVENT_STATUS_UNHANDLED;
}