Chromium Code Reviews| Index: ui/events/event.cc |
| diff --git a/ui/events/event.cc b/ui/events/event.cc |
| index 879f3e1e96647fb0447e0012c00bbef6195d0401..f3659017ddd5736d050a229311e3adf0cf0940c6 100644 |
| --- a/ui/events/event.cc |
| +++ b/ui/events/event.cc |
| @@ -501,6 +501,70 @@ void LocatedEvent::UpdateForRootTransform( |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| +// PointerDetails |
| + |
| +PointerDetails::PointerDetails() {} |
| + |
| +PointerDetails::PointerDetails(EventPointerType pointer_type, int pointer_id) |
| + : PointerDetails(pointer_type, |
| + 0.0f, |
| + 0.0f, |
| + std::numeric_limits<float>::quiet_NaN(), |
| + 0.0f, |
| + 0.0f, |
| + 0.0f, |
| + 0, |
| + pointer_id) {} |
| + |
| +PointerDetails::PointerDetails(EventPointerType pointer_type, |
| + float radius_x, |
| + float radius_y, |
| + float force, |
| + float tilt_x, |
| + float tilt_y, |
| + float tangential_pressure, |
| + int twist, |
| + int pointer_id) |
| + : pointer_type(pointer_type), |
| + // If we aren't provided with a radius on one axis, use the |
| + // information from the other axis. |
| + radius_x(radius_x > 0 ? radius_x : radius_y), |
| + radius_y(radius_y > 0 ? radius_y : radius_x), |
| + force(force), |
| + tilt_x(tilt_x), |
| + tilt_y(tilt_y), |
| + tangential_pressure(tangential_pressure), |
| + twist(twist), |
| + id(pointer_id) { |
| + if (pointer_id == PointerDetails::kUnknownPointerId) { |
| + id = pointer_type == EventPointerType::POINTER_TYPE_TOUCH |
| + ? 0 |
| + : PointerEvent::kMousePointerId; |
| + } |
| +} |
| + |
| +PointerDetails::PointerDetails(EventPointerType pointer_type, |
| + const gfx::Vector2d& pointer_offset, |
| + int pointer_id) |
| + : PointerDetails(pointer_type, pointer_id) { |
| + offset = pointer_offset; |
| +} |
| + |
| +PointerDetails::PointerDetails(const PointerDetails& other) |
| + : pointer_type(other.pointer_type), |
| + radius_x(other.radius_x), |
| + radius_y(other.radius_y), |
| + force(other.force), |
| + tilt_x(other.tilt_x), |
| + tilt_y(other.tilt_y), |
| + tangential_pressure(other.tangential_pressure), |
| + twist(other.twist), |
| + id(other.id), |
| + offset(other.offset) {} |
| + |
| +const int PointerDetails::kUnknownPointerId = -1; |
| + |
| +//////////////////////////////////////////////////////////////////////////////// |
| // MouseEvent |
| MouseEvent::MouseEvent(const base::NativeEvent& native_event) |
| @@ -766,7 +830,6 @@ const int MouseWheelEvent::kWheelDelta = 53; |
| TouchEvent::TouchEvent(const base::NativeEvent& native_event) |
| : LocatedEvent(native_event), |
|
mustaq
2017/02/27 16:02:26
I think the bug with pinch-zoom on CrOS (crbug.com
|
| - touch_id_(GetTouchId(native_event)), |
| unique_event_id_(ui::GetNextTouchEventId()), |
| rotation_angle_(GetTouchAngle(native_event)), |
| may_cause_scrolling_(false), |
| @@ -784,7 +847,6 @@ TouchEvent::TouchEvent(const base::NativeEvent& native_event) |
| TouchEvent::TouchEvent(const PointerEvent& pointer_event) |
| : LocatedEvent(pointer_event), |
| - touch_id_(pointer_event.pointer_id()), |
| unique_event_id_(ui::GetNextTouchEventId()), |
| rotation_angle_(0.0f), |
| may_cause_scrolling_(false), |
| @@ -822,12 +884,12 @@ TouchEvent::TouchEvent(EventType type, |
| gfx::PointF(location), |
| time_stamp, |
| 0), |
| - touch_id_(touch_id), |
| unique_event_id_(ui::GetNextTouchEventId()), |
| rotation_angle_(0.0f), |
| may_cause_scrolling_(false), |
| should_remove_native_touch_id_mapping_(false), |
| - pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH)) { |
| + pointer_details_( |
| + PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, touch_id)) { |
| latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| } |
| @@ -845,7 +907,6 @@ TouchEvent::TouchEvent(EventType type, |
| gfx::PointF(location), |
| time_stamp, |
| flags), |
| - touch_id_(touch_id), |
| unique_event_id_(ui::GetNextTouchEventId()), |
| rotation_angle_(angle), |
| may_cause_scrolling_(false), |
| @@ -855,14 +916,16 @@ TouchEvent::TouchEvent(EventType type, |
| radius_y, |
| force, |
| /* tilt_x */ 0.0f, |
| - /* tilt_y */ 0.0f)) { |
| + /* tilt_y */ 0.0f, |
| + /* tangential_pressure */ 0.0f, |
| + /* twist */ 0, |
| + touch_id)) { |
| latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| FixRotationAngle(); |
| } |
| TouchEvent::TouchEvent(const TouchEvent& copy) |
| : LocatedEvent(copy), |
| - touch_id_(copy.touch_id_), |
| unique_event_id_(copy.unique_event_id_), |
| rotation_angle_(copy.rotation_angle_), |
| may_cause_scrolling_(copy.may_cause_scrolling_), |
| @@ -934,7 +997,6 @@ bool PointerEvent::CanConvertFrom(const Event& event) { |
| PointerEvent::PointerEvent(const PointerEvent& pointer_event) |
| : LocatedEvent(pointer_event), |
| - pointer_id_(pointer_event.pointer_id()), |
| changed_button_flags_(pointer_event.changed_button_flags()), |
| details_(pointer_event.pointer_details()) { |
| if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH) |
| @@ -947,7 +1009,6 @@ PointerEvent::PointerEvent(const PointerEvent& pointer_event) |
| PointerEvent::PointerEvent(const MouseEvent& mouse_event) |
| : LocatedEvent(mouse_event), |
| - pointer_id_(kMousePointerId), |
| changed_button_flags_(mouse_event.changed_button_flags()), |
| details_(mouse_event.pointer_details()) { |
| DCHECK(CanConvertFrom(mouse_event)); |
| @@ -981,7 +1042,8 @@ PointerEvent::PointerEvent(const MouseEvent& mouse_event) |
| case ET_MOUSEWHEEL: |
| SetType(ET_POINTER_WHEEL_CHANGED); |
| details_ = PointerDetails(EventPointerType::POINTER_TYPE_MOUSE, |
| - mouse_event.AsMouseWheelEvent()->offset()); |
| + mouse_event.AsMouseWheelEvent()->offset(), |
| + mouse_event.pointer_details().id); |
| latency()->set_source_event_type(ui::SourceEventType::WHEEL); |
| break; |
| @@ -996,7 +1058,6 @@ PointerEvent::PointerEvent(const MouseEvent& mouse_event) |
| PointerEvent::PointerEvent(const TouchEvent& touch_event) |
| : LocatedEvent(touch_event), |
| - pointer_id_(touch_event.touch_id()), |
| changed_button_flags_(0), |
| details_(touch_event.pointer_details()) { |
| DCHECK(CanConvertFrom(touch_event)); |
| @@ -1036,9 +1097,9 @@ PointerEvent::PointerEvent(EventType type, |
| gfx::PointF(root_location), |
| time_stamp, |
| flags), |
| - pointer_id_(pointer_id), |
| changed_button_flags_(changed_button_flags), |
| details_(pointer_details) { |
| + details_.id = pointer_id; |
| if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH) |
| latency()->set_source_event_type(ui::SourceEventType::TOUCH); |
| else if (type == ET_POINTER_WHEEL_CHANGED) |