910e62b5创建于 1月15日历史提交
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_COMMON_INPUT_INPUT_INJECTOR_MOJOM_TRAITS_H_
#define CONTENT_COMMON_INPUT_INPUT_INJECTOR_MOJOM_TRAITS_H_

#include "content/common/input/input_injector.mojom.h"
#include "content/common/input/synthetic_pinch_gesture_params.h"
#include "content/common/input/synthetic_pointer_action_list_params.h"
#include "content/common/input/synthetic_pointer_action_params.h"
#include "content/common/input/synthetic_smooth_drag_gesture_params.h"
#include "content/common/input/synthetic_smooth_scroll_gesture_params.h"
#include "content/common/input/synthetic_tap_gesture_params.h"
#include "ui/events/types/scroll_types.h"
#include "ui/gfx/geometry/point_f.h"

namespace mojo {

template <>
struct EnumTraits<content::mojom::PointerActionType,
                  content::SyntheticPointerActionParams::PointerActionType> {
  static content::mojom::PointerActionType ToMojom(
      content::SyntheticPointerActionParams::PointerActionType input);
  static bool FromMojom(
      content::mojom::PointerActionType input,
      content::SyntheticPointerActionParams::PointerActionType* output);
};

template <>
struct EnumTraits<content::mojom::SyntheticButton,
                  content::SyntheticPointerActionParams::Button> {
  static content::mojom::SyntheticButton ToMojom(
      content::SyntheticPointerActionParams::Button input);
  static bool FromMojom(content::mojom::SyntheticButton input,
                        content::SyntheticPointerActionParams::Button* output);
};

template <>
struct StructTraits<content::mojom::SyntheticSmoothDragDataView,
                    content::SyntheticSmoothDragGestureParams> {
  static content::mojom::GestureSourceType gesture_source_type(
      const content::SyntheticSmoothDragGestureParams& r) {
    return r.gesture_source_type;
  }

  static const gfx::PointF& start_point(
      const content::SyntheticSmoothDragGestureParams& r) {
    return r.start_point;
  }

  static const std::vector<gfx::Vector2dF>& distances(
      const content::SyntheticSmoothDragGestureParams& r) {
    return r.distances;
  }

  static float speed_in_pixels_s(
      const content::SyntheticSmoothDragGestureParams& r) {
    return r.speed_in_pixels_s;
  }

  static float vsync_offset_ms(
      const content::SyntheticSmoothDragGestureParams& r) {
    return r.vsync_offset_ms;
  }

  static content::mojom::InputEventPattern input_event_pattern(
      const content::SyntheticSmoothDragGestureParams& r) {
    return r.input_event_pattern;
  }

  static bool Read(content::mojom::SyntheticSmoothDragDataView r,
                   content::SyntheticSmoothDragGestureParams* out);
};

template <>
struct StructTraits<content::mojom::SyntheticPinchDataView,
                    content::SyntheticPinchGestureParams> {
  static float scale_factor(const content::SyntheticPinchGestureParams& r) {
    return r.scale_factor;
  }

  static const gfx::PointF& anchor(
      const content::SyntheticPinchGestureParams& r) {
    return r.anchor;
  }

  static float relative_pointer_speed_in_pixels_s(
      const content::SyntheticPinchGestureParams& r) {
    return r.relative_pointer_speed_in_pixels_s;
  }

  static float vsync_offset_ms(const content::SyntheticPinchGestureParams& r) {
    return r.vsync_offset_ms;
  }

  static content::mojom::InputEventPattern input_event_pattern(
      const content::SyntheticPinchGestureParams& r) {
    return r.input_event_pattern;
  }

  static bool Read(content::mojom::SyntheticPinchDataView r,
                   content::SyntheticPinchGestureParams* out);
};

template <>
struct StructTraits<content::mojom::SyntheticSmoothScrollDataView,
                    content::SyntheticSmoothScrollGestureParams> {
  static content::mojom::GestureSourceType gesture_source_type(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.gesture_source_type;
  }

  static const gfx::PointF& anchor(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.anchor;
  }

  static const std::vector<gfx::Vector2dF>& distances(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.distances;
  }

  static bool prevent_fling(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.prevent_fling;
  }

  static float speed_in_pixels_s(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.speed_in_pixels_s;
  }

  static float fling_velocity_x(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.fling_velocity_x;
  }

  static float fling_velocity_y(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.fling_velocity_y;
  }

  static ui::ScrollGranularity granularity(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.granularity;
  }

  static int32_t modifiers(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.modifiers;
  }

  static float vsync_offset_ms(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.vsync_offset_ms;
  }

  static content::mojom::InputEventPattern input_event_pattern(
      const content::SyntheticSmoothScrollGestureParams& r) {
    return r.input_event_pattern;
  }

  static bool Read(content::mojom::SyntheticSmoothScrollDataView r,
                   content::SyntheticSmoothScrollGestureParams* out);
};

template <>
struct StructTraits<content::mojom::SyntheticTapDataView,
                    content::SyntheticTapGestureParams> {
  static content::mojom::GestureSourceType gesture_source_type(
      const content::SyntheticTapGestureParams& r) {
    return r.gesture_source_type;
  }

  static const gfx::PointF& position(
      const content::SyntheticTapGestureParams& r) {
    return r.position;
  }

  static float duration_ms(const content::SyntheticTapGestureParams& r) {
    return r.duration_ms;
  }

  static bool Read(content::mojom::SyntheticTapDataView r,
                   content::SyntheticTapGestureParams* out);
};

template <>
struct StructTraits<content::mojom::SyntheticPointerActionParamsDataView,
                    content::SyntheticPointerActionParams> {
  static content::SyntheticPointerActionParams::PointerActionType
  pointer_action_type(const content::SyntheticPointerActionParams& r) {
    return r.pointer_action_type_;
  }

  static gfx::PointF position(const content::SyntheticPointerActionParams& r) {
    return r.position_;
  }

  static uint32_t pointer_id(const content::SyntheticPointerActionParams& r) {
    return r.pointer_id_;
  }

  static content::SyntheticPointerActionParams::Button button(
      const content::SyntheticPointerActionParams& r) {
    return r.button_;
  }

  static uint32_t key_modifiers(
      const content::SyntheticPointerActionParams& r) {
    return r.key_modifiers_;
  }

  static float width(const content::SyntheticPointerActionParams& r) {
    return r.width_;
  }

  static float height(const content::SyntheticPointerActionParams& r) {
    return r.height_;
  }

  static float rotation_angle(const content::SyntheticPointerActionParams& r) {
    return r.rotation_angle_;
  }

  static float force(const content::SyntheticPointerActionParams& r) {
    return r.force_;
  }

  static float tangential_pressure(
      const content::SyntheticPointerActionParams& r) {
    return r.tangential_pressure_;
  }

  static uint32_t tilt_x(const content::SyntheticPointerActionParams& r) {
    return r.tilt_x_;
  }

  static uint32_t tilt_y(const content::SyntheticPointerActionParams& r) {
    return r.tilt_y_;
  }

  static base::TimeTicks timestamp(
      const content::SyntheticPointerActionParams& r) {
    return r.timestamp_;
  }

  static base::TimeDelta duration(
      const content::SyntheticPointerActionParams& r) {
    return r.duration_;
  }

  static bool Read(content::mojom::SyntheticPointerActionParamsDataView r,
                   content::SyntheticPointerActionParams* out);
};

template <>
struct StructTraits<content::mojom::SyntheticPointerActionDataView,
                    content::SyntheticPointerActionListParams> {
  static content::mojom::GestureSourceType gesture_source_type(
      const content::SyntheticPointerActionListParams& r) {
    return r.gesture_source_type;
  }

  static const std::vector<std::vector<content::SyntheticPointerActionParams>>&
  params(const content::SyntheticPointerActionListParams& r) {
    return r.params;
  }

  static bool Read(content::mojom::SyntheticPointerActionDataView r,
                   content::SyntheticPointerActionListParams* out);
};

}  // namespace mojo

#endif  // CONTENT_COMMON_INPUT_INPUT_INJECTOR_MOJOM_TRAITS_H_