diff options
-rw-r--r-- | ui/events/ozone/evdev/touch_event_converter_evdev.cc | 5 | ||||
-rw-r--r-- | ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc | 45 |
2 files changed, 46 insertions, 4 deletions
diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/ui/events/ozone/evdev/touch_event_converter_evdev.cc index b460b25..2a5b37f 100644 --- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc +++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc @@ -203,7 +203,6 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { altered_slots_.set(current_slot_); events_[current_slot_].major_ = input.value; break; - case ABS_X: case ABS_MT_POSITION_X: altered_slots_.set(current_slot_); events_[current_slot_].x_ = TuxelsToPixels(input.value, @@ -212,7 +211,6 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { x_min_pixels_, x_num_pixels_); break; - case ABS_Y: case ABS_MT_POSITION_Y: altered_slots_.set(current_slot_); events_[current_slot_].y_ = TuxelsToPixels(input.value, @@ -231,7 +229,6 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { } break; case ABS_MT_PRESSURE: - case ABS_PRESSURE: altered_slots_.set(current_slot_); events_[current_slot_].pressure_ = input.value - pressure_min_; events_[current_slot_].pressure_ /= pressure_max_ - pressure_min_; @@ -241,7 +238,7 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { altered_slots_.set(current_slot_); break; default: - NOTIMPLEMENTED() << "invalid code for EV_ABS: " << input.code; + DVLOG(5) << "unhandled code for EV_ABS: " << input.code; } } diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc b/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc index ce2957a..a8ce25f 100644 --- a/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc +++ b/ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc @@ -479,3 +479,48 @@ TEST_F(TouchEventConverterEvdevTest, Unsync) { dev->ReadNow(); EXPECT_EQ(2u, dev->size()); } + +// crbug.com/407386 +TEST_F(TouchEventConverterEvdevTest, + DontChangeMultitouchPositionFromLegacyAxes) { + ui::MockTouchEventConverterEvdev* dev = device(); + + struct input_event mock_kernel_queue[] = { + {{0, 0}, EV_ABS, ABS_MT_SLOT, 0}, + {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 100}, + {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 999}, + {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 888}, + {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 55}, + {{0, 0}, EV_ABS, ABS_MT_SLOT, 1}, + {{0, 0}, EV_ABS, ABS_MT_TRACKING_ID, 200}, + {{0, 0}, EV_ABS, ABS_MT_PRESSURE, 44}, + {{0, 0}, EV_ABS, ABS_MT_POSITION_X, 777}, + {{0, 0}, EV_ABS, ABS_MT_POSITION_Y, 666}, + {{0, 0}, EV_ABS, ABS_X, 999}, + {{0, 0}, EV_ABS, ABS_Y, 888}, + {{0, 0}, EV_ABS, ABS_PRESSURE, 55}, + {{0, 0}, EV_SYN, SYN_REPORT, 0}, + }; + + // Check that two events are generated. + dev->ConfigureReadMock(mock_kernel_queue, arraysize(mock_kernel_queue), 0); + dev->ReadNow(); + + const unsigned int kExpectedEventCount = 2; + EXPECT_EQ(kExpectedEventCount, dev->size()); + if (kExpectedEventCount != dev->size()) + return; + + ui::TouchEvent* ev0 = dev->event(0); + ui::TouchEvent* ev1 = dev->event(1); + + EXPECT_EQ(0, ev0->touch_id()); + EXPECT_EQ(999, ev0->x()); + EXPECT_EQ(888, ev0->y()); + EXPECT_FLOAT_EQ(0.8333333f, ev0->force()); + + EXPECT_EQ(1, ev1->touch_id()); + EXPECT_EQ(777, ev1->x()); + EXPECT_EQ(666, ev1->y()); + EXPECT_FLOAT_EQ(0.4666666f, ev1->force()); +} |