| 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 f7507bf9d2674067b5aba24bc3a0336dfcdd56ec..ee645bfc80e25d19e1596ce70994b404e7a33867 100644
|
| --- a/ui/events/android/motion_event_android.cc
|
| +++ b/ui/events/android/motion_event_android.cc
|
| @@ -34,9 +34,18 @@ MotionEventAndroid::Action FromAndroidAction(int android_action) {
|
| return MotionEventAndroid::ACTION_POINTER_DOWN;
|
| case ACTION_POINTER_UP:
|
| return MotionEventAndroid::ACTION_POINTER_UP;
|
| + case ACTION_HOVER_ENTER:
|
| + return MotionEventAndroid::ACTION_HOVER_ENTER;
|
| + case ACTION_HOVER_EXIT:
|
| + return MotionEventAndroid::ACTION_HOVER_EXIT;
|
| + case ACTION_HOVER_MOVE:
|
| + return MotionEventAndroid::ACTION_HOVER_MOVE;
|
| + case ACTION_BUTTON_PRESS:
|
| + return MotionEventAndroid::ACTION_BUTTON_PRESS;
|
| + case ACTION_BUTTON_RELEASE:
|
| + return MotionEventAndroid::ACTION_BUTTON_RELEASE;
|
| default:
|
| - NOTREACHED() << "Invalid Android MotionEvent type for gesture detection: "
|
| - << android_action;
|
| + NOTREACHED() << "Invalid Android MotionEvent action: " << android_action;
|
| };
|
| return MotionEventAndroid::ACTION_CANCEL;
|
| }
|
| @@ -79,8 +88,9 @@ int FromAndroidButtonState(int button_state) {
|
| return result;
|
| }
|
|
|
| -int FromAndroidMetaState(int meta_state) {
|
| +int ToEventFlags(int meta_state, int button_state) {
|
| int flags = ui::EF_NONE;
|
| +
|
| if ((meta_state & AMETA_SHIFT_ON) != 0)
|
| flags |= ui::EF_SHIFT_DOWN;
|
| if ((meta_state & AMETA_CTRL_ON) != 0)
|
| @@ -91,6 +101,22 @@ int FromAndroidMetaState(int meta_state) {
|
| flags |= ui::EF_COMMAND_DOWN;
|
| if ((meta_state & AMETA_CAPS_LOCK_ON) != 0)
|
| flags |= ui::EF_CAPS_LOCK_ON;
|
| +
|
| + if ((button_state & BUTTON_BACK) != 0)
|
| + flags |= ui::EF_BACK_MOUSE_BUTTON;
|
| + if ((button_state & BUTTON_FORWARD) != 0)
|
| + flags |= ui::EF_FORWARD_MOUSE_BUTTON;
|
| + if ((button_state & BUTTON_PRIMARY) != 0)
|
| + flags |= ui::EF_LEFT_MOUSE_BUTTON;
|
| + if ((button_state & BUTTON_SECONDARY) != 0)
|
| + flags |= ui::EF_RIGHT_MOUSE_BUTTON;
|
| + if ((button_state & BUTTON_TERTIARY) != 0)
|
| + flags |= ui::EF_MIDDLE_MOUSE_BUTTON;
|
| + if ((button_state & BUTTON_STYLUS_PRIMARY) != 0)
|
| + flags |= ui::EF_LEFT_MOUSE_BUTTON;
|
| + if ((button_state & BUTTON_STYLUS_SECONDARY) != 0)
|
| + flags |= ui::EF_RIGHT_MOUSE_BUTTON;
|
| +
|
| return flags;
|
| }
|
|
|
| @@ -163,11 +189,11 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| jint history_size,
|
| jint action_index,
|
| jint android_button_state,
|
| - jint meta_state,
|
| + jint android_meta_state,
|
| jfloat raw_offset_x_pixels,
|
| jfloat raw_offset_y_pixels,
|
| - const Pointer& pointer0,
|
| - const Pointer& pointer1)
|
| + const Pointer* const pointer0,
|
| + const Pointer* const pointer1)
|
| : pix_to_dip_(pix_to_dip),
|
| cached_time_(FromAndroidTime(time_ms)),
|
| cached_action_(FromAndroidAction(android_action)),
|
| @@ -175,18 +201,20 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| cached_history_size_(ToValidHistorySize(history_size, cached_action_)),
|
| cached_action_index_(action_index),
|
| cached_button_state_(FromAndroidButtonState(android_button_state)),
|
| - cached_flags_(FromAndroidMetaState(meta_state)),
|
| + cached_flags_(ToEventFlags(android_meta_state, android_button_state)),
|
| cached_raw_position_offset_(ToDips(raw_offset_x_pixels),
|
| ToDips(raw_offset_y_pixels)),
|
| unique_event_id_(ui::GetNextTouchEventId()) {
|
| - DCHECK_GT(pointer_count, 0);
|
| + DCHECK_GT(cached_pointer_count_, 0U);
|
| + DCHECK(cached_pointer_count_ == 1 || pointer1);
|
|
|
| event_.Reset(env, event);
|
| if (cached_pointer_count_ > MAX_POINTERS_TO_CACHE || cached_history_size_ > 0)
|
| DCHECK(event_.obj());
|
|
|
| - cached_pointers_[0] = FromAndroidPointer(pointer0);
|
| - cached_pointers_[1] = FromAndroidPointer(pointer1);
|
| + cached_pointers_[0] = FromAndroidPointer(*pointer0);
|
| + if (cached_pointer_count_ > 1)
|
| + cached_pointers_[1] = FromAndroidPointer(*pointer1);
|
| }
|
|
|
| MotionEventAndroid::~MotionEventAndroid() {
|
|
|