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 {
|
||||
private static final String TAG = "GfxTablet.CanvasView";
|
||||
|
||||
private enum InRangeStatus {
|
||||
OutOfRange,
|
||||
InRange,
|
||||
FakeInRange
|
||||
}
|
||||
|
||||
final SharedPreferences settings;
|
||||
NetworkClient netClient;
|
||||
boolean acceptStylusOnly;
|
||||
int maxX, maxY;
|
||||
InRangeStatus inRangeStatus;
|
||||
|
||||
|
||||
// setup
|
||||
|
@ -35,6 +42,7 @@ public class CanvasView extends View implements SharedPreferences.OnSharedPrefer
|
|||
settings.registerOnSharedPreferenceChangeListener(this);
|
||||
setBackground();
|
||||
setInputMethods();
|
||||
inRangeStatus = InRangeStatus.OutOfRange;
|
||||
}
|
||||
|
||||
public void setNetworkClient(NetworkClient networkClient) {
|
||||
|
@ -83,13 +91,23 @@ public class CanvasView extends View implements SharedPreferences.OnSharedPrefer
|
|||
if (isEnabled()) {
|
||||
for (int ptr = 0; ptr < event.getPointerCount(); ptr++)
|
||||
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)));
|
||||
if (event.getActionMasked() == MotionEvent.ACTION_HOVER_MOVE)
|
||||
netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION,
|
||||
normalizeX(event.getX(ptr)),
|
||||
normalizeY(event.getY(ptr)),
|
||||
normalizePressure(event.getPressure(ptr))
|
||||
));
|
||||
switch (event.getActionMasked()) {
|
||||
case MotionEvent.ACTION_HOVER_MOVE:
|
||||
netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, nx, ny, npressure));
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
@ -110,11 +128,19 @@ public class CanvasView extends View implements SharedPreferences.OnSharedPrefer
|
|||
netClient.getQueue().add(new NetEvent(Type.TYPE_MOTION, nx, ny, npressure));
|
||||
break;
|
||||
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));
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
case MotionEvent.ACTION_CANCEL:
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue