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:
committed by
László Monda
parent
2b84101975
commit
a409c219d8
@@ -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');
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
31
packages/uhk-web/src/app/services/default-mouse-speeds.ts
Normal file
31
packages/uhk-web/src/app/services/default-mouse-speeds.ts
Normal 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
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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$
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user