Make non-accelerated movements gradually accelerate from the start. Make all other movements and speed transitions immediate.

This commit is contained in:
László Monda
2017-11-24 22:49:39 +01:00
parent 368c724e6a
commit bb7faaa799
2 changed files with 19 additions and 7 deletions

View File

@@ -27,8 +27,8 @@ static float mouseMoveDeceleratedSpeed = 2.5;
static float mouseScrollSpeed = 0.1;
static bool isMouseMoving;
static bool wasMouseMoving;
static bool wasMoveAction;
static mouse_speed_t prevMouseSpeed = MouseSpeed_Normal;
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
@@ -36,7 +36,7 @@ void processMouseActions()
{
static float mouseMoveCurrentSpeed;
if (!wasMouseMoving) {
if (!wasMoveAction) {
mouseMoveCurrentSpeed = mouseMoveInitialSpeed;
}
@@ -46,17 +46,22 @@ void processMouseActions()
activeMouseStates[SerializedMouseAction_MoveRight];
float targetSpeed;
mouse_speed_t mouseSpeed = MouseSpeed_Normal;
if (activeMouseStates[SerializedMouseAction_Accelerate]) {
targetSpeed = mouseMoveAcceleratedSpeed;
mouseSpeed = MouseSpeed_Accelerated;
} else if (activeMouseStates[SerializedMouseAction_Decelerate]) {
targetSpeed = mouseMoveDeceleratedSpeed;
mouseSpeed = MouseSpeed_Decelerated;
} else if (isMoveAction) {
targetSpeed = mouseMoveBaseSpeed;
}
if (isMoveAction) {
isMouseMoving = true;
if (mouseSpeed == MouseSpeed_Accelerated || (wasMoveAction && isMoveAction && (prevMouseSpeed != mouseSpeed))) {
mouseMoveCurrentSpeed = targetSpeed;
}
if (isMoveAction) {
if (mouseMoveCurrentSpeed < targetSpeed) {
mouseMoveCurrentSpeed += mouseMoveBaseAcceleration * elapsedTime / 1000;
if (mouseMoveCurrentSpeed > targetSpeed) {
@@ -122,6 +127,9 @@ void processMouseActions()
if (activeMouseStates[SerializedMouseAction_RightClick]) {
ActiveUsbMouseReport->buttons |= MouseButton_Right;
}
prevMouseSpeed = mouseSpeed;
wasMoveAction = isMoveAction;
}
static uint8_t basicScancodeIndex = 0;
@@ -179,8 +187,6 @@ static secondary_role_t secondaryRole;
void updateActiveUsbReports(void)
{
memset(activeMouseStates, 0, ACTIVE_MOUSE_STATES_COUNT);
wasMouseMoving = isMouseMoving;
isMouseMoving = false;
static uint8_t previousModifiers = 0;
elapsedTime = Timer_GetElapsedTime(&UsbReportUpdateTime);

View File

@@ -32,6 +32,12 @@
SecondaryRole_Mouse
} secondary_role_t;
typedef enum {
MouseSpeed_Normal,
MouseSpeed_Accelerated,
MouseSpeed_Decelerated,
} mouse_speed_t;
// Functions:
void UpdateUsbReports(void);