Add width, height, detail props
Summary: Changelog: [Internal] Add more properties to PointerEvent, ensure all web platform tests are passing Reviewed By: mdvacca Differential Revision: D40314330 fbshipit-source-id: 071683f26f5a1e17d7ea49ac022c0ca23b6f9947
This commit is contained in:
Родитель
6733ee1358
Коммит
629e8e025f
|
@ -154,7 +154,6 @@ public class PointerEvent extends Event<PointerEvent> {
|
|||
|
||||
// https://www.w3.org/TR/pointerevents/#pointerevent-interface
|
||||
pointerEvent.putDouble("pointerId", pointerId);
|
||||
pointerEvent.putDouble("pressure", mMotionEvent.getPressure(index));
|
||||
|
||||
String pointerType = PointerEventHelper.getW3CPointerType(mMotionEvent.getToolType(index));
|
||||
pointerEvent.putString("pointerType", pointerType);
|
||||
|
@ -188,17 +187,29 @@ public class PointerEvent extends Event<PointerEvent> {
|
|||
pointerEvent.putInt("target", this.getViewTag());
|
||||
pointerEvent.putDouble("timestamp", this.getTimestampMs());
|
||||
|
||||
pointerEvent.putInt("detail", 0);
|
||||
pointerEvent.putDouble("tiltX", 0);
|
||||
pointerEvent.putDouble("tiltY", 0);
|
||||
|
||||
if (pointerType.equals(PointerEventHelper.POINTER_TYPE_MOUSE)) {
|
||||
pointerEvent.putDouble("width", 1);
|
||||
pointerEvent.putDouble("height", 1);
|
||||
pointerEvent.putDouble("tiltX", 0);
|
||||
pointerEvent.putDouble("tiltY", 0);
|
||||
} else {
|
||||
float majorAxis = PixelUtil.toDIPFromPixel(mMotionEvent.getTouchMajor(index));
|
||||
pointerEvent.putDouble("width", majorAxis);
|
||||
pointerEvent.putDouble("height", majorAxis);
|
||||
}
|
||||
|
||||
int buttons = mMotionEvent.getButtonState();
|
||||
pointerEvent.putInt("buttons", buttons);
|
||||
int buttonState = mMotionEvent.getButtonState();
|
||||
pointerEvent.putInt(
|
||||
"button", PointerEventHelper.getButtonChange(mEventState.getLastButtonState(), buttons));
|
||||
"button",
|
||||
PointerEventHelper.getButtonChange(
|
||||
pointerType, mEventState.getLastButtonState(), buttonState));
|
||||
pointerEvent.putInt(
|
||||
"buttons", PointerEventHelper.getButtons(mEventName, pointerType, buttonState));
|
||||
|
||||
pointerEvent.putDouble(
|
||||
"pressure", PointerEventHelper.getPressure(pointerEvent.getInt("buttons"), mEventName));
|
||||
|
||||
return pointerEvent;
|
||||
}
|
||||
|
|
|
@ -76,8 +76,25 @@ public class PointerEventHelper {
|
|||
}
|
||||
}
|
||||
|
||||
// https://w3c.github.io/pointerevents/#the-buttons-property
|
||||
public static int getButtons(String eventName, String pointerType, int buttonState) {
|
||||
if (isExitEvent(eventName)) {
|
||||
return 0;
|
||||
}
|
||||
if (POINTER_TYPE_TOUCH.equals(pointerType)) {
|
||||
return 1;
|
||||
}
|
||||
return buttonState;
|
||||
}
|
||||
|
||||
// https://w3c.github.io/pointerevents/#the-button-property
|
||||
public static int getButtonChange(int lastButtonState, int currentButtonState) {
|
||||
public static int getButtonChange(
|
||||
String pointerType, int lastButtonState, int currentButtonState) {
|
||||
// Always return 0 for touch
|
||||
if (POINTER_TYPE_TOUCH.equals(pointerType)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int changedMask = currentButtonState ^ lastButtonState;
|
||||
if (changedMask == 0) {
|
||||
return -1;
|
||||
|
@ -170,4 +187,29 @@ public class PointerEventHelper {
|
|||
int source = motionEvent.getSource();
|
||||
return source == InputDevice.SOURCE_MOUSE || source == InputDevice.SOURCE_CLASS_POINTER;
|
||||
}
|
||||
|
||||
public static boolean isExitEvent(String eventName) {
|
||||
switch (eventName) {
|
||||
case POINTER_UP:
|
||||
case POINTER_LEAVE:
|
||||
case POINTER_OUT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// https://w3c.github.io/pointerevents/#dom-pointerevent-pressure
|
||||
public static double getPressure(int buttonState, String eventName) {
|
||||
if (isExitEvent(eventName)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Assume we don't support pressure on our platform for now
|
||||
// For hardware and platforms that do not support pressure,
|
||||
// the value MUST be 0.5 when in the active buttons state
|
||||
// and 0 otherwise.
|
||||
boolean inActiveButtonState = buttonState != 0;
|
||||
return inActiveButtonState ? 0.5 : 0;
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче