| 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 eea14e961aa0d3f44e6cd78f682d48936fa720a9..c0f1721480eec0359c0b928d3516d983ceac0eb3 100644
|
| --- a/content/browser/renderer_host/input/motion_event_android.cc
|
| +++ b/content/browser/renderer_host/input/motion_event_android.cc
|
| @@ -64,26 +64,28 @@ base::TimeTicks FromAndroidTime(int64 time_ms) {
|
|
|
| } // namespace
|
|
|
| -MotionEventAndroid::MotionEventAndroid(JNIEnv* env,
|
| +MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| + JNIEnv* env,
|
| jobject event,
|
| jlong time_ms,
|
| jint android_action,
|
| jint pointer_count,
|
| jint history_size,
|
| jint action_index,
|
| - jfloat pos_x_0,
|
| - jfloat pos_y_0,
|
| - jfloat pos_x_1,
|
| - jfloat pos_y_1,
|
| + jfloat pos_x_0_pixels,
|
| + jfloat pos_y_0_pixels,
|
| + jfloat pos_x_1_pixels,
|
| + jfloat pos_y_1_pixels,
|
| jint pointer_id_0,
|
| jint pointer_id_1,
|
| - jfloat touch_major_0,
|
| - jfloat touch_major_1)
|
| + jfloat touch_major_0_pixels,
|
| + jfloat touch_major_1_pixels)
|
| : 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),
|
| should_recycle_(false) {
|
| DCHECK_GT(pointer_count, 0);
|
| DCHECK_GE(history_size, 0);
|
| @@ -91,32 +93,36 @@ MotionEventAndroid::MotionEventAndroid(JNIEnv* env,
|
| event_.Reset(env, event);
|
| DCHECK(event_.obj());
|
|
|
| - cached_positions_[0] = gfx::PointF(pos_x_0, pos_y_0);
|
| - cached_positions_[1] = gfx::PointF(pos_x_1, pos_y_1);
|
| + cached_positions_[0] = ToDips(gfx::PointF(pos_x_0_pixels, pos_y_0_pixels));
|
| + cached_positions_[1] = ToDips(gfx::PointF(pos_x_1_pixels, pos_y_1_pixels));
|
| cached_pointer_ids_[0] = pointer_id_0;
|
| cached_pointer_ids_[1] = pointer_id_1;
|
| - cached_touch_majors_[0] = touch_major_0;
|
| - cached_touch_majors_[1] = touch_major_1;
|
| + cached_touch_majors_[0] = ToDips(touch_major_0_pixels);
|
| + cached_touch_majors_[1] = ToDips(touch_major_1_pixels);
|
| }
|
|
|
| -MotionEventAndroid::MotionEventAndroid(JNIEnv* env, jobject event)
|
| +MotionEventAndroid::MotionEventAndroid(float pix_to_dip,
|
| + JNIEnv* env,
|
| + jobject event)
|
| : cached_time_(FromAndroidTime(Java_MotionEvent_getEventTime(env, event))),
|
| - cached_action_(FromAndroidAction(
|
| - Java_MotionEvent_getActionMasked(env, event))),
|
| + cached_action_(
|
| + FromAndroidAction(Java_MotionEvent_getActionMasked(env, event))),
|
| cached_pointer_count_(Java_MotionEvent_getPointerCount(env, event)),
|
| cached_history_size_(Java_MotionEvent_getHistorySize(env, event)),
|
| cached_action_index_(Java_MotionEvent_getActionIndex(env, event)),
|
| + pix_to_dip_(pix_to_dip),
|
| should_recycle_(true) {
|
| event_.Reset(env, event);
|
| DCHECK(event_.obj());
|
|
|
| for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
|
| if (i < cached_pointer_count_) {
|
| - cached_positions_[i].set_x(Java_MotionEvent_getXF_I(env, event, i));
|
| - cached_positions_[i].set_y(Java_MotionEvent_getYF_I(env, event, i));
|
| + cached_positions_[i] =
|
| + ToDips(gfx::PointF(Java_MotionEvent_getXF_I(env, event, i),
|
| + Java_MotionEvent_getYF_I(env, event, i)));
|
| cached_pointer_ids_[i] = Java_MotionEvent_getPointerId(env, event, i);
|
| cached_touch_majors_[i] =
|
| - Java_MotionEvent_getTouchMajorF_I(env, event, i);
|
| + ToDips(Java_MotionEvent_getTouchMajorF_I(env, event, i));
|
| } else {
|
| cached_pointer_ids_[i] = 0;
|
| cached_touch_majors_[i] = 0.f;
|
| @@ -131,6 +137,7 @@ MotionEventAndroid::MotionEventAndroid(const MotionEventAndroid& other)
|
| cached_pointer_count_(other.cached_pointer_count_),
|
| cached_history_size_(other.cached_history_size_),
|
| cached_action_index_(other.cached_action_index_),
|
| + pix_to_dip_(other.pix_to_dip_),
|
| should_recycle_(true) {
|
| DCHECK(event_.obj());
|
| for (size_t i = 0; i < MAX_POINTERS_TO_CACHE; ++i) {
|
| @@ -153,9 +160,7 @@ MotionEventAndroid::Action MotionEventAndroid::GetAction() const {
|
| return cached_action_;
|
| }
|
|
|
| -int MotionEventAndroid::GetActionIndex() const {
|
| - return cached_action_index_;
|
| -}
|
| +int MotionEventAndroid::GetActionIndex() const { return cached_action_index_; }
|
|
|
| size_t MotionEventAndroid::GetPointerCount() const {
|
| return cached_pointer_count_;
|
| @@ -173,24 +178,24 @@ float MotionEventAndroid::GetX(size_t pointer_index) const {
|
| DCHECK_LT(pointer_index, cached_pointer_count_);
|
| if (pointer_index < MAX_POINTERS_TO_CACHE)
|
| return cached_positions_[pointer_index].x();
|
| - return Java_MotionEvent_getXF_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index);
|
| + return ToDips(Java_MotionEvent_getXF_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index));
|
| }
|
|
|
| float MotionEventAndroid::GetY(size_t pointer_index) const {
|
| DCHECK_LT(pointer_index, cached_pointer_count_);
|
| if (pointer_index < MAX_POINTERS_TO_CACHE)
|
| return cached_positions_[pointer_index].y();
|
| - return Java_MotionEvent_getYF_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index);
|
| + return ToDips(Java_MotionEvent_getYF_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index));
|
| }
|
|
|
| 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 Java_MotionEvent_getTouchMajorF_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index);
|
| + return ToDips(Java_MotionEvent_getTouchMajorF_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index));
|
| }
|
|
|
| float MotionEventAndroid::GetPressure(size_t pointer_index) const {
|
| @@ -213,23 +218,23 @@ base::TimeTicks MotionEventAndroid::GetHistoricalEventTime(
|
| AttachCurrentThread(), event_.obj(), historical_index));
|
| }
|
|
|
| -float MotionEventAndroid::GetHistoricalTouchMajor(size_t pointer_index,
|
| - size_t historical_index)
|
| - const {
|
| - return Java_MotionEvent_getHistoricalTouchMajorF_I_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index, historical_index);
|
| +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));
|
| }
|
|
|
| float MotionEventAndroid::GetHistoricalX(size_t pointer_index,
|
| size_t historical_index) const {
|
| - return Java_MotionEvent_getHistoricalXF_I_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index, historical_index);
|
| + return ToDips(Java_MotionEvent_getHistoricalXF_I_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
|
| }
|
|
|
| float MotionEventAndroid::GetHistoricalY(size_t pointer_index,
|
| size_t historical_index) const {
|
| - return Java_MotionEvent_getHistoricalYF_I_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index, historical_index);
|
| + return ToDips(Java_MotionEvent_getHistoricalYF_I_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index, historical_index));
|
| }
|
|
|
| scoped_ptr<ui::MotionEvent> MotionEventAndroid::Clone() const {
|
| @@ -237,18 +242,23 @@ scoped_ptr<ui::MotionEvent> MotionEventAndroid::Clone() const {
|
| }
|
|
|
| scoped_ptr<ui::MotionEvent> MotionEventAndroid::Cancel() const {
|
| - return scoped_ptr<MotionEvent>(new MotionEventAndroid(
|
| - AttachCurrentThread(),
|
| - Obtain(GetDownTime(),
|
| - GetEventTime(),
|
| - MotionEventAndroid::ACTION_CANCEL,
|
| - GetX(0),
|
| - GetY(0)).obj()));
|
| + // The input coordinates to |MotionEventAndroid| are always in device pixels,
|
| + // but the cached coordinates are in DIPs.
|
| + const gfx::PointF position_pixels =
|
| + gfx::ScalePoint(cached_positions_[0], 1.f / pix_to_dip_);
|
| + return scoped_ptr<MotionEvent>(
|
| + new MotionEventAndroid(pix_to_dip_,
|
| + AttachCurrentThread(),
|
| + Obtain(GetDownTime(),
|
| + GetEventTime(),
|
| + MotionEventAndroid::ACTION_CANCEL,
|
| + position_pixels.x(),
|
| + position_pixels.y()).obj()));
|
| }
|
|
|
| float MotionEventAndroid::GetTouchMinor(size_t pointer_index) const {
|
| - return Java_MotionEvent_getTouchMinorF_I(
|
| - AttachCurrentThread(), event_.obj(), pointer_index);
|
| + return ToDips(Java_MotionEvent_getTouchMinorF_I(
|
| + AttachCurrentThread(), event_.obj(), pointer_index));
|
| }
|
|
|
| float MotionEventAndroid::GetOrientation() const {
|
| @@ -260,6 +270,14 @@ base::TimeTicks MotionEventAndroid::GetDownTime() const {
|
| Java_MotionEvent_getDownTime(AttachCurrentThread(), event_.obj()));
|
| }
|
|
|
| +float MotionEventAndroid::ToDips(float pixels) const {
|
| + return pixels * pix_to_dip_;
|
| +}
|
| +
|
| +gfx::PointF MotionEventAndroid::ToDips(const gfx::PointF& point_pixels) const {
|
| + return gfx::ScalePoint(point_pixels, pix_to_dip_);
|
| +}
|
| +
|
| // static
|
| bool MotionEventAndroid::RegisterMotionEventAndroid(JNIEnv* env) {
|
| return JNI_MotionEvent::RegisterNativesImpl(env);
|
| @@ -277,14 +295,14 @@ base::android::ScopedJavaLocalRef<jobject> MotionEventAndroid::Obtain(
|
| base::TimeTicks down_time,
|
| base::TimeTicks event_time,
|
| Action action,
|
| - float x,
|
| - float y) {
|
| + float x_pixels,
|
| + float y_pixels) {
|
| return Java_MotionEvent_obtainAVME_J_J_I_F_F_I(AttachCurrentThread(),
|
| ToAndroidTime(down_time),
|
| ToAndroidTime(event_time),
|
| ToAndroidAction(action),
|
| - x,
|
| - y,
|
| + x_pixels,
|
| + y_pixels,
|
| 0);
|
| }
|
|
|
|
|