logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git
commit: 21b84596e7c372eeeedcf41a32c6c25379cd8f0e
parent e9cb9f42a511afd24a47812b5cf83895e8936744
Author: フィルターペーパー <76888457+filterpaper@users.noreply.github.com>
Date:   Mon, 19 Aug 2024 10:18:28 +0800

Enhance overlapping mouse keys control (#23341)

Enhance the overlapping mouse key press acceleration (introduced in #21494) with user preprocessor controls.

Diffstat:

Mdocs/features/mouse_keys.md13+++++++++++++
Mquantum/mousekey.c10+++++-----
Mquantum/mousekey.h10++++++++++
3 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/docs/features/mouse_keys.md b/docs/features/mouse_keys.md @@ -203,6 +203,19 @@ Tips: * Keep `MOUSEKEY_MOVE_DELTA` at 1. This allows precise movements before the gliding effect starts. * Mouse wheel options are the same as the default accelerated mode, and do not use inertia. +### Overlapping mouse key control + +When additional overlapping mouse key is pressed, the mouse cursor will continue in a new direction with the same acceleration. The following settings can be used to reset the acceleration with new overlapping keys for more precise control if desired: + +|Define |Default |Description | +|------------------------------|----------------------|-----------------------------------------------------------------------| +|`MOUSEKEY_OVERLAP_RESET` |undefined |Enables overlapping mouse key control | +|`MOUSEKEY_OVERLAP_MOVE_DELTA` |`MOUSEKEY_MOVE_DELTA` |Step size of reset movement acceleration | +|`MOUSEKEY_OVERLAP_WHEEL_DELTA`|`MOUSEKEY_WHEEL_DELTA`|Step size of reset mouse wheel acceleration | +|`MOUSEKEY_OVERLAP_INTERVAL` |`MOUSEKEY_INTERVAL` |Reset time between cursor movements in milliseconds (Kinetic mode only)| + +?> This feature will not be applied on Inertial mode + ## Use with PS/2 Mouse and Pointing Device Mouse keys button state is shared with [PS/2 mouse](ps2_mouse) and [pointing device](pointing_device) so mouse keys button presses can be used for clicks and drags. diff --git a/quantum/mousekey.c b/quantum/mousekey.c @@ -391,18 +391,18 @@ void mousekey_on(uint8_t code) { } # endif -# ifndef MOUSEKEY_INERTIA +# if defined(MOUSEKEY_OVERLAP_RESET) && !defined(MOUSEKEY_INERTIA) // If mouse report is not zero, the current mousekey press is overlapping // with another. Restart acceleration for smoother directional transition. if (mouse_report.x || mouse_report.y || mouse_report.h || mouse_report.v) { # ifdef MK_KINETIC_SPEED - mouse_timer = timer_read() - (MOUSEKEY_INTERVAL << 2); + mouse_timer = timer_read() - MOUSEKEY_OVERLAP_INTERVAL; # else - mousekey_repeat = MOUSEKEY_MOVE_DELTA; - mousekey_wheel_repeat = MOUSEKEY_WHEEL_DELTA; + mousekey_repeat = MOUSEKEY_OVERLAP_MOVE_DELTA; + mousekey_wheel_repeat = MOUSEKEY_OVERLAP_WHEEL_DELTA; # endif } -# endif // ifndef MOUSEKEY_INERTIA +# endif // defined(MOUSEKEY_OVERLAP_RESET) && !defined(MOUSEKEY_INERTIA) # ifdef MOUSEKEY_INERTIA diff --git a/quantum/mousekey.h b/quantum/mousekey.h @@ -174,6 +174,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #endif /* #ifndef MK_3_SPEED */ +#ifndef MOUSEKEY_OVERLAP_MOVE_DELTA +# define MOUSEKEY_OVERLAP_MOVE_DELTA MOUSEKEY_MOVE_DELTA +#endif +#ifndef MOUSEKEY_OVERLAP_WHEEL_DELTA +# define MOUSEKEY_OVERLAP_WHEEL_DELTA MOUSEKEY_WHEEL_DELTA +#endif +#ifndef MOUSEKEY_OVERLAP_INTERVAL +# define MOUSEKEY_OVERLAP_INTERVAL MOUSEKEY_INTERVAL +#endif + #ifdef __cplusplus extern "C" { #endif