OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/input/web_input_event_builders_android.h
" | 5 #include "content/browser/renderer_host/input/web_input_event_builders_android.h
" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "content/browser/renderer_host/input/motion_event_android.h" | 8 #include "content/browser/renderer_host/input/motion_event_android.h" |
9 #include "content/browser/renderer_host/input/web_input_event_util.h" | 9 #include "content/browser/renderer_host/input/web_input_event_util.h" |
10 #include "content/browser/renderer_host/input/web_input_event_util_posix.h" | 10 #include "content/browser/renderer_host/input/web_input_event_util_posix.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 case MotionEventAndroid::ACTION_POINTER_UP: | 61 case MotionEventAndroid::ACTION_POINTER_UP: |
62 return is_action_pointer ? WebTouchPoint::StateReleased | 62 return is_action_pointer ? WebTouchPoint::StateReleased |
63 : WebTouchPoint::StateStationary; | 63 : WebTouchPoint::StateStationary; |
64 } | 64 } |
65 NOTREACHED() << "Invalid MotionEventAndroid::Action."; | 65 NOTREACHED() << "Invalid MotionEventAndroid::Action."; |
66 return WebTouchPoint::StateUndefined; | 66 return WebTouchPoint::StateUndefined; |
67 } | 67 } |
68 | 68 |
69 WebTouchPoint BuildWebTouchPoint(const MotionEventAndroid& event, | 69 WebTouchPoint BuildWebTouchPoint(const MotionEventAndroid& event, |
70 size_t pointer_index, | 70 size_t pointer_index, |
71 float dpi_scale) { | 71 float px_to_dp) { |
72 WebTouchPoint touch; | 72 WebTouchPoint touch; |
73 touch.id = event.GetPointerId(pointer_index); | 73 touch.id = event.GetPointerId(pointer_index); |
74 touch.state = ToWebTouchPointState(event.GetActionMasked(), | 74 touch.state = ToWebTouchPointState( |
75 pointer_index == event.GetActionIndex()); | 75 event.GetAction(), |
76 touch.position.x = event.GetX(pointer_index) / dpi_scale; | 76 static_cast<int>(pointer_index) == event.GetActionIndex()); |
77 touch.position.y = event.GetY(pointer_index) / dpi_scale; | 77 touch.position.x = event.GetX(pointer_index) * px_to_dp; |
| 78 touch.position.y = event.GetY(pointer_index) * px_to_dp; |
78 // TODO(joth): Raw event co-ordinates. | 79 // TODO(joth): Raw event co-ordinates. |
79 touch.screenPosition = touch.position; | 80 touch.screenPosition = touch.position; |
80 | 81 |
81 const int radius_major = | 82 const int radius_major = |
82 static_cast<int>(event.GetTouchMajor(pointer_index) * 0.5f / dpi_scale); | 83 static_cast<int>(event.GetTouchMajor(pointer_index) * 0.5f * px_to_dp); |
83 const int radius_minor = | 84 const int radius_minor = |
84 static_cast<int>(event.GetTouchMinor(pointer_index) * 0.5f / dpi_scale); | 85 static_cast<int>(event.GetTouchMinor(pointer_index) * 0.5f * px_to_dp); |
85 const float major_angle_in_radians_clockwise_from_vertical = | 86 const float major_angle_in_radians_clockwise_from_vertical = |
86 event.GetOrientation(); | 87 event.GetOrientation(); |
87 | 88 |
88 float major_angle_in_degrees_clockwise_from_vertical = 0; | 89 float major_angle_in_degrees_clockwise_from_vertical = 0; |
89 if (!std::isnan(major_angle_in_radians_clockwise_from_vertical)) { | 90 if (!std::isnan(major_angle_in_radians_clockwise_from_vertical)) { |
90 major_angle_in_degrees_clockwise_from_vertical = | 91 major_angle_in_degrees_clockwise_from_vertical = |
91 major_angle_in_radians_clockwise_from_vertical * 180.f / M_PI; | 92 major_angle_in_radians_clockwise_from_vertical * 180.f / M_PI; |
92 } | 93 } |
93 // Android provides a major axis orientation clockwise with respect to the | 94 // Android provides a major axis orientation clockwise with respect to the |
94 // vertical of [-90, 90]. The proposed W3C extension specifies the angle that | 95 // vertical of [-90, 90]. The proposed W3C extension specifies the angle that |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 | 220 |
220 result.type = type; | 221 result.type = type; |
221 result.x = x; | 222 result.x = x; |
222 result.y = y; | 223 result.y = y; |
223 result.timeStampSeconds = time_sec; | 224 result.timeStampSeconds = time_sec; |
224 result.sourceDevice = WebGestureEvent::Touchscreen; | 225 result.sourceDevice = WebGestureEvent::Touchscreen; |
225 | 226 |
226 return result; | 227 return result; |
227 } | 228 } |
228 | 229 |
229 blink::WebTouchEvent WebTouchEventBuilder::Build(jobject motion_event, | 230 blink::WebTouchEvent WebTouchEventBuilder::Build( |
230 float dpi_scale) { | 231 const MotionEventAndroid& event, |
231 DCHECK(motion_event); | 232 float device_scale_factor) { |
232 MotionEventAndroid event(motion_event); | |
233 | |
234 blink::WebTouchEvent result; | 233 blink::WebTouchEvent result; |
235 | 234 |
236 result.type = ToWebInputEventType(event.GetActionMasked()); | 235 result.type = ToWebInputEventType(event.GetAction()); |
237 DCHECK(WebInputEvent::isTouchEventType(result.type)); | 236 DCHECK(WebInputEvent::isTouchEventType(result.type)); |
238 | 237 |
239 result.timeStampSeconds = | 238 result.timeStampSeconds = |
240 (event.GetEventTime() - base::TimeTicks()).InSecondsF(); | 239 (event.GetEventTime() - base::TimeTicks()).InSecondsF(); |
241 | 240 |
242 result.touchesLength = | 241 result.touchesLength = |
243 std::min(event.GetPointerCount(), | 242 std::min(event.GetPointerCount(), |
244 static_cast<size_t>(WebTouchEvent::touchesLengthCap)); | 243 static_cast<size_t>(WebTouchEvent::touchesLengthCap)); |
245 DCHECK_GT(result.touchesLength, 0U); | 244 DCHECK_GT(result.touchesLength, 0U); |
246 | 245 |
| 246 const float px_to_dp = 1.f / device_scale_factor; |
247 for (size_t i = 0; i < result.touchesLength; ++i) | 247 for (size_t i = 0; i < result.touchesLength; ++i) |
248 result.touches[i] = BuildWebTouchPoint(event, i, dpi_scale); | 248 result.touches[i] = BuildWebTouchPoint(event, i, px_to_dp); |
249 | 249 |
250 return result; | 250 return result; |
251 } | 251 } |
252 | 252 |
253 } // namespace content | 253 } // namespace content |
OLD | NEW |