only vibrate when the swipe key changes

This commit is contained in:
Rodrigo Batista de Moraes 2022-05-06 19:08:20 -03:00 committed by Jules Aguillon
parent a27c64479f
commit bce0a98f62
2 changed files with 41 additions and 32 deletions

View File

@ -195,9 +195,11 @@ class KeyboardData
return new Key(key0, key1, key2, key3, key4, width * s, shift, edgekeys);
}
public KeyValue getValue(int index)
/* Get the KeyValue at the given direction. See Pointers.onTouchMove() for the represented direction */
public KeyValue getAtDirection(int direction)
{
if (index == 0 || index > 8) return key0;
if (direction == 0 || direction > 8) return key0;
KeyValue key = null;
if (edgekeys) {
// \ 1 /
@ -207,7 +209,7 @@ class KeyboardData
// / 4 \
// first closer
switch (index)
switch (direction)
{
case 2: case 3: key = key1; break;
case 4: case 8: key = key2; break;
@ -216,7 +218,7 @@ class KeyboardData
}
if (key != null) return key;
// second closer
switch (index)
switch (direction)
{
case 1: case 4: key = key1; break;
case 3: case 7: key = key2; break;
@ -225,7 +227,7 @@ class KeyboardData
}
if (key != null) return key;
// third closer
switch (index)
switch (direction)
{
case 5: case 8: key = key1; break;
case 2: case 6: key = key2; break;
@ -234,7 +236,7 @@ class KeyboardData
}
if (key != null) return key;
// fourth closer
switch (index)
switch (direction)
{
case 6: case 7: key = key1; break;
case 1: case 5: key = key2; break;
@ -251,7 +253,7 @@ class KeyboardData
// |
// 3 | 4
// first closer
switch (index)
switch (direction)
{
case 1: case 2: key = key1; break;
case 3: case 4: key = key2; break;
@ -260,7 +262,7 @@ class KeyboardData
}
if (key != null) return key;
// second closer
switch (index)
switch (direction)
{
case 3: case 5: key = key1; break;
case 2: case 8: key = key2; break;
@ -269,7 +271,7 @@ class KeyboardData
}
if (key != null) return key;
// third closer
switch (index)
switch (direction)
{
case 4: case 6: key = key1; break;
case 1: case 7: key = key2; break;
@ -278,7 +280,7 @@ class KeyboardData
}
if (key != null) return key;
// fourth closer
switch (index)
switch (direction)
{
case 7: case 8: key = key1; break;
case 3: case 4: key = key2; break;

View File

@ -135,7 +135,7 @@ public final class Pointers implements Handler.Callback
return;
int mflags = getFlags(isOtherPointerDown());
KeyValue value = _handler.onPointerDown(key.key0, mflags);
Pointer ptr = new Pointer(pointerId, key, 0, value, x, y, mflags);
Pointer ptr = new Pointer(pointerId, key, key.key0, value, x, y, mflags);
_ptrs.add(ptr);
if (value != null && (value.flags & KeyValue.FLAG_SPECIAL) == 0)
startKeyRepeat(ptr);
@ -155,28 +155,33 @@ public final class Pointers implements Handler.Callback
float dy = y - ptr.downY;
float dist = Math.abs(dx) + Math.abs(dy);
ptr.ptrDist = dist;
int newIndex;
int direction;
if (dist < _config.swipe_dist_px)
{
newIndex = 0;
direction = 0;
}
else {
// One of the 8 directions:
// |\2|3/|
// |1\|/4|
// |-----|
// |5/|\8|
// |/6|7\|
newIndex = 1;
if (dy > 0) newIndex += 4;
if (dx > 0) newIndex += 2;
if (dx > Math.abs(dy) || (dx < 0 && dx > -Math.abs(dy))) newIndex += 1;
}
if (newIndex != ptr.value_index)
else
{
ptr.value_index = newIndex;
// One of the 8 directions:
// |\2|3/|
// |1\|/4|
// |-----|
// |5/|\8|
// |/6|7\|
direction = 1;
if (dy > 0) direction += 4;
if (dx > 0) direction += 2;
if (dx > Math.abs(dy) || (dx < 0 && dx > -Math.abs(dy))) direction += 1;
}
KeyValue newSelectedValue = ptr.key.getAtDirection(direction);
if (newSelectedValue != ptr.selected_value)
{
ptr.selected_value = newSelectedValue;
// apply modifier flags and trigger vibration.
KeyValue newValue =
_handler.onPointerSwipe(ptr.key.getValue(newIndex), ptr.modifier_flags);
_handler.onPointerSwipe(ptr.selected_value, ptr.modifier_flags);
if (newValue != null)
{
int old_flags = ptr.flags;
@ -308,9 +313,11 @@ public final class Pointers implements Handler.Callback
{
/** -1 when latched. */
public int pointerId;
/** The Key pressed by this Pointer */
public final KeyboardData.Key key;
public int value_index;
/** Modified value. Not equal to [key.getValue(value_index)]. */
/** The current seletected KeyValue in key (any one of key0 to key4). */
public KeyValue selected_value;
/** selected_value with modifier_flags applied. */
public KeyValue value;
public float downX;
public float downY;
@ -325,11 +332,11 @@ public final class Pointers implements Handler.Callback
/** ptrDist at the first repeat, -1 otherwise. */
public float repeatingPtrDist;
public Pointer(int p, KeyboardData.Key k, int vi, KeyValue v, float x, float y, int mflags)
public Pointer(int p, KeyboardData.Key k, KeyValue sv, KeyValue v, float x, float y, int mflags)
{
pointerId = p;
key = k;
value_index = vi;
selected_value = sv;
value = v;
downX = x;
downY = y;