~ruther/qmk_firmware

90eef4cd153cdc1b00d973e6abb029828f656294 — Yorick Peterse 3 years ago 787a689
Fix kinetic mouse mode (#16951)

Co-authored-by: Jan Christoph Ebersbach <jceb@e-jc.de>
1 files changed, 11 insertions(+), 9 deletions(-)

M quantum/mousekey.c
M quantum/mousekey.c => quantum/mousekey.c +11 -9
@@ 66,11 66,16 @@ uint8_t mk_time_to_max = MOUSEKEY_TIME_TO_MAX;
/* milliseconds between the initial key press and first repeated motion event (0-2550) */
uint8_t mk_wheel_delay = MOUSEKEY_WHEEL_DELAY / 10;
/* milliseconds between repeated motion events (0-255) */
uint8_t mk_wheel_interval    = MOUSEKEY_WHEEL_INTERVAL;
#    ifndef MK_KINETIC_SPEED
uint8_t mk_wheel_interval = MOUSEKEY_WHEEL_INTERVAL;
#    else  /* #ifndef MK_KINETIC_SPEED */
float mk_wheel_interval = 1000.0f / MOUSEKEY_WHEEL_INITIAL_MOVEMENTS;
#    endif /* #ifndef MK_KINETIC_SPEED */
uint8_t mk_wheel_max_speed   = MOUSEKEY_WHEEL_MAX_SPEED;
uint8_t mk_wheel_time_to_max = MOUSEKEY_WHEEL_TIME_TO_MAX;

#    ifndef MK_COMBINED
#        ifndef MK_KINETIC_SPEED

static uint8_t move_unit(void) {
    uint16_t unit;


@@ 108,8 113,7 @@ static uint8_t wheel_unit(void) {
    return (unit > MOUSEKEY_WHEEL_MAX ? MOUSEKEY_WHEEL_MAX : (unit == 0 ? 1 : unit));
}

#    else /* #ifndef MK_COMBINED */
#        ifdef MK_KINETIC_SPEED
#        else /* #ifndef MK_KINETIC_SPEED */

/*
 * Kinetic movement  acceleration algorithm


@@ 129,7 133,7 @@ const uint16_t mk_decelerated_speed = MOUSEKEY_DECELERATED_SPEED;
const uint16_t mk_initial_speed     = MOUSEKEY_INITIAL_SPEED;

static uint8_t move_unit(void) {
    float speed = mk_initial_speed;
    float speed = (float)mk_initial_speed;

    if (mousekey_accel & ((1 << 0) | (1 << 2))) {
        speed = mousekey_accel & (1 << 2) ? mk_accelerated_speed : mk_decelerated_speed;


@@ 147,8 151,6 @@ static uint8_t move_unit(void) {
    return speed > MOUSEKEY_MOVE_MAX ? MOUSEKEY_MOVE_MAX : speed;
}

float mk_wheel_interval = 1000.0f / MOUSEKEY_WHEEL_INITIAL_MOVEMENTS;

static uint8_t wheel_unit(void) {
    float speed = MOUSEKEY_WHEEL_INITIAL_MOVEMENTS;



@@ 167,7 169,8 @@ static uint8_t wheel_unit(void) {
    return 1;
}

#        else /* #ifndef MK_KINETIC_SPEED */
#        endif /* #ifndef MK_KINETIC_SPEED */
#    else      /* #ifndef MK_COMBINED */

static uint8_t move_unit(void) {
    uint16_t unit;


@@ 205,8 208,7 @@ static uint8_t wheel_unit(void) {
    return (unit > MOUSEKEY_WHEEL_MAX ? MOUSEKEY_WHEEL_MAX : (unit == 0 ? 1 : unit));
}

#        endif /* #ifndef MK_KINETIC_SPEED */
#    endif     /* #ifndef MK_COMBINED */
#    endif /* #ifndef MK_COMBINED */

void mousekey_task(void) {
    // report cursor and scroll movement independently