Clean up captured pointer code to avoid logcat clutter on pre-8.0 systems (thanks Rachel!)

This commit is contained in:
Sam Lantinga 2018-07-13 12:55:50 -07:00
parent df0d3f1364
commit fd8e8f9f20
2 changed files with 58 additions and 60 deletions

View file

@ -1382,10 +1382,6 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
setOnGenericMotionListener(SDLActivity.getMotionListener()); setOnGenericMotionListener(SDLActivity.getMotionListener());
} }
if ((Build.VERSION.SDK_INT >= 26) && !SDLActivity.isDeXMode()) {
setOnCapturedPointerListener(new SDLCapturedPointerListener_API26());
}
// Some arbitrary defaults to avoid a potential division by zero // Some arbitrary defaults to avoid a potential division by zero
mWidth = 1.0f; mWidth = 1.0f;
mHeight = 1.0f; mHeight = 1.0f;
@ -1740,6 +1736,49 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
event.values[2] / SensorManager.GRAVITY_EARTH); event.values[2] / SensorManager.GRAVITY_EARTH);
} }
} }
// Captured pointer events for API 26.
public boolean onCapturedPointerEvent(MotionEvent event)
{
int action = event.getActionMasked();
float x, y;
switch (action) {
case MotionEvent.ACTION_SCROLL:
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
case MotionEvent.ACTION_MOVE:
x = event.getX(0);
y = event.getY(0);
SDLActivity.onNativeMouse(0, action, x, y, true);
return true;
case MotionEvent.ACTION_BUTTON_PRESS:
case MotionEvent.ACTION_BUTTON_RELEASE:
// Change our action value to what SDL's code expects.
if (action == MotionEvent.ACTION_BUTTON_PRESS) {
action = MotionEvent.ACTION_DOWN;
}
else if (action == MotionEvent.ACTION_BUTTON_RELEASE) {
action = MotionEvent.ACTION_UP;
}
x = event.getX(0);
y = event.getY(0);
int button = event.getButtonState();
SDLActivity.onNativeMouse(button, action, x, y, true);
return true;
}
return false;
}
} }
/* This is a fake invisible editor view that receives the input and defines the /* This is a fake invisible editor view that receives the input and defines the

View file

@ -749,7 +749,7 @@ class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
@Override @Override
public boolean supportsRelativeMouse() { public boolean supportsRelativeMouse() {
return true; return !SDLActivity.isDeXMode();
} }
@Override @Override
@ -759,20 +759,26 @@ class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
@Override @Override
public boolean setRelativeMouseEnabled(boolean enabled) { public boolean setRelativeMouseEnabled(boolean enabled) {
if (enabled) { if (!SDLActivity.isDeXMode()) {
SDLActivity.getContentView().requestPointerCapture(); if (enabled) {
SDLActivity.getContentView().requestPointerCapture();
}
else {
SDLActivity.getContentView().releasePointerCapture();
}
mRelativeModeEnabled = enabled;
return true;
} }
else { else
SDLActivity.getContentView().releasePointerCapture(); {
return false;
} }
mRelativeModeEnabled = enabled;
return true;
} }
@Override @Override
public void reclaimRelativeMouseModeIfNeeded() public void reclaimRelativeMouseModeIfNeeded()
{ {
if (mRelativeModeEnabled) { if (mRelativeModeEnabled && !SDLActivity.isDeXMode()) {
SDLActivity.getContentView().requestPointerCapture(); SDLActivity.getContentView().requestPointerCapture();
} }
} }
@ -788,51 +794,4 @@ class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
// Relative mouse in capture mode will only have relative for X/Y // Relative mouse in capture mode will only have relative for X/Y
return event.getY(0); return event.getY(0);
} }
} }
class SDLCapturedPointerListener_API26 implements View.OnCapturedPointerListener
{
@Override
public boolean onCapturedPointer(View view, MotionEvent event)
{
int action = event.getActionMasked();
float x, y;
switch (action) {
case MotionEvent.ACTION_SCROLL:
x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
SDLActivity.onNativeMouse(0, action, x, y, false);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
case MotionEvent.ACTION_MOVE:
x = event.getX(0);
y = event.getY(0);
SDLActivity.onNativeMouse(0, action, x, y, true);
return true;
case MotionEvent.ACTION_BUTTON_PRESS:
case MotionEvent.ACTION_BUTTON_RELEASE:
// Change our action value to what SDL's code expects.
if (action == MotionEvent.ACTION_BUTTON_PRESS) {
action = MotionEvent.ACTION_DOWN;
}
else if (action == MotionEvent.ACTION_BUTTON_RELEASE) {
action = MotionEvent.ACTION_UP;
}
x = event.getX(0);
y = event.getY(0);
int button = event.getButtonState();
SDLActivity.onNativeMouse(button, action, x, y, true);
return true;
}
return false;
}
}