diff options
Diffstat (limited to 'srcs')
| -rw-r--r-- | srcs/juloo.keyboard2/KeyboardData.java | 108 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Pointers.java | 6 |
2 files changed, 35 insertions, 79 deletions
diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index d261725..6274eb0 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -195,102 +195,58 @@ class KeyboardData return new Key(key0, key1, key2, key3, key4, width * s, shift, edgekeys); } - - /* Get the KeyValue at the given direction. See Pointers.onTouchMove() for the represented direction */ - public KeyValue getAtDirection(int direction) + private KeyValue getAtDirectionExact(int direction) { - if (direction == 0 || direction > 8) return key0; - KeyValue key = null; - if (edgekeys) { + if (edgekeys) + { // \ 1 / // \ / // 3 0 2 // / \ // / 4 \ - - // first closer - switch (direction) - { - case 2: case 3: key = key1; break; - case 4: case 8: key = key2; break; - case 1: case 5: key = key3; break; - case 6: case 7: key = key4; break; - } - if (key != null) return key; - // second closer - switch (direction) - { - case 1: case 4: key = key1; break; - case 3: case 7: key = key2; break; - case 2: case 6: key = key3; break; - case 5: case 8: key = key4; break; - } - if (key != null) return key; - // third closer switch (direction) { - case 5: case 8: key = key1; break; - case 2: case 6: key = key2; break; - case 3: case 7: key = key3; break; - case 1: case 4: key = key4; break; + case 2: case 3: return key1; + case 4: case 5: return key2; + case 6: case 7: return key4; + case 8: case 1: return key3; } - if (key != null) return key; - // fourth closer - switch (direction) - { - case 6: case 7: key = key1; break; - case 1: case 5: key = key2; break; - case 4: case 8: key = key3; break; - case 2: case 3: key = key4; break; - } - if (key != null) return key; } else { // 1 | 2 // | // --0-- - // | + // | // 3 | 4 - // first closer - switch (direction) - { - case 1: case 2: key = key1; break; - case 3: case 4: key = key2; break; - case 5: case 6: key = key3; break; - case 7: case 8: key = key4; break; - } - if (key != null) return key; - // second closer switch (direction) { - case 3: case 5: key = key1; break; - case 2: case 8: key = key2; break; - case 1: case 7: key = key3; break; - case 4: case 6: key = key4; break; + case 1: case 2: return key1; + case 3: case 4: return key2; + case 5: case 6: return key4; + case 7: case 8: return key3; } - if (key != null) return key; - // third closer - switch (direction) - { - case 4: case 6: key = key1; break; - case 1: case 7: key = key2; break; - case 2: case 8: key = key3; break; - case 3: case 5: key = key4; break; - } - if (key != null) return key; - // fourth closer - switch (direction) - { - case 7: case 8: key = key1; break; - case 3: case 4: key = key2; break; - case 5: case 6: key = key3; break; - case 1: case 2: key = key4; break; - } - if (key != null) return key; } - - return key0; + return null; + } + + /* + * Get the KeyValue at the given direction. In case of swipe (!= 0), get the + * nearest KeyValue that is not key0. See Pointers.onTouchMove() for the + * represented direction. + */ + public KeyValue getAtDirection(int direction) + { + if (direction == 0) + return key0; + KeyValue k; + for (int i = 0; i > -2; i = (~i>>31) - i) + { + k = getAtDirectionExact(Math.floorMod(direction + i - 1, 8) + 1); + if (k != null) + return k; + } + return null; } } diff --git a/srcs/juloo.keyboard2/Pointers.java b/srcs/juloo.keyboard2/Pointers.java index ac5ef84..1328d62 100644 --- a/srcs/juloo.keyboard2/Pointers.java +++ b/srcs/juloo.keyboard2/Pointers.java @@ -167,12 +167,12 @@ public final class Pointers implements Handler.Callback // |\2|3/| // |1\|/4| // |-----| - // |5/|\8| - // |/6|7\| + // |8/|\5| + // |/7|6\| 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; + if (dy > 0) direction = 9 - direction; } KeyValue newSelectedValue = ptr.key.getAtDirection(direction); |
