blob: feb6c90d682016eb64667732d8a8c1f05a342b8a [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_EVENTS_MOJOM_MOTION_EVENT_ANDROID_MOJOM_TRAITS_H_
#define UI_EVENTS_MOJOM_MOTION_EVENT_ANDROID_MOJOM_TRAITS_H_
#include "base/time/time.h"
#include "mojo/public/cpp/base/time_mojom_traits.h"
#include "ui/events/android/cached_historical_event_source.h"
#include "ui/events/android/motion_event_android_java.h"
#include "ui/events/mojom/motion_event_android.mojom-shared.h"
#include "ui/gfx/geometry/mojom/geometry_mojom_traits.h"
namespace mojo {
template <>
struct StructTraits<ui::mojom::PointerCoordinatesDataView,
ui::MotionEventAndroid::PointerCoordinates> {
static const gfx::PointF& position(
const ui::MotionEventAndroid::PointerCoordinates& pointer) {
return pointer.position;
}
static float touch_major(
const ui::MotionEventAndroid::PointerCoordinates& pointer) {
return pointer.touch_major;
}
static bool Read(ui::mojom::PointerCoordinatesDataView data,
ui::MotionEventAndroid::PointerCoordinates* out);
};
template <>
struct StructTraits<ui::mojom::MotionEventAndroidCachedPointerDataView,
ui::MotionEventAndroid::CachedPointer> {
static int id(const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.id;
}
static const ui::MotionEventAndroid::PointerCoordinates& pointer_data(
const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.pointer_data;
}
static float touch_minor(
const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.touch_minor;
}
static float pressure(const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.pressure;
}
static float orientation(
const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.orientation;
}
static float tilt_x(const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.tilt_x;
}
static float tilt_y(const ui::MotionEventAndroid::CachedPointer& pointer) {
return pointer.tilt_y;
}
static int tool_type(const ui::MotionEventAndroid::CachedPointer& pointer) {
return static_cast<int>(pointer.tool_type);
}
static bool Read(ui::mojom::MotionEventAndroidCachedPointerDataView data,
ui::MotionEventAndroid::CachedPointer* out);
};
template <>
struct StructTraits<ui::mojom::HistoricalCachedPointerDataView,
ui::CachedHistoricalEventSource::HistoricalCachedPointer> {
static const base::TimeTicks& event_time(
const ui::CachedHistoricalEventSource::HistoricalCachedPointer& data) {
return data.event_time;
}
static const std::vector<ui::MotionEventAndroid::PointerCoordinates>&
pointers(
const ui::CachedHistoricalEventSource::HistoricalCachedPointer& data) {
return data.pointers;
}
static bool Read(
ui::mojom::HistoricalCachedPointerDataView data,
ui::CachedHistoricalEventSource::HistoricalCachedPointer* out);
};
template <>
struct StructTraits<ui::mojom::CachedMotionEventAndroidDataView,
std::unique_ptr<ui::MotionEventAndroid>> {
static bool IsNull(std::unique_ptr<ui::MotionEventAndroid>& event) {
return !event;
}
static void SetToNull(std::unique_ptr<ui::MotionEventAndroid>* event) {
event->reset();
}
static float pix_to_dip(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->pix_to_dip_;
}
static float ticks_x(const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->ticks_x_;
}
static float ticks_y(const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->ticks_y_;
}
static float tick_multiplier(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->tick_multiplier_;
}
static int source(const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->GetSource();
}
static bool for_touch_handle(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->for_touch_handle_;
}
static const base::TimeTicks& latest_event_time(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_latest_event_time_;
}
static const base::TimeTicks& down_time_ms(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_down_time_ms_;
}
static int action(const std::unique_ptr<ui::MotionEventAndroid>& event) {
return static_cast<int>(event->cached_action_);
}
static int action_index(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_action_index_;
}
static int action_button(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_action_button_;
}
static int gesture_classification(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_gesture_classification_;
}
static int button_state(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_button_state_;
}
static int flags(const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_flags_;
}
static const gfx::Vector2dF& raw_position_offset(
const std::unique_ptr<ui::MotionEventAndroid>& event) {
return event->cached_raw_position_offset_;
}
static std::vector<ui::MotionEventAndroid::CachedPointer> pointers(
const std::unique_ptr<ui::MotionEventAndroid>& event);
static std::vector<ui::CachedHistoricalEventSource::HistoricalCachedPointer>
historical_events(const std::unique_ptr<ui::MotionEventAndroid>& event);
static bool Read(ui::mojom::CachedMotionEventAndroidDataView data,
std::unique_ptr<ui::MotionEventAndroid>* out);
};
} // namespace mojo
#endif // UI_EVENTS_MOJOM_MOTION_EVENT_ANDROID_MOJOM_TRAITS_H_