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

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

Issue 2263693003: Add palm suppression feature to EventConverterEvdev (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@stylus
Patch Set: added support for MT_TOOL_PALM to cancel events Created 4 years, 4 months 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
« no previous file with comments | « ui/events/ozone/evdev/touch_event_converter_evdev.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 e0c9d2d2fa6a656c34ad10f7a2f0ab12df913874..574a540693edd242bdd2fa56c04d63a10a87054a 100644
--- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc
+++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc
@@ -31,6 +31,7 @@
#include "ui/events/event_switches.h"
#include "ui/events/event_utils.h"
#include "ui/events/ozone/evdev/device_event_dispatcher_evdev.h"
+#include "ui/events/ozone/evdev/palm_suppression_filter.h"
#include "ui/events/ozone/evdev/touch_evdev_types.h"
#include "ui/events/ozone/evdev/touch_noise/touch_noise_finder.h"
#include "ui/ozone/public/input_controller.h"
@@ -113,7 +114,8 @@ TouchEventConverterEvdev::TouchEventConverterEvdev(
devinfo.name(),
devinfo.vendor_id(),
devinfo.product_id()),
- dispatcher_(dispatcher) {
+ dispatcher_(dispatcher),
+ palm_filter_(nullptr) {
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kExtraTouchNoiseFiltering)) {
touch_noise_finder_.reset(new TouchNoiseFinder);
@@ -126,6 +128,7 @@ TouchEventConverterEvdev::~TouchEventConverterEvdev() {
void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) {
has_mt_ = info.HasMultitouch();
+ has_pen_ = info.HasKeyEvent(BTN_TOOL_PEN);
if (has_mt_) {
pressure_min_ = info.GetAbsMinimum(ABS_MT_PRESSURE);
@@ -205,6 +208,9 @@ void TouchEventConverterEvdev::Initialize(const EventDeviceInfo& info) {
events_[0].pressure = 0;
events_[0].tool_code = 0;
}
+
+ if (palm_filter_)
+ palm_filter_->Reset();
}
void TouchEventConverterEvdev::Reinitialize() {
@@ -224,6 +230,10 @@ bool TouchEventConverterEvdev::HasTouchscreen() const {
return true;
}
+bool TouchEventConverterEvdev::HasPen() const {
+ return has_pen_;
+}
+
gfx::Size TouchEventConverterEvdev::GetTouchscreenSize() const {
return gfx::Size(x_num_tuxels_, y_num_tuxels_);
}
@@ -239,6 +249,8 @@ void TouchEventConverterEvdev::OnEnabled() {
void TouchEventConverterEvdev::OnDisabled() {
ReleaseTouches();
ReleaseButtons();
+ if (palm_filter_)
+ palm_filter_->Reset();
}
void TouchEventConverterEvdev::OnFileCanReadWithoutBlocking(int fd) {
@@ -281,6 +293,11 @@ void TouchEventConverterEvdev::SetTouchEventLoggingEnabled(bool enabled) {
touch_logging_enabled_ = enabled;
}
+void TouchEventConverterEvdev::SetPalmSuppressionFilter(
+ PalmSuppressionFilter* palm_filter) {
+ palm_filter_ = palm_filter;
+}
+
void TouchEventConverterEvdev::ProcessMultitouchEvent(
const input_event& input) {
if (touch_logging_enabled_)
@@ -352,6 +369,7 @@ void TouchEventConverterEvdev::ProcessKey(const input_event& input) {
} else {
events_[current_slot_].tool_code = 0;
}
+ events_[current_slot_].altered = true;
break;
default:
NOTIMPLEMENTED() << "invalid code for EV_KEY: " << input.code;
@@ -390,6 +408,9 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) {
return;
}
break;
+ case ABS_MT_TOOL_TYPE:
+ if (input.value == MT_TOOL_PALM)
+ events_[current_slot_].is_palm = true;
default:
DVLOG(5) << "unhandled code for EV_ABS: " << input.code;
return;
@@ -417,6 +438,9 @@ EventType TouchEventConverterEvdev::GetEventTypeForTouch(
if (touch.cancelled)
return ET_UNKNOWN;
+ if (touch.is_palm)
+ return ET_TOUCH_CANCELLED;
+
if (touch_noise_finder_ && touch_noise_finder_->SlotHasNoise(touch.slot)) {
if (touch.touching && !touch.was_touching)
spang 2016/08/22 20:52:13 Do we need this same check so that a new slot does
denniskempin 2016/08/23 22:28:12 Done.
return ET_UNKNOWN;
@@ -432,9 +456,11 @@ 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));
+ TouchEventParams params(input_device_.id, event.slot, event_type,
+ gfx::PointF(event.x, event.y),
+ GetEventPointerDetails(event), timestamp);
+ if (!palm_filter_ || palm_filter_->FilterTouch(params))
+ dispatcher_->DispatchTouchEvent(params);
}
void TouchEventConverterEvdev::ReportStylusEvent(
@@ -475,6 +501,10 @@ void TouchEventConverterEvdev::ReportEvents(base::TimeTicks timestamp) {
if (!event->altered)
continue;
+ if (has_pen_ && palm_filter_) {
+ palm_filter_->EnableSuppression(event->tool_code > 0, timestamp);
+ }
+
if (event->tool_code > 0) {
ReportStylusEvent(*event, timestamp);
} else {
« no previous file with comments | « ui/events/ozone/evdev/touch_event_converter_evdev.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698