Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(809)

Unified Diff: content/browser/renderer_host/input/motion_event_android.cc

Issue 348813002: Extend MotionEvent to have tool type and button state (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/motion_event_android.cc
diff --git a/content/browser/renderer_host/input/motion_event_android.cc b/content/browser/renderer_host/input/motion_event_android.cc
index 7409955bc9cb441978e306e5b8815c76900c6db7..7316a405f49939f3d5c3de88234aac687af5cddd 100644
--- a/content/browser/renderer_host/input/motion_event_android.cc
+++ b/content/browser/renderer_host/input/motion_event_android.cc
@@ -54,6 +54,38 @@ MotionEventAndroid::Action FromAndroidAction(int android_action) {
return MotionEventAndroid::ACTION_CANCEL;
}
+MotionEventAndroid::ToolType FromAndroidToolType(int android_tool_type) {
+ switch (android_tool_type) {
+ case TOOL_TYPE_UNKNOWN:
+ return MotionEventAndroid::TOOL_TYPE_UNKNOWN;
+ case TOOL_TYPE_FINGER:
+ return MotionEventAndroid::TOOL_TYPE_FINGER;
+ case TOOL_TYPE_STYLUS:
+ return MotionEventAndroid::TOOL_TYPE_STYLUS;
+ case TOOL_TYPE_MOUSE:
+ return MotionEventAndroid::TOOL_TYPE_MOUSE;
+ default:
+ NOTREACHED() << "Invalid Android MotionEvent tool type: "
+ << android_tool_type;
+ };
+ return MotionEventAndroid::TOOL_TYPE_UNKNOWN;
+}
+
+int FromAndroidButtonState(int button_state) {
+ int result = 0;
+ if ((button_state & BUTTON_BACK) != 0)
+ result |= MotionEventAndroid::BUTTON_BACK;
+ if ((button_state & BUTTON_FORWARD) != 0)
+ result |= MotionEventAndroid::BUTTON_FORWARD;
+ if ((button_state & BUTTON_PRIMARY) != 0)
+ result |= MotionEventAndroid::BUTTON_PRIMARY;
+ if ((button_state & BUTTON_SECONDARY) != 0)
+ result |= MotionEventAndroid::BUTTON_SECONDARY;
+ if ((button_state & BUTTON_TERTIARY) != 0)
+ result |= MotionEventAndroid::BUTTON_TERTIARY;
+ return result;
+}
+
int64 ToAndroidTime(base::TimeTicks time) {
return (time - base::TimeTicks()).InMilliseconds();
}
@@ -81,12 +113,16 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
jfloat touch_major_0_pixels,
jfloat touch_major_1_pixels,
jfloat raw_pos_x_pixels,
- jfloat raw_pos_y_pixels)
+ jfloat raw_pos_y_pixels,
+ jint android_tool_type_0,
+ jint android_tool_type_1,
+ jint android_button_state)
: cached_time_(FromAndroidTime(time_ms)),
cached_action_(FromAndroidAction(android_action)),
cached_pointer_count_(pointer_count),
cached_history_size_(history_size),
cached_action_index_(action_index),
+ cached_button_state_(FromAndroidButtonState(android_button_state)),
pix_to_dip_(pix_to_dip),
should_recycle_(false) {
DCHECK_GT(pointer_count, 0);
@@ -104,6 +140,8 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
cached_raw_position_offset_ =
ToDips(gfx::PointF(raw_pos_x_pixels, raw_pos_y_pixels)) -
cached_positions_[0];
+ cached_tool_types_[0] = FromAndroidToolType(android_tool_type_0);
+ cached_tool_types_[1] = FromAndroidToolType(android_tool_type_1);
}
MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
@@ -115,6 +153,8 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)),
cached_history_size_(Java_MotionEvent_getHistorySize(env, event)),
cached_action_index_(Java_MotionEvent_getActionIndex(env, event)),
+ cached_button_state_(
+ FromAndroidButtonState(Java_MotionEvent_getButtonState(env, event))),
pix_to_dip_(pix_to_dip),
should_recycle_(true) {
event_.Reset(env, event);
@@ -128,9 +168,12 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
cached_pointer_ids_[i] = Java_MotionEvent_getPointerId(env, event, i);
cached_touch_majors_[i] =
ToDips(Java_MotionEvent_getTouchMajorF_I(env, event, i));
+ cached_tool_types_[i] =
+ FromAndroidToolType(Java_MotionEvent_getToolType(env, event, i));
} else {
cached_pointer_ids_[i] = 0;
cached_touch_majors_[i] = 0.f;
+ cached_tool_types_[i] = MotionEvent::TOOL_TYPE_UNKNOWN;
}
}
@@ -148,6 +191,7 @@ MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
cached_history_size_(other.cached_history_size_),
cached_action_index_(other.cached_action_index_),
cached_raw_position_offset_(other.cached_raw_position_offset_),
+ cached_button_state_(other.cached_button_state_),
pix_to_dip_(other.pix_to_dip_),
should_recycle_(true) {
DCHECK(event_.obj());
@@ -155,6 +199,7 @@ MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
cached_positions_[i] = other.cached_positions_[i];
cached_pointer_ids_[i] = other.cached_pointer_ids_[i];
cached_touch_majors_[i] = other.cached_touch_majors_[i];
+ cached_tool_types_[i] = other.cached_tool_types_[i];
}
}
@@ -258,6 +303,19 @@ float MotionEventAndroid::GetHistoricalY(size_t pointer_index,
AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
}
+ui::MotionEvent::ToolType MotionEventAndroid::GetToolType(
+ size_t pointer_index) const {
+ DCHECK_LT(pointer_index, cached_pointer_count_);
+ if (pointer_index < MAX_POINTERS_TO_CACHE)
+ return cached_tool_types_[pointer_index];
+ return FromAndroidToolType(Java_MotionEvent_getToolType(
+ AttachCurrentThread(), event_.obj(), pointer_index));
+}
+
+int MotionEventAndroid::GetButtonState() const {
+ return cached_button_state_;
+}
+
scoped_ptr<ui::MotionEvent> MotionEventAndroid::Clone() const {
return scoped_ptr<MotionEvent>(new MotionEventAndroid(*this));
}
« no previous file with comments | « content/browser/renderer_host/input/motion_event_android.h ('k') | content/browser/renderer_host/input/motion_event_web.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698