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:
Luna Wei 2022-10-14 15:10:19 -07:00 коммит произвёл Facebook GitHub Bot
Родитель 6733ee1358
Коммит 629e8e025f
2 изменённых файлов: 60 добавлений и 7 удалений

Просмотреть файл

@ -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;
}
}