aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorフィルターペーパー <[email protected]>2024-08-19 10:18:28 +0800
committerGitHub <[email protected]>2024-08-19 03:18:28 +0100
commit21b84596e7c372eeeedcf41a32c6c25379cd8f0e (patch)
tree163aca400e9e96033b934bf068a55d3c240affec
parente9cb9f42a511afd24a47812b5cf83895e8936744 (diff)
downloadqmk_firmware-21b84596e7c372eeeedcf41a32c6c25379cd8f0e.tar.gz
qmk_firmware-21b84596e7c372eeeedcf41a32c6c25379cd8f0e.zip
Enhance overlapping mouse keys control (#23341)
Enhance the overlapping mouse key press acceleration (introduced in #21494) with user preprocessor controls.
-rw-r--r--docs/features/mouse_keys.md13
-rw-r--r--quantum/mousekey.c10
-rw-r--r--quantum/mousekey.h10
3 files changed, 28 insertions, 5 deletions
diff --git a/docs/features/mouse_keys.md b/docs/features/mouse_keys.md
index 4cc06c992a..d755084f8e 100644
--- 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
index 8683cfdffa..9649943a0d 100644
--- 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
index 73380b743a..e7a790b9a9 100644
--- 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