| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/events/event.h" | 5 #include "ui/events/event.h" |
| 6 | 6 |
| 7 #if defined(USE_X11) | 7 #if defined(USE_X11) |
| 8 #include <X11/extensions/XInput2.h> | 8 #include <X11/extensions/XInput2.h> |
| 9 #include <X11/keysym.h> | 9 #include <X11/keysym.h> |
| 10 #include <X11/Xlib.h> | 10 #include <X11/Xlib.h> |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 reversed_root_transform.TransformPoint(&p); | 312 reversed_root_transform.TransformPoint(&p); |
| 313 location_ = p.AsPointF(); | 313 location_ = p.AsPointF(); |
| 314 root_location_ = location_; | 314 root_location_ = location_; |
| 315 } | 315 } |
| 316 | 316 |
| 317 //////////////////////////////////////////////////////////////////////////////// | 317 //////////////////////////////////////////////////////////////////////////////// |
| 318 // MouseEvent | 318 // MouseEvent |
| 319 | 319 |
| 320 MouseEvent::MouseEvent(const base::NativeEvent& native_event) | 320 MouseEvent::MouseEvent(const base::NativeEvent& native_event) |
| 321 : LocatedEvent(native_event), | 321 : LocatedEvent(native_event), |
| 322 changed_button_flags_( | 322 changed_button_flags_(GetChangedMouseButtonFlagsFromNative(native_event)), |
| 323 GetChangedMouseButtonFlagsFromNative(native_event)) { | 323 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_MOUSE)) { |
| 324 if (type() == ET_MOUSE_PRESSED || type() == ET_MOUSE_RELEASED) | 324 if (type() == ET_MOUSE_PRESSED || type() == ET_MOUSE_RELEASED) |
| 325 SetClickCount(GetRepeatCount(*this)); | 325 SetClickCount(GetRepeatCount(*this)); |
| 326 } | 326 } |
| 327 | 327 |
| 328 MouseEvent::MouseEvent(EventType type, | 328 MouseEvent::MouseEvent(EventType type, |
| 329 const gfx::PointF& location, | 329 const gfx::PointF& location, |
| 330 const gfx::PointF& root_location, | 330 const gfx::PointF& root_location, |
| 331 base::TimeDelta time_stamp, | 331 base::TimeDelta time_stamp, |
| 332 int flags, | 332 int flags, |
| 333 int changed_button_flags) | 333 int changed_button_flags) |
| 334 : LocatedEvent(type, location, root_location, time_stamp, flags), | 334 : LocatedEvent(type, location, root_location, time_stamp, flags), |
| 335 changed_button_flags_(changed_button_flags) { | 335 changed_button_flags_(changed_button_flags), |
| 336 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_MOUSE)) { |
| 336 if (this->type() == ET_MOUSE_MOVED && IsAnyButton()) | 337 if (this->type() == ET_MOUSE_MOVED && IsAnyButton()) |
| 337 SetType(ET_MOUSE_DRAGGED); | 338 SetType(ET_MOUSE_DRAGGED); |
| 338 } | 339 } |
| 339 | 340 |
| 340 // static | 341 // static |
| 341 bool MouseEvent::IsRepeatedClickEvent( | 342 bool MouseEvent::IsRepeatedClickEvent( |
| 342 const MouseEvent& event1, | 343 const MouseEvent& event1, |
| 343 const MouseEvent& event2) { | 344 const MouseEvent& event2) { |
| 344 // These values match the Windows defaults. | 345 // These values match the Windows defaults. |
| 345 static const int kDoubleClickTimeMS = 500; | 346 static const int kDoubleClickTimeMS = 500; |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 const int MouseWheelEvent::kWheelDelta = 53; | 508 const int MouseWheelEvent::kWheelDelta = 53; |
| 508 #endif | 509 #endif |
| 509 | 510 |
| 510 //////////////////////////////////////////////////////////////////////////////// | 511 //////////////////////////////////////////////////////////////////////////////// |
| 511 // TouchEvent | 512 // TouchEvent |
| 512 | 513 |
| 513 TouchEvent::TouchEvent(const base::NativeEvent& native_event) | 514 TouchEvent::TouchEvent(const base::NativeEvent& native_event) |
| 514 : LocatedEvent(native_event), | 515 : LocatedEvent(native_event), |
| 515 touch_id_(GetTouchId(native_event)), | 516 touch_id_(GetTouchId(native_event)), |
| 516 unique_event_id_(ui::GetNextTouchEventId()), | 517 unique_event_id_(ui::GetNextTouchEventId()), |
| 517 radius_x_(GetTouchRadiusX(native_event)), | |
| 518 radius_y_(GetTouchRadiusY(native_event)), | |
| 519 rotation_angle_(GetTouchAngle(native_event)), | 518 rotation_angle_(GetTouchAngle(native_event)), |
| 520 force_(GetTouchForce(native_event)), | |
| 521 may_cause_scrolling_(false), | 519 may_cause_scrolling_(false), |
| 522 should_remove_native_touch_id_mapping_(false) { | 520 should_remove_native_touch_id_mapping_(false), |
| 521 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, |
| 522 GetTouchRadiusX(native_event), |
| 523 GetTouchRadiusY(native_event), |
| 524 GetTouchForce(native_event), |
| 525 /* tilt_x */ 0.0f, |
| 526 /* tilt_y */ 0.0f)) { |
| 523 latency()->AddLatencyNumberWithTimestamp( | 527 latency()->AddLatencyNumberWithTimestamp( |
| 524 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0, | 528 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0, |
| 525 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 1); | 529 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 1); |
| 526 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | 530 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| 527 | 531 |
| 528 FixRotationAngle(); | 532 FixRotationAngle(); |
| 529 if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED) | 533 if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED) |
| 530 should_remove_native_touch_id_mapping_ = true; | 534 should_remove_native_touch_id_mapping_ = true; |
| 531 } | 535 } |
| 532 | 536 |
| 533 TouchEvent::TouchEvent(EventType type, | 537 TouchEvent::TouchEvent(EventType type, |
| 534 const gfx::PointF& location, | 538 const gfx::PointF& location, |
| 535 int touch_id, | 539 int touch_id, |
| 536 base::TimeDelta time_stamp) | 540 base::TimeDelta time_stamp) |
| 537 : LocatedEvent(type, location, location, time_stamp, 0), | 541 : LocatedEvent(type, location, location, time_stamp, 0), |
| 538 touch_id_(touch_id), | 542 touch_id_(touch_id), |
| 539 unique_event_id_(ui::GetNextTouchEventId()), | 543 unique_event_id_(ui::GetNextTouchEventId()), |
| 540 radius_x_(0.0f), | |
| 541 radius_y_(0.0f), | |
| 542 rotation_angle_(0.0f), | 544 rotation_angle_(0.0f), |
| 543 force_(0.0f), | |
| 544 may_cause_scrolling_(false), | 545 may_cause_scrolling_(false), |
| 545 should_remove_native_touch_id_mapping_(false) { | 546 should_remove_native_touch_id_mapping_(false), |
| 547 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH)) { |
| 546 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | 548 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| 547 } | 549 } |
| 548 | 550 |
| 549 TouchEvent::TouchEvent(EventType type, | 551 TouchEvent::TouchEvent(EventType type, |
| 550 const gfx::PointF& location, | 552 const gfx::PointF& location, |
| 551 int flags, | 553 int flags, |
| 552 int touch_id, | 554 int touch_id, |
| 553 base::TimeDelta time_stamp, | 555 base::TimeDelta time_stamp, |
| 554 float radius_x, | 556 float radius_x, |
| 555 float radius_y, | 557 float radius_y, |
| 556 float angle, | 558 float angle, |
| 557 float force) | 559 float force) |
| 558 : LocatedEvent(type, location, location, time_stamp, flags), | 560 : LocatedEvent(type, location, location, time_stamp, flags), |
| 559 touch_id_(touch_id), | 561 touch_id_(touch_id), |
| 560 unique_event_id_(ui::GetNextTouchEventId()), | 562 unique_event_id_(ui::GetNextTouchEventId()), |
| 561 radius_x_(radius_x), | |
| 562 radius_y_(radius_y), | |
| 563 rotation_angle_(angle), | 563 rotation_angle_(angle), |
| 564 force_(force), | |
| 565 may_cause_scrolling_(false), | 564 may_cause_scrolling_(false), |
| 566 should_remove_native_touch_id_mapping_(false) { | 565 should_remove_native_touch_id_mapping_(false), |
| 566 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, |
| 567 radius_x, |
| 568 radius_y, |
| 569 force, |
| 570 /* tilt_x */ 0.0f, |
| 571 /* tilt_y */ 0.0f)) { |
| 567 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); | 572 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); |
| 568 FixRotationAngle(); | 573 FixRotationAngle(); |
| 569 } | 574 } |
| 570 | 575 |
| 571 TouchEvent::TouchEvent(const TouchEvent& copy) | 576 TouchEvent::TouchEvent(const TouchEvent& copy) |
| 572 : LocatedEvent(copy), | 577 : LocatedEvent(copy), |
| 573 touch_id_(copy.touch_id_), | 578 touch_id_(copy.touch_id_), |
| 574 unique_event_id_(copy.unique_event_id_), | 579 unique_event_id_(copy.unique_event_id_), |
| 575 radius_x_(copy.radius_x_), | |
| 576 radius_y_(copy.radius_y_), | |
| 577 rotation_angle_(copy.rotation_angle_), | 580 rotation_angle_(copy.rotation_angle_), |
| 578 force_(copy.force_), | |
| 579 may_cause_scrolling_(copy.may_cause_scrolling_), | 581 may_cause_scrolling_(copy.may_cause_scrolling_), |
| 580 should_remove_native_touch_id_mapping_(false) { | 582 should_remove_native_touch_id_mapping_(false), |
| 583 pointer_details_(copy.pointer_details_) { |
| 581 // Copied events should not remove touch id mapping, as this either causes the | 584 // Copied events should not remove touch id mapping, as this either causes the |
| 582 // mapping to be lost before the initial event has finished dispatching, or | 585 // mapping to be lost before the initial event has finished dispatching, or |
| 583 // the copy to attempt to remove the mapping from a null |native_event_|. | 586 // the copy to attempt to remove the mapping from a null |native_event_|. |
| 584 } | 587 } |
| 585 | 588 |
| 586 TouchEvent::~TouchEvent() { | 589 TouchEvent::~TouchEvent() { |
| 587 // In ctor TouchEvent(native_event) we call GetTouchId() which in X11 | 590 // In ctor TouchEvent(native_event) we call GetTouchId() which in X11 |
| 588 // platform setups the tracking_id to slot mapping. So in dtor here, | 591 // platform setups the tracking_id to slot mapping. So in dtor here, |
| 589 // if this touch event is a release event, we clear the mapping accordingly. | 592 // if this touch event is a release event, we clear the mapping accordingly. |
| 590 if (should_remove_native_touch_id_mapping_) { | 593 if (should_remove_native_touch_id_mapping_) { |
| 591 DCHECK(type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED); | 594 DCHECK(type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED); |
| 592 if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED) | 595 if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED) |
| 593 ClearTouchIdIfReleased(native_event()); | 596 ClearTouchIdIfReleased(native_event()); |
| 594 } | 597 } |
| 595 } | 598 } |
| 596 | 599 |
| 597 void TouchEvent::UpdateForRootTransform( | 600 void TouchEvent::UpdateForRootTransform( |
| 598 const gfx::Transform& inverted_root_transform) { | 601 const gfx::Transform& inverted_root_transform) { |
| 599 LocatedEvent::UpdateForRootTransform(inverted_root_transform); | 602 LocatedEvent::UpdateForRootTransform(inverted_root_transform); |
| 600 gfx::DecomposedTransform decomp; | 603 gfx::DecomposedTransform decomp; |
| 601 bool success = gfx::DecomposeTransform(&decomp, inverted_root_transform); | 604 bool success = gfx::DecomposeTransform(&decomp, inverted_root_transform); |
| 602 DCHECK(success); | 605 DCHECK(success); |
| 603 if (decomp.scale[0]) | 606 if (decomp.scale[0]) |
| 604 radius_x_ *= decomp.scale[0]; | 607 pointer_details()->set_radius_x(pointer_details()->radius_x() * |
| 608 decomp.scale[0]); |
| 605 if (decomp.scale[1]) | 609 if (decomp.scale[1]) |
| 606 radius_y_ *= decomp.scale[1]; | 610 pointer_details()->set_radius_y(pointer_details()->radius_y() * |
| 611 decomp.scale[1]); |
| 607 } | 612 } |
| 608 | 613 |
| 609 void TouchEvent::DisableSynchronousHandling() { | 614 void TouchEvent::DisableSynchronousHandling() { |
| 610 DispatcherApi dispatcher_api(this); | 615 DispatcherApi dispatcher_api(this); |
| 611 dispatcher_api.set_result( | 616 dispatcher_api.set_result( |
| 612 static_cast<EventResult>(result() | ER_DISABLE_SYNC_HANDLING)); | 617 static_cast<EventResult>(result() | ER_DISABLE_SYNC_HANDLING)); |
| 613 } | 618 } |
| 614 | 619 |
| 615 void TouchEvent::FixRotationAngle() { | 620 void TouchEvent::FixRotationAngle() { |
| 616 while (rotation_angle_ < 0) | 621 while (rotation_angle_ < 0) |
| (...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 973 gfx::PointF(x, y), | 978 gfx::PointF(x, y), |
| 974 time_stamp, | 979 time_stamp, |
| 975 flags | EF_FROM_TOUCH), | 980 flags | EF_FROM_TOUCH), |
| 976 details_(details) { | 981 details_(details) { |
| 977 } | 982 } |
| 978 | 983 |
| 979 GestureEvent::~GestureEvent() { | 984 GestureEvent::~GestureEvent() { |
| 980 } | 985 } |
| 981 | 986 |
| 982 } // namespace ui | 987 } // namespace ui |
| OLD | NEW |