Make scrolling immediately react to keypresses regardless of the previous internal scroll state.

This commit is contained in:
László Monda
2017-12-07 04:44:45 +01:00
parent 2eb25ce05c
commit 2f7f7b1cd2
2 changed files with 18 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ uint16_t DoubleTapSwitchLayerTimeout = 250;
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT]; static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
mouse_kinetic_state_t MouseMoveState = { mouse_kinetic_state_t MouseMoveState = {
.isScroll = false,
.upState = SerializedMouseAction_MoveUp, .upState = SerializedMouseAction_MoveUp,
.downState = SerializedMouseAction_MoveDown, .downState = SerializedMouseAction_MoveDown,
.leftState = SerializedMouseAction_MoveLeft, .leftState = SerializedMouseAction_MoveLeft,
@@ -38,6 +39,7 @@ mouse_kinetic_state_t MouseMoveState = {
}; };
mouse_kinetic_state_t MouseScrollState = { mouse_kinetic_state_t MouseScrollState = {
.isScroll = true,
.upState = SerializedMouseAction_ScrollDown, .upState = SerializedMouseAction_ScrollDown,
.downState = SerializedMouseAction_ScrollUp, .downState = SerializedMouseAction_ScrollUp,
.leftState = SerializedMouseAction_ScrollLeft, .leftState = SerializedMouseAction_ScrollLeft,
@@ -97,6 +99,11 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
float distance = kineticState->currentSpeed * elapsedTime / 1000; float distance = kineticState->currentSpeed * elapsedTime / 1000;
if (kineticState->isScroll && !kineticState->wasMoveAction) {
kineticState->xSum = 0;
kineticState->ySum = 0;
}
if (activeMouseStates[kineticState->leftState]) { if (activeMouseStates[kineticState->leftState]) {
kineticState->xSum -= distance; kineticState->xSum -= distance;
} else if (activeMouseStates[kineticState->rightState]) { } else if (activeMouseStates[kineticState->rightState]) {
@@ -108,6 +115,11 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
kineticState->xSum = xSumFrac; kineticState->xSum = xSumFrac;
kineticState->xOut = xSumInt; kineticState->xOut = xSumInt;
if (kineticState->isScroll && !kineticState->wasMoveAction && kineticState->xOut == 0) {
kineticState->xOut = kineticState->xSum > 0 ? 1 : -1;
kineticState->xSum = 0;
}
if (activeMouseStates[kineticState->upState]) { if (activeMouseStates[kineticState->upState]) {
kineticState->ySum -= distance; kineticState->ySum -= distance;
} else if (activeMouseStates[kineticState->downState]) { } else if (activeMouseStates[kineticState->downState]) {
@@ -118,6 +130,11 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
float ySumFrac = modff(kineticState->ySum, &ySumInt); float ySumFrac = modff(kineticState->ySum, &ySumInt);
kineticState->ySum = ySumFrac; kineticState->ySum = ySumFrac;
kineticState->yOut = ySumInt; kineticState->yOut = ySumInt;
if (kineticState->isScroll && !kineticState->wasMoveAction && kineticState->yOut == 0) {
kineticState->yOut = kineticState->ySum > 0 ? 1 : -1;
kineticState->ySum = 0;
}
} else { } else {
kineticState->currentSpeed = 0; kineticState->currentSpeed = 0;
} }

View File

@@ -43,6 +43,7 @@
} mouse_speed_t; } mouse_speed_t;
typedef struct { typedef struct {
bool isScroll;
bool wasMoveAction; bool wasMoveAction;
serialized_mouse_action_t upState; serialized_mouse_action_t upState;
serialized_mouse_action_t downState; serialized_mouse_action_t downState;