Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(186)

Unified Diff: ui/events/ozone/evdev/touch_event_converter_evdev.cc

Issue 2507503002: Use touch events to report stylus events (Closed)
Patch Set: I should pay attention... Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/events/ozone/evdev/touch_event_converter_evdev.cc
diff --git a/ui/events/ozone/evdev/touch_event_converter_evdev.cc b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
index 98483d30df2094fc1077b08478f638a06dcc4f01..c46608d938577b8a3ec79c290e71ab7be7ddf89b 100644
--- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc
+++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
@@ -78,23 +78,15 @@ int32_t AbsCodeToMtCode(int32_t code) {
}
}
-ui::PointerDetails GetEventPointerDetails(
- const ui::InProgressTouchEvdev& event) {
- ui::EventPointerType type;
- switch (event.tool_code) {
+ui::EventPointerType GetEventPointerType(int tool_code) {
+ switch (tool_code) {
case BTN_TOOL_PEN:
- type = ui::EventPointerType::POINTER_TYPE_PEN;
- break;
+ return ui::EventPointerType::POINTER_TYPE_PEN;
case BTN_TOOL_RUBBER:
- type = ui::EventPointerType::POINTER_TYPE_ERASER;
- break;
+ return ui::EventPointerType::POINTER_TYPE_ERASER;
default:
- type = ui::EventPointerType::POINTER_TYPE_TOUCH;
+ return ui::EventPointerType::POINTER_TYPE_TOUCH;
}
- return ui::PointerDetails(type, event.radius_x, event.radius_y,
- event.pressure,
- /* tilt_x */ 0.0f,
- /* tilt_y */ 0.0f);
}
const int kTrackingIdForUnusedSlot = -1;
@@ -328,7 +320,7 @@ void TouchEventConverterEvdev::EmulateMultitouchEvent(
if (emulated_event.code >= 0)
ProcessMultitouchEvent(emulated_event);
} else if (event.type == EV_KEY) {
- if (event.code == BTN_TOUCH ||
+ if (event.code == BTN_TOUCH || event.code == BTN_0 ||
(quirk_left_mouse_button_ && event.code == BTN_LEFT)) {
emulated_event.type = EV_ABS;
emulated_event.code = ABS_MT_TRACKING_ID;
@@ -357,11 +349,6 @@ void TouchEventConverterEvdev::ProcessKey(const input_event& input) {
break;
case BTN_TOOL_PEN:
case BTN_TOOL_RUBBER:
- // Do not change tool types while touching to prevent inconsistencies
- // from switching between Mouse and TouchEvents.
- if (events_[current_slot_].was_touching)
- break;
-
if (input.value > 0) {
events_[current_slot_].tool_code = input.code;
} else {
@@ -450,33 +437,12 @@ void TouchEventConverterEvdev::ReportTouchEvent(
const InProgressTouchEvdev& event,
EventType event_type,
base::TimeTicks timestamp) {
- dispatcher_->DispatchTouchEvent(TouchEventParams(
- input_device_.id, event.slot, event_type, gfx::PointF(event.x, event.y),
- GetEventPointerDetails(event), timestamp));
-}
-
-void TouchEventConverterEvdev::ReportStylusEvent(
- const InProgressTouchEvdev& event,
- base::TimeTicks timestamp) {
- if (event.btn_left.changed)
- ReportButton(BTN_LEFT, event.btn_left.down, event, timestamp);
- if (event.btn_right.changed)
- ReportButton(BTN_RIGHT, event.btn_right.down, event, timestamp);
- if (event.btn_middle.changed)
- ReportButton(BTN_MIDDLE, event.btn_middle.down, event, timestamp);
-
- dispatcher_->DispatchMouseMoveEvent(MouseMoveEventParams(
- input_device_.id, EF_DIRECT_INPUT, gfx::PointF(event.x, event.y),
- GetEventPointerDetails(event), timestamp));
-}
-
-void TouchEventConverterEvdev::ReportButton(unsigned int button,
- bool down,
- const InProgressTouchEvdev& event,
- base::TimeTicks timestamp) {
- dispatcher_->DispatchMouseButtonEvent(MouseButtonEventParams(
- input_device_.id, EF_DIRECT_INPUT, gfx::PointF(event.x, event.y), button,
- down, false /* allow_remap */, GetEventPointerDetails(event), timestamp));
+ ui::PointerDetails details(event.reported_tool_type, event.radius_x,
+ event.radius_y, event.pressure,
+ /* tilt_x */ 0.0f, /* tilt_y */ 0.0f);
+ dispatcher_->DispatchTouchEvent(
+ TouchEventParams(input_device_.id, event.slot, event_type,
+ gfx::PointF(event.x, event.y), details, timestamp));
}
void TouchEventConverterEvdev::ReportEvents(base::TimeTicks timestamp) {
@@ -499,13 +465,12 @@ void TouchEventConverterEvdev::ReportEvents(base::TimeTicks timestamp) {
if (touch_noise_finder_ && touch_noise_finder_->SlotHasNoise(event->slot))
event->cancelled = true;
- if (event->tool_code > 0) {
- ReportStylusEvent(*event, timestamp);
- } else {
- EventType event_type = GetEventTypeForTouch(*event);
- if (event_type != ET_UNKNOWN)
- ReportTouchEvent(*event, event_type, timestamp);
- }
+ EventType event_type = GetEventTypeForTouch(*event);
+ // The tool type is fixed with the touch pressed event and does not change.
+ if (event_type == ET_TOUCH_PRESSED)
+ event->reported_tool_type = GetEventPointerType(event->tool_code);
+ if (event_type != ET_UNKNOWN)
+ ReportTouchEvent(*event, event_type, timestamp);
event->was_cancelled = event->cancelled;
event->was_touching = event->touching;
« no previous file with comments | « ui/events/ozone/evdev/touch_event_converter_evdev.h ('k') | ui/events/ozone/evdev/touch_event_converter_evdev_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698