Make non-accelerated movements gradually accelerate from the start. Make all other movements and speed transitions immediate.
This commit is contained in:
@@ -27,8 +27,8 @@ static float mouseMoveDeceleratedSpeed = 2.5;
|
|||||||
|
|
||||||
static float mouseScrollSpeed = 0.1;
|
static float mouseScrollSpeed = 0.1;
|
||||||
|
|
||||||
static bool isMouseMoving;
|
static bool wasMoveAction;
|
||||||
static bool wasMouseMoving;
|
static mouse_speed_t prevMouseSpeed = MouseSpeed_Normal;
|
||||||
|
|
||||||
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
|
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ void processMouseActions()
|
|||||||
{
|
{
|
||||||
static float mouseMoveCurrentSpeed;
|
static float mouseMoveCurrentSpeed;
|
||||||
|
|
||||||
if (!wasMouseMoving) {
|
if (!wasMoveAction) {
|
||||||
mouseMoveCurrentSpeed = mouseMoveInitialSpeed;
|
mouseMoveCurrentSpeed = mouseMoveInitialSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,17 +46,22 @@ void processMouseActions()
|
|||||||
activeMouseStates[SerializedMouseAction_MoveRight];
|
activeMouseStates[SerializedMouseAction_MoveRight];
|
||||||
|
|
||||||
float targetSpeed;
|
float targetSpeed;
|
||||||
|
mouse_speed_t mouseSpeed = MouseSpeed_Normal;
|
||||||
if (activeMouseStates[SerializedMouseAction_Accelerate]) {
|
if (activeMouseStates[SerializedMouseAction_Accelerate]) {
|
||||||
targetSpeed = mouseMoveAcceleratedSpeed;
|
targetSpeed = mouseMoveAcceleratedSpeed;
|
||||||
|
mouseSpeed = MouseSpeed_Accelerated;
|
||||||
} else if (activeMouseStates[SerializedMouseAction_Decelerate]) {
|
} else if (activeMouseStates[SerializedMouseAction_Decelerate]) {
|
||||||
targetSpeed = mouseMoveDeceleratedSpeed;
|
targetSpeed = mouseMoveDeceleratedSpeed;
|
||||||
|
mouseSpeed = MouseSpeed_Decelerated;
|
||||||
} else if (isMoveAction) {
|
} else if (isMoveAction) {
|
||||||
targetSpeed = mouseMoveBaseSpeed;
|
targetSpeed = mouseMoveBaseSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMoveAction) {
|
if (mouseSpeed == MouseSpeed_Accelerated || (wasMoveAction && isMoveAction && (prevMouseSpeed != mouseSpeed))) {
|
||||||
isMouseMoving = true;
|
mouseMoveCurrentSpeed = targetSpeed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isMoveAction) {
|
||||||
if (mouseMoveCurrentSpeed < targetSpeed) {
|
if (mouseMoveCurrentSpeed < targetSpeed) {
|
||||||
mouseMoveCurrentSpeed += mouseMoveBaseAcceleration * elapsedTime / 1000;
|
mouseMoveCurrentSpeed += mouseMoveBaseAcceleration * elapsedTime / 1000;
|
||||||
if (mouseMoveCurrentSpeed > targetSpeed) {
|
if (mouseMoveCurrentSpeed > targetSpeed) {
|
||||||
@@ -122,6 +127,9 @@ void processMouseActions()
|
|||||||
if (activeMouseStates[SerializedMouseAction_RightClick]) {
|
if (activeMouseStates[SerializedMouseAction_RightClick]) {
|
||||||
ActiveUsbMouseReport->buttons |= MouseButton_Right;
|
ActiveUsbMouseReport->buttons |= MouseButton_Right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prevMouseSpeed = mouseSpeed;
|
||||||
|
wasMoveAction = isMoveAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t basicScancodeIndex = 0;
|
static uint8_t basicScancodeIndex = 0;
|
||||||
@@ -179,8 +187,6 @@ static secondary_role_t secondaryRole;
|
|||||||
void updateActiveUsbReports(void)
|
void updateActiveUsbReports(void)
|
||||||
{
|
{
|
||||||
memset(activeMouseStates, 0, ACTIVE_MOUSE_STATES_COUNT);
|
memset(activeMouseStates, 0, ACTIVE_MOUSE_STATES_COUNT);
|
||||||
wasMouseMoving = isMouseMoving;
|
|
||||||
isMouseMoving = false;
|
|
||||||
|
|
||||||
static uint8_t previousModifiers = 0;
|
static uint8_t previousModifiers = 0;
|
||||||
elapsedTime = Timer_GetElapsedTime(&UsbReportUpdateTime);
|
elapsedTime = Timer_GetElapsedTime(&UsbReportUpdateTime);
|
||||||
|
|||||||
@@ -32,6 +32,12 @@
|
|||||||
SecondaryRole_Mouse
|
SecondaryRole_Mouse
|
||||||
} secondary_role_t;
|
} secondary_role_t;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MouseSpeed_Normal,
|
||||||
|
MouseSpeed_Accelerated,
|
||||||
|
MouseSpeed_Decelerated,
|
||||||
|
} mouse_speed_t;
|
||||||
|
|
||||||
// Functions:
|
// Functions:
|
||||||
|
|
||||||
void UpdateUsbReports(void);
|
void UpdateUsbReports(void);
|
||||||
|
|||||||
Reference in New Issue
Block a user