| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef UI_EVENTS_MOJO_EVENT_STRUCT_TRAITS_H_ |
| #define UI_EVENTS_MOJO_EVENT_STRUCT_TRAITS_H_ |
| |
| #include <stdint.h> |
| |
| #include <string> |
| |
| #include "base/containers/flat_map.h" |
| #include "mojo/public/cpp/bindings/type_converter.h" |
| #include "ui/events/event_constants.h" |
| #include "ui/events/mojo/event.mojom.h" |
| #include "ui/events/mojo/event_constants.mojom.h" |
| |
| namespace ui { |
| class Event; |
| class LatencyInfo; |
| struct PointerDetails; |
| } |
| |
| namespace mojo { |
| |
| using EventUniquePtr = std::unique_ptr<ui::Event>; |
| |
| template <> |
| struct TypeConverter<ui::mojom::EventType, ui::EventType> { |
| static ui::mojom::EventType Convert(ui::EventType type); |
| }; |
| |
| template <> |
| struct TypeConverter<ui::EventType, ui::mojom::EventType> { |
| static ui::EventType Convert(ui::mojom::EventType type); |
| }; |
| |
| template <> |
| struct StructTraits<ui::mojom::EventDataView, EventUniquePtr> { |
| static ui::mojom::EventType action(const EventUniquePtr& event); |
| static int32_t flags(const EventUniquePtr& event); |
| static base::TimeTicks time_stamp(const EventUniquePtr& event); |
| static const ui::LatencyInfo& latency(const EventUniquePtr& event); |
| static ui::mojom::KeyDataPtr key_data(const EventUniquePtr& event); |
| static ui::mojom::GestureDataPtr gesture_data(const EventUniquePtr& event); |
| static ui::mojom::ScrollDataPtr scroll_data(const EventUniquePtr& event); |
| static ui::mojom::TouchDataPtr touch_data(const EventUniquePtr& event); |
| static ui::mojom::MouseDataPtr mouse_data(const EventUniquePtr& event); |
| static base::flat_map<std::string, std::vector<uint8_t>> properties( |
| const EventUniquePtr& event); |
| static bool Read(ui::mojom::EventDataView r, EventUniquePtr* out); |
| }; |
| |
| template <> |
| struct EnumTraits<ui::mojom::EventMomentumPhase, ui::EventMomentumPhase> { |
| static ui::mojom::EventMomentumPhase ToMojom(ui::EventMomentumPhase input) { |
| switch (input) { |
| case ui::EventMomentumPhase::NONE: |
| return ui::mojom::EventMomentumPhase::NONE; |
| case ui::EventMomentumPhase::BEGAN: |
| return ui::mojom::EventMomentumPhase::BEGAN; |
| case ui::EventMomentumPhase::MAY_BEGIN: |
| return ui::mojom::EventMomentumPhase::MAY_BEGIN; |
| case ui::EventMomentumPhase::INERTIAL_UPDATE: |
| return ui::mojom::EventMomentumPhase::INERTIAL_UPDATE; |
| case ui::EventMomentumPhase::END: |
| return ui::mojom::EventMomentumPhase::END; |
| } |
| NOTREACHED(); |
| return ui::mojom::EventMomentumPhase::NONE; |
| } |
| |
| static bool FromMojom(ui::mojom::EventMomentumPhase input, |
| ui::EventMomentumPhase* out) { |
| switch (input) { |
| case ui::mojom::EventMomentumPhase::NONE: |
| *out = ui::EventMomentumPhase::NONE; |
| return true; |
| case ui::mojom::EventMomentumPhase::BEGAN: |
| *out = ui::EventMomentumPhase::BEGAN; |
| return true; |
| case ui::mojom::EventMomentumPhase::MAY_BEGIN: |
| *out = ui::EventMomentumPhase::MAY_BEGIN; |
| return true; |
| case ui::mojom::EventMomentumPhase::INERTIAL_UPDATE: |
| *out = ui::EventMomentumPhase::INERTIAL_UPDATE; |
| return true; |
| case ui::mojom::EventMomentumPhase::END: |
| *out = ui::EventMomentumPhase::END; |
| return true; |
| } |
| NOTREACHED(); |
| return false; |
| } |
| }; |
| |
| template <> |
| struct EnumTraits<ui::mojom::PointerKind, ui::EventPointerType> { |
| static ui::mojom::PointerKind ToMojom(ui::EventPointerType input) { |
| switch (input) { |
| case ui::EventPointerType::POINTER_TYPE_UNKNOWN: |
| return ui::mojom::PointerKind::UNKNOWN; |
| case ui::EventPointerType::POINTER_TYPE_MOUSE: |
| return ui::mojom::PointerKind::MOUSE; |
| case ui::EventPointerType::POINTER_TYPE_PEN: |
| return ui::mojom::PointerKind::PEN; |
| case ui::EventPointerType::POINTER_TYPE_TOUCH: |
| return ui::mojom::PointerKind::TOUCH; |
| case ui::EventPointerType::POINTER_TYPE_ERASER: |
| return ui::mojom::PointerKind::ERASER; |
| } |
| NOTREACHED(); |
| return ui::mojom::PointerKind::UNKNOWN; |
| } |
| |
| static bool FromMojom(ui::mojom::PointerKind input, |
| ui::EventPointerType* out) { |
| switch (input) { |
| case ui::mojom::PointerKind::UNKNOWN: |
| *out = ui::EventPointerType::POINTER_TYPE_UNKNOWN; |
| return true; |
| case ui::mojom::PointerKind::MOUSE: |
| *out = ui::EventPointerType::POINTER_TYPE_MOUSE; |
| return true; |
| case ui::mojom::PointerKind::PEN: |
| *out = ui::EventPointerType::POINTER_TYPE_PEN; |
| return true; |
| case ui::mojom::PointerKind::TOUCH: |
| *out = ui::EventPointerType::POINTER_TYPE_TOUCH; |
| return true; |
| case ui::mojom::PointerKind::ERASER: |
| *out = ui::EventPointerType::POINTER_TYPE_ERASER; |
| return true; |
| } |
| NOTREACHED(); |
| return false; |
| } |
| }; |
| |
| template <> |
| struct StructTraits<ui::mojom::PointerDetailsDataView, ui::PointerDetails> { |
| static ui::EventPointerType pointer_type(const ui::PointerDetails& i) { |
| return i.pointer_type; |
| } |
| static float radius_x(const ui::PointerDetails& i) { return i.radius_x; } |
| static float radius_y(const ui::PointerDetails& i) { return i.radius_y; } |
| static float force(const ui::PointerDetails& i) { return i.force; } |
| static float tilt_x(const ui::PointerDetails& i) { return i.tilt_x; } |
| static float tilt_y(const ui::PointerDetails& i) { return i.tilt_y; } |
| static float tangential_pressure(const ui::PointerDetails& i) { |
| return i.tangential_pressure; |
| } |
| static float twist(const ui::PointerDetails& i) { return i.twist; } |
| static int32_t id(const ui::PointerDetails& i) { return i.id; } |
| static int32_t offset_x(const ui::PointerDetails& i) { return i.offset.x(); } |
| static int32_t offset_y(const ui::PointerDetails& i) { return i.offset.y(); } |
| |
| static bool Read(ui::mojom::PointerDetailsDataView data, |
| ui::PointerDetails* out); |
| }; |
| |
| template <> |
| struct EnumTraits<ui::mojom::ScrollEventPhase, ui::ScrollEventPhase> { |
| static ui::mojom::ScrollEventPhase ToMojom(ui::ScrollEventPhase input) { |
| switch (input) { |
| case ui::ScrollEventPhase::kNone: |
| return ui::mojom::ScrollEventPhase::kNone; |
| case ui::ScrollEventPhase::kBegan: |
| return ui::mojom::ScrollEventPhase::kBegan; |
| case ui::ScrollEventPhase::kUpdate: |
| return ui::mojom::ScrollEventPhase::kUpdate; |
| case ui::ScrollEventPhase::kEnd: |
| return ui::mojom::ScrollEventPhase::kEnd; |
| } |
| NOTREACHED(); |
| return ui::mojom::ScrollEventPhase::kNone; |
| } |
| |
| static bool FromMojom(ui::mojom::ScrollEventPhase input, |
| ui::ScrollEventPhase* out) { |
| switch (input) { |
| case ui::mojom::ScrollEventPhase::kNone: |
| *out = ui::ScrollEventPhase::kNone; |
| return true; |
| case ui::mojom::ScrollEventPhase::kBegan: |
| *out = ui::ScrollEventPhase::kBegan; |
| return true; |
| case ui::mojom::ScrollEventPhase::kUpdate: |
| *out = ui::ScrollEventPhase::kUpdate; |
| return true; |
| case ui::mojom::ScrollEventPhase::kEnd: |
| *out = ui::ScrollEventPhase::kEnd; |
| return true; |
| } |
| NOTREACHED(); |
| return false; |
| } |
| }; |
| |
| template <> |
| struct EnumTraits<ui::mojom::GestureDeviceType, ui::GestureDeviceType> { |
| static ui::mojom::GestureDeviceType ToMojom(ui::GestureDeviceType input) { |
| switch (input) { |
| case ui::GestureDeviceType::DEVICE_UNKNOWN: |
| return ui::mojom::GestureDeviceType::DEVICE_UNKNOWN; |
| case ui::GestureDeviceType::DEVICE_TOUCHPAD: |
| return ui::mojom::GestureDeviceType::DEVICE_TOUCHPAD; |
| case ui::GestureDeviceType::DEVICE_TOUCHSCREEN: |
| return ui::mojom::GestureDeviceType::DEVICE_TOUCHSCREEN; |
| } |
| NOTREACHED(); |
| return ui::mojom::GestureDeviceType::DEVICE_UNKNOWN; |
| } |
| |
| static bool FromMojom(ui::mojom::GestureDeviceType input, |
| ui::GestureDeviceType* out) { |
| switch (input) { |
| case ui::mojom::GestureDeviceType::DEVICE_UNKNOWN: |
| *out = ui::GestureDeviceType::DEVICE_UNKNOWN; |
| return true; |
| case ui::mojom::GestureDeviceType::DEVICE_TOUCHPAD: |
| *out = ui::GestureDeviceType::DEVICE_TOUCHPAD; |
| return true; |
| case ui::mojom::GestureDeviceType::DEVICE_TOUCHSCREEN: |
| *out = ui::GestureDeviceType::DEVICE_TOUCHSCREEN; |
| return true; |
| } |
| NOTREACHED(); |
| return false; |
| } |
| }; |
| |
| } // namespace mojo |
| |
| #endif // UI_EVENTS_MOJO_EVENT_STRUCT_TRAITS_H_ |