Tweak repeat timing for modulated keys

Make modulated keys repeat twice as slow by default and start repeating
twice as early.
This commit is contained in:
Jules Aguillon 2022-02-22 19:46:41 +01:00
parent 14dabb6f51
commit 7aa280b888

View File

@ -200,9 +200,13 @@ public final class Pointers implements Handler.Callback
if (ptr.timeoutWhat == msg.what) if (ptr.timeoutWhat == msg.what)
{ {
long nextInterval = _config.longPressInterval; long nextInterval = _config.longPressInterval;
// Modulate repeat interval depending on the distance of the pointer
if (_config.preciseRepeat && (ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0) if (_config.preciseRepeat && (ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
{
// Slower repeat for modulated keys
nextInterval *= 2;
// Modulate repeat interval depending on the distance of the pointer
nextInterval = (long)((float)nextInterval / modulatePreciseRepeat(ptr)); nextInterval = (long)((float)nextInterval / modulatePreciseRepeat(ptr));
}
_keyrepeat_handler.sendEmptyMessageDelayed(msg.what, nextInterval); _keyrepeat_handler.sendEmptyMessageDelayed(msg.what, nextInterval);
_handler.onPointerHold(ptr.value); _handler.onPointerHold(ptr.value);
return (true); return (true);
@ -217,7 +221,11 @@ public final class Pointers implements Handler.Callback
{ {
int what = (uniqueTimeoutWhat++); int what = (uniqueTimeoutWhat++);
ptr.timeoutWhat = what; ptr.timeoutWhat = what;
_keyrepeat_handler.sendEmptyMessageDelayed(what, _config.longPressTimeout); long timeout = _config.longPressTimeout;
// Faster repeat timeout for modulated keys
if ((ptr.flags & KeyValue.FLAG_PRECISE_REPEAT) != 0)
timeout /= 2;
_keyrepeat_handler.sendEmptyMessageDelayed(what, timeout);
} }
private void stopKeyRepeat(Pointer ptr) private void stopKeyRepeat(Pointer ptr)
@ -238,7 +246,7 @@ public final class Pointers implements Handler.Callback
ptr.repeatingPtrDist = ptr.ptrDist / 2.f; // Large swipe, move the middle point ptr.repeatingPtrDist = ptr.ptrDist / 2.f; // Large swipe, move the middle point
float left = ptr.repeatingPtrDist / 2.f; float left = ptr.repeatingPtrDist / 2.f;
float accel = (ptr.ptrDist - left) / (ptr.repeatingPtrDist - left); float accel = (ptr.ptrDist - left) / (ptr.repeatingPtrDist - left);
return Math.min(4.f, Math.max(0.1f, accel)); return Math.min(8.f, Math.max(0.1f, accel));
} }
private final class Pointer private final class Pointer