Make scrolling immediately react to keypresses regardless of the previous internal scroll state.
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user