feat: Provide reasonable default mouse settings for Macs (#982)

* feat: Provide reasonable default mouse settings for Macs

* fix: hack to eliminate the double scrollbar
This commit is contained in:
Róbert Kiss
2019-07-25 22:02:52 +02:00
committed by László Monda
parent 2b84101975
commit a409c219d8
10 changed files with 123 additions and 41 deletions

View File

@@ -8,6 +8,7 @@ export * from './secondary-role-action';
export * from './macro'; export * from './macro';
export * from './module'; export * from './module';
export * from './module-configuration'; export * from './module-configuration';
export * from './mouse-speed-configuration';
export * from './user-configuration'; export * from './user-configuration';
export const SCANCODES = require('./scancodes.json'); export const SCANCODES = require('./scancodes.json');

View File

@@ -0,0 +1,12 @@
export interface MouseSpeedConfiguration {
mouseMoveInitialSpeed: number;
mouseMoveAcceleration: number;
mouseMoveDeceleratedSpeed: number;
mouseMoveBaseSpeed: number;
mouseMoveAcceleratedSpeed: number;
mouseScrollInitialSpeed: number;
mouseScrollAcceleration: number;
mouseScrollDeceleratedSpeed: number;
mouseScrollBaseSpeed: number;
mouseScrollAcceleratedSpeed: number;
}

View File

@@ -7,8 +7,9 @@ import { ConfigSerializer } from '../config-serializer';
import { KeystrokeAction, NoneAction } from './key-action'; import { KeystrokeAction, NoneAction } from './key-action';
import { SecondaryRoleAction } from './secondary-role-action'; import { SecondaryRoleAction } from './secondary-role-action';
import { isScancodeExists } from './scancode-checker'; import { isScancodeExists } from './scancode-checker';
import { MouseSpeedConfiguration } from './mouse-speed-configuration';
export class UserConfiguration { export class UserConfiguration implements MouseSpeedConfiguration {
@assertUInt16 @assertUInt16
userConfigMajorVersion: number; userConfigMajorVersion: number;

View File

@@ -2,6 +2,23 @@
<i class="fa fa-sliders"></i> <i class="fa fa-sliders"></i>
<span>Mouse speed</span> <span>Mouse speed</span>
</h1> </h1>
<button class="btn btn-danger mouse-speed-reset-button"
mwlConfirmationPopover
title="Are you sure?"
placement="bottom"
confirmText="Yes"
cancelText="No"
(confirm)="resetToPcDefault()">Reset PC default speeds
</button>
<button class="btn btn-danger mouse-speed-reset-button"
mwlConfirmationPopover
title="Are you sure?"
placement="bottom"
confirmText="Yes"
cancelText="No"
(confirm)="resetToMacDefault()">Reset Mac default speeds
</button>
<h3>Mouse pointer speed</h3> <h3>Mouse pointer speed</h3>
<div class="row mouse-speed-setting" *ngFor="let prop of moveProps"> <div class="row mouse-speed-setting" *ngFor="let prop of moveProps">
<div class="col-xs-12 col-md-6"> <div class="col-xs-12 col-md-6">
@@ -32,11 +49,5 @@
(ngModelChange)="onSetPropertyValue(prop.prop, $event)"></slider-wrapper> (ngModelChange)="onSetPropertyValue(prop.prop, $event)"></slider-wrapper>
</div> </div>
</div> </div>
<button class="btn btn-danger mouse-speed-reset-button" <!-- It is a hack to eliminate the double scrollbar -->
mwlConfirmationPopover <div class="placeholder"></div>
title="Are you sure?"
placement="top"
confirmText="Yes"
cancelText="No"
(confirm)="resetToDefault()">Reset speeds to default
</button>

View File

@@ -14,8 +14,8 @@
} }
.mouse-speed-reset-button { .mouse-speed-reset-button {
display: block; margin-bottom: 2rem;
margin-bottom: 4rem; margin-right: 1em;
} }
.mouse-speed-setting { .mouse-speed-setting {
@@ -25,4 +25,9 @@
margin-top: 2rem; margin-top: 2rem;
} }
} }
.placeholder {
height: 3rem;
}
} }

View File

