abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/juloo.keyboard2')
-rw-r--r--srcs/juloo.keyboard2/KeyValue.java4
-rw-r--r--srcs/juloo.keyboard2/Pointers.java38
2 files changed, 31 insertions, 11 deletions
diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java
index 15a3d18..66029a7 100644
--- a/srcs/juloo.keyboard2/KeyValue.java
+++ b/srcs/juloo.keyboard2/KeyValue.java
@@ -245,8 +245,8 @@ class KeyValue
addEventKey("page_down", "⇟", KeyEvent.KEYCODE_PAGE_DOWN);
addEventKey("home", "↖", KeyEvent.KEYCODE_MOVE_HOME);
addEventKey("end", "↗", KeyEvent.KEYCODE_MOVE_END);
- addEventKey("backspace", "⌫", KeyEvent.KEYCODE_DEL, FLAG_PRECISE_REPEAT);
- addEventKey("delete", "⌦", KeyEvent.KEYCODE_FORWARD_DEL, FLAG_PRECISE_REPEAT);
+ addEventKey("backspace", "⌫", KeyEvent.KEYCODE_DEL);
+ addEventKey("delete", "⌦", KeyEvent.KEYCODE_FORWARD_DEL);
addEventKey("insert", "Ins", KeyEvent.KEYCODE_INSERT);
addEventKey("f1", "F1", KeyEvent.KEYCODE_F1);
addEventKey("f2", "F2", KeyEvent.KEYCODE_F2);
diff --git a/srcs/juloo.keyboard2/Pointers.java b/srcs/juloo.keyboard2/Pointers.java
index 0930c21..90b452e 100644
--- a/srcs/juloo.keyboard2/Pointers.java
+++ b/srcs/juloo.keyboard2/Pointers.java
@@ -135,12 +135,20 @@ public final class Pointers implements Handler.Callback
}
if (newValue != null && newValue != ptr.value)
{
- stopKeyRepeat(ptr);
+ int old_flags = (ptr.value != null) ? ptr.value.flags : 0;
ptr.value = newValue;
ptr.flags = newValue.flags;
- if ((newValue.flags & KeyValue.FLAG_NOREPEAT) == 0)
- startKeyRepeat(ptr);
- _handler.onPointerSwipe(newValue);
+ if ((old_flags & newValue.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
+ {
+ // Keep the keyrepeat going between modulated keys.
+ }
+ else
+ {
+ stopKeyRepeat(ptr);
+ if ((newValue.flags & KeyValue.FLAG_NOREPEAT) == 0)
+ startKeyRepeat(ptr);
+ _handler.onPointerSwipe(newValue);
+ }
}
}
@@ -192,12 +200,9 @@ public final class Pointers implements Handler.Callback
if (ptr.timeoutWhat == msg.what)
{
long nextInterval = _config.longPressInterval;
+ // Modulate repeat interval depending on the distance of the pointer
if (_config.preciseRepeat && (ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
- {
- // Modulate repeat interval depending on the distance of the pointer
- float accel = Math.min(4.f, Math.max(0.3f, ptr.ptrDist / (_config.swipe_dist_px * 15.f)));
- nextInterval = (long)((float)nextInterval / accel);
- }
+ nextInterval = (long)((float)nextInterval / modulatePreciseRepeat(ptr));
_keyrepeat_handler.sendEmptyMessageDelayed(msg.what, nextInterval);
_handler.onPointerHold(ptr.value);
return (true);
@@ -221,9 +226,21 @@ public final class Pointers implements Handler.Callback
{
_keyrepeat_handler.removeMessages(ptr.timeoutWhat);
ptr.timeoutWhat = -1;
+ ptr.repeatingPtrDist = -1.f;
}
}
+ private float modulatePreciseRepeat(Pointer ptr)
+ {
+ if (ptr.repeatingPtrDist < 0.f)
+ ptr.repeatingPtrDist = ptr.ptrDist; // First repeat
+ if (ptr.ptrDist > ptr.repeatingPtrDist * 2.f)
+ ptr.repeatingPtrDist = ptr.ptrDist / 2.f; // Large swipe, move the middle point
+ float left = ptr.repeatingPtrDist / 2.f;
+ float accel = (ptr.ptrDist - left) / (ptr.repeatingPtrDist - left);
+ return Math.min(4.f, Math.max(0.1f, accel));
+ }
+
private final class Pointer
{
/** -1 when latched. */
@@ -237,6 +254,8 @@ public final class Pointers implements Handler.Callback
public int flags;
/** Identify timeout messages. */
public int timeoutWhat;
+ /** ptrDist at the first repeat, -1 otherwise. */
+ public float repeatingPtrDist;
public Pointer(int p, KeyboardData.Key k, KeyValue v, float x, float y)
{
@@ -248,6 +267,7 @@ public final class Pointers implements Handler.Callback
ptrDist = 0.f;
flags = (v == null) ? 0 : v.flags;
timeoutWhat = -1;
+ repeatingPtrDist = -1.f;
}
}