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 c24c50a5c93291789a60bea3395d463ab5c2c692..8d6a0b5568ca6228527030965ca1abe59352d2f6 100644 |
--- a/ui/events/ozone/evdev/touch_event_converter_evdev.cc |
+++ b/ui/events/ozone/evdev/touch_event_converter_evdev.cc |
@@ -30,10 +30,6 @@ |
namespace { |
-// Number is determined empirically. |
-// TODO(rjkroege): Configure this per device. |
-const float kFingerWidth = 25.f; |
- |
struct TouchCalibration { |
int bezel_left; |
int bezel_right; |
@@ -68,6 +64,10 @@ float TuxelsToPixels(float val, |
return min_pixels + (val - min_tuxels) * num_pixels / num_tuxels; |
} |
+float TuxelToPixelSize(float val, float num_tuxels, float num_pixels) { |
+ return val * num_pixels / num_tuxels; |
+} |
+ |
} // namespace |
namespace ui { |
@@ -201,7 +201,16 @@ void TouchEventConverterEvdev::ProcessAbs(const input_event& input) { |
switch (input.code) { |
case ABS_MT_TOUCH_MAJOR: |
altered_slots_.set(current_slot_); |
- events_[current_slot_].major_ = input.value; |
+ // TODO(spang): If we have all of major, minor, and orientation, |
+ // we can scale the ellipse correctly. However on the Pixel we get |
+ // neither minor nor orientation, so this is all we can do. |
+ events_[current_slot_].radius_x_ = |
+ TuxelToPixelSize(input.value, x_num_tuxels_, x_num_pixels_) / 2.0f; |
+ break; |
+ case ABS_MT_TOUCH_MINOR: |
+ altered_slots_.set(current_slot_); |
+ events_[current_slot_].radius_y_ = |
+ TuxelToPixelSize(input.value, y_num_tuxels_, y_num_pixels_) / 2.0f; |
break; |
case ABS_MT_POSITION_X: |
altered_slots_.set(current_slot_); |
@@ -285,8 +294,8 @@ void TouchEventConverterEvdev::ReportEvents(base::TimeDelta delta) { |
/* flags */ 0, |
/* touch_id */ events_[i].finger_, |
delta, |
- events_[i].pressure_ * kFingerWidth, |
- events_[i].pressure_ * kFingerWidth, |
+ /* radius_x */ events_[i].radius_x_, |
+ /* radius_y */ events_[i].radius_y_, |
/* angle */ 0., |
events_[i].pressure_); |
DispatchEventToCallback(&evt); |