Chromium Code Reviews| Index: ui/events/android/motion_event_android.cc |
| diff --git a/ui/events/android/motion_event_android.cc b/ui/events/android/motion_event_android.cc |
| index 8e99aa3866b8d2e05e6d01c584f65f49eb460b4c..838a65aa47279405fb72195b0c70f10471e37e0c 100644 |
| --- a/ui/events/android/motion_event_android.cc |
| +++ b/ui/events/android/motion_event_android.cc |
| @@ -9,12 +9,14 @@ |
| #include <cmath> |
| #include "base/android/jni_android.h" |
| +#include "base/memory/ptr_util.h" |
| #include "jni/MotionEvent_jni.h" |
| #include "ui/events/base_event_utils.h" |
| #include "ui/events/event_constants.h" |
| #include "ui/events/event_utils.h" |
| using base::android::AttachCurrentThread; |
| +using base::android::ScopedJavaLocalRef; |
| using namespace JNI_MotionEvent; |
| namespace ui { |
| @@ -188,6 +190,7 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip, |
| jint pointer_count, |
| jint history_size, |
| jint action_index, |
| + jint android_action_button, |
| jint android_button_state, |
| jint android_meta_state, |
| jfloat raw_offset_x_pixels, |
| @@ -200,6 +203,7 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip, |
| cached_pointer_count_(pointer_count), |
| cached_history_size_(ToValidHistorySize(history_size, cached_action_)), |
| cached_action_index_(action_index), |
| + cached_action_button_(android_action_button), |
| cached_button_state_(FromAndroidButtonState(android_button_state)), |
| cached_flags_(ToEventFlags(android_meta_state, android_button_state)), |
| cached_raw_position_offset_(ToDips(raw_offset_x_pixels), |
| @@ -217,6 +221,32 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip, |
| cached_pointers_[1] = FromAndroidPointer(*pointer1); |
| } |
| +MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& e) |
| + : event_(e.event_), |
| + pix_to_dip_(e.pix_to_dip_), |
| + cached_time_(e.cached_time_), |
| + cached_action_(e.cached_action_), |
| + cached_pointer_count_(e.cached_pointer_count_), |
| + cached_history_size_(e.cached_history_size_), |
| + cached_action_index_(e.cached_action_index_), |
| + cached_action_button_(e.cached_action_button_), |
| + cached_button_state_(e.cached_button_state_), |
| + cached_flags_(e.cached_flags_), |
| + cached_raw_position_offset_(e.cached_raw_position_offset_), |
| + unique_event_id_(ui::GetNextTouchEventId()) { |
| + for (size_t i = 0; i < cached_pointer_count_; i++) |
| + cached_pointers_[i] = e.cached_pointers_[i]; |
| +} |
| + |
| +std::unique_ptr<MotionEventAndroid> MotionEventAndroid::Offset(float x, |
| + float y) const { |
| + MotionEventAndroid* event = new MotionEventAndroid(*this); |
|
boliu
2017/03/08 02:23:43
nit: always keep things in unique_ptr, so this can
Jinsuk Kim
2017/03/08 04:29:40
base::MakeUnique can't instantiate MotionEventAndr
|
| + for (size_t i = 0; i < cached_pointer_count_; i++) { |
| + event->cached_pointers_[i] = FromCachedPointer(cached_pointers_[i], x, y); |
| + } |
| + return base::WrapUnique(event); |
| +} |
| + |
| MotionEventAndroid::~MotionEventAndroid() { |
| } |
| @@ -228,6 +258,14 @@ MotionEventAndroid::Action MotionEventAndroid::GetAction() const { |
| return cached_action_; |
| } |
| +int MotionEventAndroid::GetActionButton() const { |
| + return cached_action_button_; |
| +} |
| + |
| +ScopedJavaLocalRef<jobject> MotionEventAndroid::GetJavaObject() const { |
| + return ScopedJavaLocalRef<jobject>(event_); |
| +} |
| + |
| int MotionEventAndroid::GetActionIndex() const { |
| DCHECK(cached_action_ == MotionEvent::ACTION_POINTER_UP || |
| cached_action_ == MotionEvent::ACTION_POINTER_DOWN) |
| @@ -388,4 +426,20 @@ MotionEventAndroid::CachedPointer MotionEventAndroid::FromAndroidPointer( |
| return result; |
| } |
| -} // namespace content |
| +MotionEventAndroid::CachedPointer MotionEventAndroid::FromCachedPointer( |
| + const CachedPointer& pointer, |
| + float x, |
| + float y) const { |
| + CachedPointer result; |
| + result.id = pointer.id; |
| + result.position = gfx::PointF(pointer.position.x() + ToDips(x), |
| + pointer.position.y() + ToDips(y)); |
| + result.touch_major = pointer.touch_major; |
| + result.touch_minor = pointer.touch_minor; |
| + result.orientation = pointer.orientation; |
| + result.tilt = pointer.tilt; |
| + result.tool_type = pointer.tool_type; |
| + return result; |
| +} |
| + |
| +} // namespace ui |