@@ -5,7 +5,7 @@ import { SetUserConfigurationValueAction } from '../../../store/actions/user-con
import { SliderPips, SliderProps } from '../../slider-wrapper/slider-wrapper.component'; import { SliderPips, SliderProps } from '../../slider-wrapper/slider-wrapper.component';
import { Observable, Subscription } from 'rxjs'; import { Observable, Subscription } from 'rxjs';
import { UserConfiguration } from 'uhk-common'; import { UserConfiguration } from 'uhk-common';
import { ResetMouseSpeedSettingsAction } from '../../../store/actions/device'; import { ResetPcMouseSpeedSettingsAction, ResetMacMouseSpeedSettingsAction } from '../../../store/actions/device';
const MOUSE_MOVE_VALUE_MULTIPLIER = 25; const MOUSE_MOVE_VALUE_MULTIPLIER = 25;
@@ -144,7 +144,11 @@ export class MouseSpeedComponent implements OnInit, OnDestroy {
})); }));
} }
resetToDefault() { resetToPcDefault() {
this.store.dispatch(new ResetMouseSpeedSettingsAction()); this.store.dispatch(new ResetPcMouseSpeedSettingsAction());
}
resetToMacDefault() {
this.store.dispatch(new ResetMacMouseSpeedSettingsAction());
} }
} }

View File

@@ -0,0 +1,31 @@
import { MouseSpeedConfiguration } from 'uhk-common';
export function getDefaultPcMouseSpeeds(): MouseSpeedConfiguration {
return {
mouseMoveInitialSpeed: 4,
mouseMoveAcceleration: 68,
mouseMoveDeceleratedSpeed: 8,
mouseMoveBaseSpeed: 32,
mouseMoveAcceleratedSpeed: 64,
mouseScrollInitialSpeed: 20,
mouseScrollAcceleration: 20,
mouseScrollDeceleratedSpeed: 10,
mouseScrollBaseSpeed: 20,
mouseScrollAcceleratedSpeed: 50
};
}
export function getDefaultMacMouseSpeeds(): MouseSpeedConfiguration {
return {
mouseMoveInitialSpeed: 8,
mouseMoveAcceleration: 180,
mouseMoveDeceleratedSpeed: 80,
mouseMoveBaseSpeed: 112,
mouseMoveAcceleratedSpeed: 160,
mouseScrollInitialSpeed: 10,
mouseScrollAcceleration: 10,
mouseScrollDeceleratedSpeed: 7,
mouseScrollBaseSpeed: 10,
mouseScrollAcceleratedSpeed: 12
};
}

View File

