blob: 2a945dd615d5854e7c18aa236b11b87a83336920 [file] [log] [blame]
// Copyright 2024 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_ANDROID_MOTION_EVENT_ANDROID_JAVA_H_
#define UI_EVENTS_ANDROID_MOTION_EVENT_ANDROID_JAVA_H_
#include <jni.h>
#include <stddef.h>
#include <stdint.h>
#include <memory>
#include "base/android/scoped_java_ref.h"
#include "base/time/time.h"
#include "ui/events/android/motion_event_android.h"
#include "ui/events/android/motion_event_android_source.h"
#include "ui/events/events_export.h"
#include "ui/events/velocity_tracker/motion_event.h"
#include "ui/gfx/geometry/point_f.h"
namespace ui {
class MotionEventAndroidFactory;
// Implementation of ui::MotionEventAndroid wrapping a java Android MotionEvent.
// All *input* coordinates are in device pixels (as with Android MotionEvent),
// while all *output* coordinates are in DIPs (as with WebTouchEvent).
class EVENTS_EXPORT MotionEventAndroidJava : public MotionEventAndroid {
public:
~MotionEventAndroidJava() override;
friend class MotionEventAndroidFactory;
// Disallow copy/assign.
MotionEventAndroidJava(const MotionEventAndroidJava& e) = delete;
void operator=(const MotionEventAndroidJava&) = delete;
// Start ui::MotionEvent overrides
bool IsLatestEventTimeResampled() const override;
// End ui::MotionEvent overrides
// Start MotionEventAndroid overrides
std::unique_ptr<MotionEventAndroid> CreateFor(
const gfx::PointF& point) const override;
base::android::ScopedJavaLocalRef<jobject> GetJavaObject() const override;
// End MotionEventAndroid overrides
private:
// Forcing the caller to provide all cached values upon construction
// eliminates the need to perform a JNI call to retrieve values individually.
MotionEventAndroidJava(jfloat pix_to_dip,
jfloat ticks_x,
jfloat ticks_y,
jfloat tick_multiplier,
base::TimeTicks oldest_event_time,
base::TimeTicks latest_event_time,
base::TimeTicks down_time_ms,
jint android_action,
jint pointer_count,
jint history_size,
jint action_index,
jint android_action_button,
jint android_gesture_classification,
jint android_button_state,
jint meta_state,
jfloat raw_offset_x_pixels,
jfloat raw_offset_y_pixels,
jboolean for_touch_handle,
const Pointer* const pointer0,
const Pointer* const pointer1,
std::unique_ptr<MotionEventAndroidSource> source);
// Makes a copy of passed object |e| such that the cached pointers are
// translated to new coordinates where the 0th indexded pointer points to
// |point| and other pointer is translated accordingly if it exists.
MotionEventAndroidJava(const MotionEventAndroidJava& e,
const gfx::PointF& point);
};
} // namespace ui
#endif // UI_EVENTS_ANDROID_MOTION_EVENT_ANDROID_JAVA_H_