| Index: ui/events/x/events_x.cc
|
| diff --git a/ui/events/x/events_x.cc b/ui/events/x/events_x.cc
|
| index 5a23b08129b9f4e28ce215287fdc358bf48e25ec..50855b1891df312c0e86633c89d4da8695e3518f 100644
|
| --- a/ui/events/x/events_x.cc
|
| +++ b/ui/events/x/events_x.cc
|
| @@ -112,6 +112,52 @@ class XModifierStateWatcher{
|
| DISALLOW_COPY_AND_ASSIGN(XModifierStateWatcher);
|
| };
|
|
|
| +double GetTouchParamFromXEvent(XEvent* xev,
|
| + ui::DeviceDataManagerX11::DataType val,
|
| + double default_value) {
|
| + ui::DeviceDataManagerX11::GetInstance()->GetEventData(*xev, val,
|
| + &default_value);
|
| + return default_value;
|
| +}
|
| +
|
| +void ScaleTouchRadius(XEvent* xev, double* radius) {
|
| + DCHECK_EQ(GenericEvent, xev->type);
|
| + XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev->xcookie.data);
|
| + ui::DeviceDataManagerX11::GetInstance()->ApplyTouchRadiusScale(xiev->sourceid,
|
| + radius);
|
| +}
|
| +
|
| +float GetTouchRadiusX(const base::NativeEvent& native_event) {
|
| + double radius =
|
| + GetTouchParamFromXEvent(native_event,
|
| + ui::DeviceDataManagerX11::DT_TOUCH_MAJOR, 0.0) /
|
| + 2.0;
|
| + ScaleTouchRadius(native_event, &radius);
|
| + return radius;
|
| +}
|
| +
|
| +float GetTouchRadiusY(const base::NativeEvent& native_event) {
|
| + double radius =
|
| + GetTouchParamFromXEvent(native_event,
|
| + ui::DeviceDataManagerX11::DT_TOUCH_MINOR, 0.0) /
|
| + 2.0;
|
| + ScaleTouchRadius(native_event, &radius);
|
| + return radius;
|
| +}
|
| +
|
| +float GetTouchForce(const base::NativeEvent& native_event) {
|
| + double force = 0.0;
|
| + force = GetTouchParamFromXEvent(
|
| + native_event, ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, 0.0);
|
| + unsigned int deviceid =
|
| + static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid;
|
| + // Force is normalized to fall into [0, 1]
|
| + if (!ui::DeviceDataManagerX11::GetInstance()->NormalizeData(
|
| + deviceid, ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, &force))
|
| + force = 0.0;
|
| + return force;
|
| +}
|
| +
|
| // Detects if a touch event is a driver-generated 'special event'.
|
| // A 'special event' is a touch event with maximum radius and pressure at
|
| // location (0, 0).
|
| @@ -124,14 +170,14 @@ bool TouchEventIsGeneratedHack(const base::NativeEvent& native_event) {
|
| event->evtype == XI_TouchEnd);
|
|
|
| // Force is normalized to [0, 1].
|
| - if (ui::GetTouchForce(native_event) < 1.0f)
|
| + if (GetTouchForce(native_event) < 1.0f)
|
| return false;
|
|
|
| if (ui::EventLocationFromNative(native_event) != gfx::Point())
|
| return false;
|
|
|
| // Radius is in pixels, and the valuator is the diameter in pixels.
|
| - double radius = ui::GetTouchRadiusX(native_event), min, max;
|
| + double radius = GetTouchRadiusX(native_event), min, max;
|
| unsigned int deviceid =
|
| static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid;
|
| if (!ui::DeviceDataManagerX11::GetInstance()->GetDataRange(
|
| @@ -279,21 +325,6 @@ ui::EventType GetTouchEventType(const base::NativeEvent& native_event) {
|
| return ui::ET_UNKNOWN;
|
| }
|
|
|
| -double GetTouchParamFromXEvent(XEvent* xev,
|
| - ui::DeviceDataManagerX11::DataType val,
|
| - double default_value) {
|
| - ui::DeviceDataManagerX11::GetInstance()->GetEventData(
|
| - *xev, val, &default_value);
|
| - return default_value;
|
| -}
|
| -
|
| -void ScaleTouchRadius(XEvent* xev, double* radius) {
|
| - DCHECK_EQ(GenericEvent, xev->type);
|
| - XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev->xcookie.data);
|
| - ui::DeviceDataManagerX11::GetInstance()->ApplyTouchRadiusScale(
|
| - xiev->sourceid, radius);
|
| -}
|
| -
|
| unsigned int UpdateX11EventFlags(int ui_flags, unsigned int old_x_flags) {
|
| static struct {
|
| int ui;
|
| @@ -752,36 +783,19 @@ int GetTouchId(const base::NativeEvent& xev) {
|
| return slot;
|
| }
|
|
|
| -float GetTouchRadiusX(const base::NativeEvent& native_event) {
|
| - double radius = GetTouchParamFromXEvent(native_event,
|
| - ui::DeviceDataManagerX11::DT_TOUCH_MAJOR, 0.0) / 2.0;
|
| - ScaleTouchRadius(native_event, &radius);
|
| - return radius;
|
| -}
|
| -
|
| -float GetTouchRadiusY(const base::NativeEvent& native_event) {
|
| - double radius = GetTouchParamFromXEvent(native_event,
|
| - ui::DeviceDataManagerX11::DT_TOUCH_MINOR, 0.0) / 2.0;
|
| - ScaleTouchRadius(native_event, &radius);
|
| - return radius;
|
| -}
|
|
|
| float GetTouchAngle(const base::NativeEvent& native_event) {
|
| return GetTouchParamFromXEvent(native_event,
|
| ui::DeviceDataManagerX11::DT_TOUCH_ORIENTATION, 0.0) / 2.0;
|
| }
|
|
|
| -float GetTouchForce(const base::NativeEvent& native_event) {
|
| - double force = 0.0;
|
| - force = GetTouchParamFromXEvent(native_event,
|
| - ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, 0.0);
|
| - unsigned int deviceid =
|
| - static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid;
|
| - // Force is normalized to fall into [0, 1]
|
| - if (!ui::DeviceDataManagerX11::GetInstance()->NormalizeData(
|
| - deviceid, ui::DeviceDataManagerX11::DT_TOUCH_PRESSURE, &force))
|
| - force = 0.0;
|
| - return force;
|
| +PointerDetails GetTouchPointerDetailsFromNative(
|
| + const base::NativeEvent& native_event) {
|
| + return PointerDetails(
|
| + EventPointerType::POINTER_TYPE_TOUCH, GetTouchRadiusX(native_event),
|
| + GetTouchRadiusY(native_event), GetTouchForce(native_event),
|
| + /* tilt_x */ 0.f,
|
| + /* tilt_y */ 0.f);
|
| }
|
|
|
| bool GetScrollOffsets(const base::NativeEvent& native_event,
|
|
|