1
0
Fork 0
mirror of https://github.com/rfc2822/GfxTablet synced 2025-10-03 17:49:17 +02:00

make the android client sent stylus-in-range events if required

This commit is contained in:
Jarrad Whitaker 2015-11-27 23:53:55 +11:00
parent a4721a34ea
commit 0663ea37e6

View file

@ -17,10 +17,17 @@ import at.bitfire.gfxtablet.NetEvent.Type;
public class CanvasView extends View implements SharedPreferences.OnSharedPreferenceChangeListener { public class CanvasView extends View implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "GfxTablet.CanvasView"; private static final String TAG = "GfxTablet.CanvasView";
private enum InRangeStatus {
OutOfRange,
InRange,
FakeInRange
}
final SharedPreferences settings; final SharedPreferences settings;
NetworkClient netClient; NetworkClient netClient;
boolean acceptStylusOnly; boolean acceptStylusOnly;
int maxX, maxY; int maxX, maxY;
InRangeStatus inRangeStatus;
// setup // setup
@ -35,6 +42,7 @@ public class CanvasView extends View implements SharedPreferences.OnSharedPrefer
settings.registerOnSharedPreferenceChangeListener(this); settings.registerOnSharedPreferenceChangeListener(this);
setBackground(); setBackground();
setInputMethods(); setInputMethods();
inRangeStatus = InRangeStatus.OutOfRange;
} }
public void setNetworkClient(NetworkClient networkClient) { public void setNetworkClient(NetworkClient networkClient) {
@ -83,13 +91,23 @@ public class CanvasView extends View implements SharedPreferences.OnSharedPrefer
if (isEnabled()) { if (isEnabled()) {
for (int ptr = 0; ptr < event.getPointerCount(); ptr++) for (int ptr = 0; ptr < event.getPointerCount(); ptr++)
if (!acceptStylusOnly || (event.getToolType(ptr) == MotionEvent.TOOL_TYPE_STYLUS)) { if (!acceptStylusOnly || (event.getToolType(ptr) == MotionEvent.TOOL_TYPE_STYLUS)) {
short nx = normalizeX(event.getX(ptr)),
ny = normalizeY(event.getY(ptr)),
npressure = normalizePressure(event.getPressure(ptr));
Log.v(TAG, String.format("Generic motion event logged: %f|%f, pressure %f", event.getX(ptr), event.getY(ptr), event.getPressure(ptr))); Log.v(TAG, String.format("Generic motion event logged: %f|%f, pressure %f", event.getX(ptr), event.getY(ptr), event.getPressure(ptr)));
if (event.getActionMasked() == MotionEvent.ACTION_HOVER_MOVE) switch (event.getActionMasked()) {
netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, case MotionEvent.ACTION_HOVER_MOVE:
normalizeX(event.getX(ptr)), netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, nx, ny, npressure));
normalizeY(event.getY(ptr)), break;
normalizePressure(event.getPressure(ptr)) case MotionEvent.ACTION_HOVER_ENTER:
)); inRangeStatus = InRangeStatus.InRange;
netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, -1, true));
break;
case MotionEvent.ACTION_HOVER_EXIT:
inRangeStatus = InRangeStatus.OutOfRange;
netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, -1, false));
break;
}
} }
return true; return true;
} }
@ -110,11 +128,19 @@ public class CanvasView extends View implements SharedPreferences.OnSharedPrefer
netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, nx, ny, npressure)); netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, nx, ny, npressure));
break; break;
case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_DOWN:
if (inRangeStatus == inRangeStatus.OutOfRange) {
inRangeStatus = inRangeStatus.FakeInRange;
netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, (short)0, -1, true));
}
netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, 0, true)); netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, 0, true));
break; break;
case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_CANCEL:
netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, 0, false)); netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, npressure, 0, false));
if (inRangeStatus == inRangeStatus.FakeInRange) {
inRangeStatus = inRangeStatus.OutOfRange;
netClient.getQueue().add(new NetEvent(Type.TYPE_BUTTON, nx, ny, (short)0, -1, false));
}
break; break;
} }