|
|
@ -156,7 +156,7 @@ static ImGuiKey ImGui_ImplAndroid_KeyCodeToImGuiKey(int32_t key_code) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent* input_event) |
|
|
|
int32_t ImGui_ImplAndroid_HandleInputEvent(const AInputEvent* input_event) |
|
|
|
{ |
|
|
|
ImGuiIO& io = ImGui::GetIO(); |
|
|
|
int32_t event_type = AInputEvent_getType(input_event); |
|
|
@ -221,25 +221,27 @@ int32_t ImGui_ImplAndroid_HandleInputEvent(AInputEvent* input_event) |
|
|
|
{ |
|
|
|
case AMOTION_EVENT_ACTION_DOWN: |
|
|
|
case AMOTION_EVENT_ACTION_UP: |
|
|
|
{ |
|
|
|
// Physical mouse buttons (and probably other physical devices) also invoke the actions AMOTION_EVENT_ACTION_DOWN/_UP,
|
|
|
|
// but we have to process them separately to identify the actual button pressed. This is done below via
|
|
|
|
// AMOTION_EVENT_ACTION_BUTTON_PRESS/_RELEASE. Here, we only process "FINGER" input (and "UNKNOWN", as a fallback).
|
|
|
|
if((AMotionEvent_getToolType(input_event, event_pointer_index) == AMOTION_EVENT_TOOL_TYPE_FINGER) |
|
|
|
|| (AMotionEvent_getToolType(input_event, event_pointer_index) == AMOTION_EVENT_TOOL_TYPE_UNKNOWN)) |
|
|
|
int tool_type = AMotionEvent_getToolType(input_event, event_pointer_index); |
|
|
|
if (tool_type == AMOTION_EVENT_TOOL_TYPE_FINGER || tool_type == == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) |
|
|
|
{ |
|
|
|
io.AddMousePosEvent(AMotionEvent_getX(input_event, event_pointer_index), AMotionEvent_getY(input_event, event_pointer_index)); |
|
|
|
io.AddMouseButtonEvent(0, event_action == AMOTION_EVENT_ACTION_DOWN); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
case AMOTION_EVENT_ACTION_BUTTON_PRESS: |
|
|
|
case AMOTION_EVENT_ACTION_BUTTON_RELEASE: |
|
|
|
{ |
|
|
|
int32_t button_state = AMotionEvent_getButtonState(input_event); |
|
|
|
io.AddMouseButtonEvent(0, (button_state & AMOTION_EVENT_BUTTON_PRIMARY) != 0); |
|
|
|
io.AddMouseButtonEvent(1, (button_state & AMOTION_EVENT_BUTTON_SECONDARY) != 0); |
|
|
|
io.AddMouseButtonEvent(2, (button_state & AMOTION_EVENT_BUTTON_TERTIARY) != 0); |
|
|
|
} |
|
|
|
{ |
|
|
|
int32_t button_state = AMotionEvent_getButtonState(input_event); |
|
|
|
io.AddMouseButtonEvent(0, (button_state & AMOTION_EVENT_BUTTON_PRIMARY) != 0); |
|
|
|
io.AddMouseButtonEvent(1, (button_state & AMOTION_EVENT_BUTTON_SECONDARY) != 0); |
|
|
|
io.AddMouseButtonEvent(2, (button_state & AMOTION_EVENT_BUTTON_TERTIARY) != 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
case AMOTION_EVENT_ACTION_HOVER_MOVE: // Hovering: Tool moves while NOT pressed (such as a physical mouse)
|
|
|
|
case AMOTION_EVENT_ACTION_MOVE: // Touch pointer moves while DOWN
|
|
|
|
io.AddMousePosEvent(AMotionEvent_getX(input_event, event_pointer_index), AMotionEvent_getY(input_event, event_pointer_index)); |
|
|
|