@@ -14,7 +14,8 @@ export enum ActionTypes {
SaveToKeyboardFailed = '[device] save to keyboard failed', SaveToKeyboardFailed = '[device] save to keyboard failed',
HideSaveToKeyboardButton = '[device] hide save to keyboard button', HideSaveToKeyboardButton = '[device] hide save to keyboard button',
ResetUserConfiguration = '[device] reset user configuration', ResetUserConfiguration = '[device] reset user configuration',
ResetMouseSpeedSettings = '[device] reset mouse speed settings', ResetPcMouseSpeedSettings = '[device] reset PC mouse speed settings',
ResetMacMouseSpeedSettings = '[device] reset Mac mouse speed settings',
UpdateFirmware = '[device] update firmware', UpdateFirmware = '[device] update firmware',
UpdateFirmwareWith = '[device] update firmware with', UpdateFirmwareWith = '[device] update firmware with',
UpdateFirmwareReply = '[device] update firmware reply', UpdateFirmwareReply = '[device] update firmware reply',
@@ -113,8 +114,12 @@ export class UpdateFirmwareFailedAction implements Action {
} }
} }
export class ResetMouseSpeedSettingsAction implements Action { export class ResetPcMouseSpeedSettingsAction implements Action {
type = ActionTypes.ResetMouseSpeedSettings; type = ActionTypes.ResetPcMouseSpeedSettings;
}
export class ResetMacMouseSpeedSettingsAction implements Action {
type = ActionTypes.ResetMacMouseSpeedSettings;
} }
export class HardwareModulesLoadedAction implements Action { export class HardwareModulesLoadedAction implements Action {
@@ -161,7 +166,8 @@ export type Actions
| SaveToKeyboardSuccessAction | SaveToKeyboardSuccessAction
| SaveToKeyboardSuccessFailed | SaveToKeyboardSuccessFailed
| HideSaveToKeyboardButton | HideSaveToKeyboardButton
| ResetMouseSpeedSettingsAction | ResetPcMouseSpeedSettingsAction
| ResetMacMouseSpeedSettingsAction
| ResetUserConfigurationAction | ResetUserConfigurationAction
| UpdateFirmwareAction | UpdateFirmwareAction
| UpdateFirmwareWithAction | UpdateFirmwareWithAction

View File

@@ -34,7 +34,7 @@ import {
import { AppRendererService } from '../../services/app-renderer.service'; import { AppRendererService } from '../../services/app-renderer.service';
import { DeviceRendererService } from '../../services/device-renderer.service'; import { DeviceRendererService } from '../../services/device-renderer.service';
import { SetupPermissionErrorAction, ShowNotificationAction } from '../actions/app'; import { SetupPermissionErrorAction, ShowNotificationAction } from '../actions/app';
import { AppState, deviceConnected, getRouterState } from '../index'; import { AppState, deviceConnected, getRouterState, getUserConfiguration } from '../index';
import { import {
ActionTypes as UserConfigActions, ActionTypes as UserConfigActions,
ApplyUserConfigurationFromFileAction, ApplyUserConfigurationFromFileAction,
@@ -169,27 +169,12 @@ export class DeviceEffects {
@Effect() @Effect()
resetMouseSpeedSettings$: Observable<Action> = this.actions$ resetMouseSpeedSettings$: Observable<Action> = this.actions$
.pipe( .pipe(
ofType(ActionTypes.ResetMouseSpeedSettings), ofType(
switchMap(() => { ActionTypes.ResetPcMouseSpeedSettings,
const config = this.defaultUserConfigurationService.getDefault(); ActionTypes.ResetMacMouseSpeedSettings
const mouseSpeedDefaultSettings = {}; ),
const mouseSpeedProps = [ withLatestFrom(this.store.select(getUserConfiguration)),
'mouseMoveInitialSpeed', map(([action, config]) => new LoadResetUserConfigurationAction(config))
'mouseMoveAcceleration',
'mouseMoveDeceleratedSpeed',
'mouseMoveBaseSpeed',
'mouseMoveAcceleratedSpeed',
'mouseScrollInitialSpeed',
'mouseScrollAcceleration',
'mouseScrollDeceleratedSpeed',
'mouseScrollBaseSpeed',
'mouseScrollAcceleratedSpeed'
];
mouseSpeedProps.forEach(prop => {
mouseSpeedDefaultSettings[prop] = config[prop];
});
return of(new LoadResetUserConfigurationAction(<UserConfiguration>mouseSpeedDefaultSettings));
})
); );
@Effect() resetUserConfiguration$: Observable<Action> = this.actions$ @Effect() resetUserConfiguration$: Observable<Action> = this.actions$

View File

@@ -14,8 +14,10 @@ import {
import * as KeymapActions from '../actions/keymap'; import * as KeymapActions from '../actions/keymap';
import * as MacroActions from '../actions/macro'; import * as MacroActions from '../actions/macro';
import * as UserConfig from '../actions/user-config'; import * as UserConfig from '../actions/user-config';
import * as DeviceActions from '../actions/device';
import { isValidName } from '../../util'; import { isValidName } from '../../util';
import { defaultLastEditKey, LastEditedKey } from '../../models'; import { defaultLastEditKey, LastEditedKey } from '../../models';
import { getDefaultMacMouseSpeeds, getDefaultPcMouseSpeeds } from '../../services/default-mouse-speeds';
export interface State { export interface State {
userConfiguration: UserConfiguration; userConfiguration: UserConfiguration;
@@ -31,7 +33,7 @@ export const initialState: State = {
export function reducer( export function reducer(
state = initialState, state = initialState,
action: KeymapActions.Actions | MacroActions.Actions | UserConfig.Actions action: KeymapActions.Actions | MacroActions.Actions | UserConfig.Actions | DeviceActions.Actions
): State { ): State {
switch (action.type) { switch (action.type) {
case UserConfig.ActionTypes.ApplyUserConfigurationFromFile: case UserConfig.ActionTypes.ApplyUserConfigurationFromFile:
@@ -52,6 +54,30 @@ export function reducer(
}; };
} }
case DeviceActions.ActionTypes.ResetPcMouseSpeedSettings:
return {
...state,
userConfiguration: Object.assign(
new UserConfiguration(),
{
...state.userConfiguration,
...getDefaultPcMouseSpeeds()
}
)
};
case DeviceActions.ActionTypes.ResetMacMouseSpeedSettings:
return {
...state,
userConfiguration: Object.assign(
new UserConfiguration(),
{
...state.userConfiguration,
...getDefaultMacMouseSpeeds()
}
)
};
case KeymapActions.ActionTypes.Add: case KeymapActions.ActionTypes.Add:
case KeymapActions.ActionTypes.Duplicate: { case KeymapActions.ActionTypes.Duplicate: {
const newKeymap: Keymap = new Keymap((action as KeymapActions.AddKeymapAction).payload); const newKeymap: Keymap = new Keymap((action as KeymapActions.AddKeymapAction).payload);