Skip to content

Commit

Permalink
Make scrolling immediately react to keypresses regardless of the prev…
Browse files Browse the repository at this point in the history
…ious internal scroll state.
  • Loading branch information
mondalaci committed Dec 7, 2017
1 parent 2eb25ce commit 2f7f7b1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
17 changes: 17 additions & 0 deletions right/src/usb_report_updater.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ uint16_t DoubleTapSwitchLayerTimeout = 250;
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];

mouse_kinetic_state_t MouseMoveState = {
.isScroll = false,
.upState = SerializedMouseAction_MoveUp,
.downState = SerializedMouseAction_MoveDown,
.leftState = SerializedMouseAction_MoveLeft,
Expand All @@ -38,6 +39,7 @@ mouse_kinetic_state_t MouseMoveState = {
};

mouse_kinetic_state_t MouseScrollState = {
.isScroll = true,
.upState = SerializedMouseAction_ScrollDown,
.downState = SerializedMouseAction_ScrollUp,
.leftState = SerializedMouseAction_ScrollLeft,
Expand Down Expand Up @@ -97,6 +99,11 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)

float distance = kineticState->currentSpeed * elapsedTime / 1000;

if (kineticState->isScroll && !kineticState->wasMoveAction) {
kineticState->xSum = 0;
kineticState->ySum = 0;
}

if (activeMouseStates[kineticState->leftState]) {
kineticState->xSum -= distance;
} else if (activeMouseStates[kineticState->rightState]) {
Expand All @@ -108,6 +115,11 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
kineticState->xSum = xSumFrac;
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]) {
kineticState->ySum -= distance;
} else if (activeMouseStates[kineticState->downState]) {
Expand All @@ -118,6 +130,11 @@ void processMouseKineticState(mouse_kinetic_state_t *kineticState)
float ySumFrac = modff(kineticState->ySum, &ySumInt);
kineticState->ySum = ySumFrac;
kineticState->yOut = ySumInt;

if (kineticState->isScroll && !kineticState->wasMoveAction && kineticState->yOut == 0) {
kineticState->yOut = kineticState->ySum > 0 ? 1 : -1;
kineticState->ySum = 0;
}
} else {
kineticState->currentSpeed = 0;
}
Expand Down
1 change: 1 addition & 0 deletions right/src/usb_report_updater.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
} mouse_speed_t;

typedef struct {
bool isScroll;
bool wasMoveAction;
serialized_mouse_action_t upState;
serialized_mouse_action_t downState;
Expand Down

0 comments on commit 2f7f7b1

Please sign in to comment.