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:
parent
a4721a34ea
commit
0663ea37e6
1 changed files with 32 additions and 6 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue