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 './module';
export * from './module-configuration';
export * from './mouse-speed-configuration';
export * from './user-configuration';
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 { SecondaryRoleAction } from './secondary-role-action';
import { isScancodeExists } from './scancode-checker';
import { MouseSpeedConfiguration } from './mouse-speed-configuration';
export class UserConfiguration {
export class UserConfiguration implements MouseSpeedConfiguration {
@assertUInt16
userConfigMajorVersion: number;

View File

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

View File

@@ -14,8 +14,8 @@
}
.mouse-speed-reset-button {
display: block;
margin-bottom: 4rem;
margin-bottom: 2rem;
margin-right: 1em;
}
.mouse-speed-setting {
@@ -25,4 +25,9 @@
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 { Observable, Subscription } from 'rxjs';
import { UserConfiguration } from 'uhk-common';
import { ResetMouseSpeedSettingsAction } from '../../../store/actions/device';
import { ResetPcMouseSpeedSettingsAction, ResetMacMouseSpeedSettingsAction } from '../../../store/actions/device';
const MOUSE_MOVE_VALUE_MULTIPLIER = 25;
@@ -144,7 +144,11 @@ export class MouseSpeedComponent implements OnInit, OnDestroy {
}));
}
resetToDefault() {
this.store.dispatch(new ResetMouseSpeedSettingsAction());
resetToPcDefault() {
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',
HideSaveToKeyboardButton = '[device] hide save to keyboard button',
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',
UpdateFirmwareWith = '[device] update firmware with',
UpdateFirmwareReply = '[device] update firmware reply',
@@ -113,8 +114,12 @@ export class UpdateFirmwareFailedAction implements Action {
}
}
export class ResetMouseSpeedSettingsAction implements Action {
type = ActionTypes.ResetMouseSpeedSettings;
export class ResetPcMouseSpeedSettingsAction implements Action {
type = ActionTypes.ResetPcMouseSpeedSettings;
}
export class ResetMacMouseSpeedSettingsAction implements Action {
type = ActionTypes.ResetMacMouseSpeedSettings;
}
export class HardwareModulesLoadedAction implements Action {
@@ -161,7 +166,8 @@ export type Actions
| SaveToKeyboardSuccessAction
| SaveToKeyboardSuccessFailed
| HideSaveToKeyboardButton
| ResetMouseSpeedSettingsAction
| ResetPcMouseSpeedSettingsAction
| ResetMacMouseSpeedSettingsAction
| ResetUserConfigurationAction
| UpdateFirmwareAction
| UpdateFirmwareWithAction

View File

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

View File

@@ -14,8 +14,10 @@ import {
import * as KeymapActions from '../actions/keymap';
import * as MacroActions from '../actions/macro';
import * as UserConfig from '../actions/user-config';
import * as DeviceActions from '../actions/device';
import { isValidName } from '../../util';
import { defaultLastEditKey, LastEditedKey } from '../../models';
import { getDefaultMacMouseSpeeds, getDefaultPcMouseSpeeds } from '../../services/default-mouse-speeds';
export interface State {
userConfiguration: UserConfiguration;
@@ -31,7 +33,7 @@ export const initialState: State = {
export function reducer(
state = initialState,
action: KeymapActions.Actions | MacroActions.Actions | UserConfig.Actions
action: KeymapActions.Actions | MacroActions.Actions | UserConfig.Actions | DeviceActions.Actions
): State {
switch (action.type) {
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.Duplicate: {
const newKeymap: Keymap = new Keymap((action as KeymapActions.AddKeymapAction).payload);