| 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 c0f1721480eec0359c0b928d3516d983ceac0eb3..cf9c31fb3fcf760cf94b0aa0fc991aa410f5c11d 100644
|
| --- a/content/browser/renderer_host/input/motion_event_android.cc
|
| +++ b/content/browser/renderer_host/input/motion_event_android.cc
|
| @@ -62,6 +62,18 @@ base::TimeTicks FromAndroidTime(int64 time_ms) {
|
| return base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms);
|
| }
|
|
|
| +float GetMinTouchMajorDipsForTool(int android_tool_type) {
|
| + switch (android_tool_type) {
|
| + case TOOL_TYPE_MOUSE:
|
| + case TOOL_TYPE_STYLUS:
|
| + return 0.f;
|
| + default:
|
| + // This value is somewhat arbitrarily chosen, but was used with success in
|
| + // the old gesture detection pipeline.
|
| + return 24.f;
|
| + };
|
| +}
|
| +
|
| } // namespace
|
|
|
| MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| @@ -79,13 +91,15 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| jint pointer_id_0,
|
| jint pointer_id_1,
|
| jfloat touch_major_0_pixels,
|
| - jfloat touch_major_1_pixels)
|
| + jfloat touch_major_1_pixels,
|
| + jint tool_type)
|
| : 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),
|
| pix_to_dip_(pix_to_dip),
|
| + min_touch_major_dips_(GetMinTouchMajorDipsForTool(tool_type)),
|
| should_recycle_(false) {
|
| DCHECK_GT(pointer_count, 0);
|
| DCHECK_GE(history_size, 0);
|
| @@ -102,6 +116,7 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| }
|
|
|
| MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| + float min_touch_major_dips_,
|
| JNIEnv* env,
|
| jobject event)
|
| : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))),
|
| @@ -111,6 +126,7 @@ MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| cached_history_size_(Java_MotionEvent_getHistorySize(env, event)),
|
| cached_action_index_(Java_MotionEvent_getActionIndex(env, event)),
|
| pix_to_dip_(pix_to_dip),
|
| + min_touch_major_dips_(min_touch_major_dips_),
|
| should_recycle_(true) {
|
| event_.Reset(env, event);
|
| DCHECK(event_.obj());
|
| @@ -138,6 +154,7 @@ MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
|
| cached_history_size_(other.cached_history_size_),
|
| cached_action_index_(other.cached_action_index_),
|
| pix_to_dip_(other.pix_to_dip_),
|
| + min_touch_major_dips_(other.min_touch_major_dips_),
|
| should_recycle_(true) {
|
| DCHECK(event_.obj());
|
| for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
|
| @@ -191,11 +208,7 @@ float MotionEventAndroid::GetY(size_t pointer_index) const {
|
| }
|
|
|
| float MotionEventAndroid::GetTouchMajor(size_t pointer_index) const {
|
| - DCHECK_LT(pointer_index, cached_pointer_count_);
|
| - if (pointer_index < MAX_POINTERS_TO_CACHE)
|
| - return cached_touch_majors_[pointer_index];
|
| - return ToDips(Java_MotionEvent_getTouchMajorF_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index));
|
| + return std::max(min_touch_major_dips_, GetRawTouchMajor(pointer_index));
|
| }
|
|
|
| float MotionEventAndroid::GetPressure(size_t pointer_index) const {
|
| @@ -221,8 +234,12 @@ base::TimeTicks MotionEventAndroid::GetHistoricalEventTime(
|
| float MotionEventAndroid::GetHistoricalTouchMajor(
|
| size_t pointer_index,
|
| size_t historical_index) const {
|
| - return ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
|
| + return std::max(min_touch_major_dips_,
|
| + ToDips(Java_MotionEvent_getHistoricalTouchMajorF_I_I(
|
| + AttachCurrentThread(),
|
| + event_.obj(),
|
| + pointer_index,
|
| + historical_index)));
|
| }
|
|
|
| float MotionEventAndroid::GetHistoricalX(size_t pointer_index,
|
| @@ -248,6 +265,7 @@ scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const {
|
| gfx::ScalePoint(cached_positions_[0], 1.f / pix_to_dip_);
|
| return scoped_ptr<MotionEvent>(
|
| new MotionEventAndroid(pix_to_dip_,
|
| + min_touch_major_dips_,
|
| AttachCurrentThread(),
|
| Obtain(GetDownTime(),
|
| GetEventTime(),
|
| @@ -256,7 +274,15 @@ scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const {
|
| position_pixels.y()).obj()));
|
| }
|
|
|
| -float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const {
|
| +float MotionEventAndroid::GetRawTouchMajor(size_t pointer_index) const {
|
| + DCHECK_LT(pointer_index, cached_pointer_count_);
|
| + if (pointer_index < MAX_POINTERS_TO_CACHE)
|
| + return cached_touch_majors_[pointer_index];
|
| + return ToDips(Java_MotionEvent_getTouchMajorF_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index));
|
| +}
|
| +
|
| +float MotionEventAndroid::GetRawTouchMinor(size_t pointer_index) const {
|
| return ToDips(Java_MotionEvent_getTouchMinorF_I(
|
| AttachCurrentThread(), event_.obj(), pointer_index));
|
| }
|
|
|