Skip to content
This repository was archived by the owner on Dec 2, 2023. It is now read-only.

Commit 38f4b03

Browse files
committed
Add UI Zoom Feature
- Add UI Zoom feature. - Added relevent option in settings dialog.
1 parent 1ed4fdc commit 38f4b03

File tree

5 files changed

+73
-0
lines changed

5 files changed

+73
-0
lines changed

src/renderer/actions/SettingsActions.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export function getSettings(): SettingsStoreModel {
2222
},
2323
system: {
2424
unobtrusive: true,
25+
zoomFactor: 1.0,
2526
},
2627
playlist: {
2728
folder: true,
@@ -146,3 +147,16 @@ export async function setFolderPlaylistMode(
146147
store.store = draft.settings;
147148
});
148149
}
150+
151+
export async function setZoomFactor(
152+
value: number,
153+
state?: AppStoreModel
154+
): Promise<AppStoreModel> {
155+
return produce<AppStoreModel>(state, draft => {
156+
const store = new electronStore<SettingsStoreModel>({
157+
name: 'settings',
158+
});
159+
draft.settings.system.zoomFactor = value;
160+
store.store = draft.settings;
161+
});
162+
}

src/renderer/components/settings/System.tsx

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { Button } from '../elements/Button';
55
import AppStore from '../../stores/AppStore';
66
import Notifications from '../../libraries/Notifications';
77
import { Checkbox } from '../elements/Checkbox';
8+
import { Icon } from '../elements/Icon';
9+
import { webFrame } from 'electron';
810

911
export interface SystemSettingsProps {
1012
store: AppStore;
@@ -24,10 +26,54 @@ export default class SystemSettings extends React.Component<
2426
this.props.store.settings.setUnobtrusiveMode(checked);
2527
};
2628

29+
handleZoomPlus = () => {
30+
if (webFrame.getZoomFactor() < 4) {
31+
let value = parseFloat((webFrame.getZoomFactor() + 0.1).toFixed(1));
32+
webFrame.setZoomFactor(value);
33+
this.props.store.settings.setZoomFactor(value);
34+
}
35+
};
36+
37+
handleZoomMinus = () => {
38+
if (webFrame.getZoomFactor() > 0) {
39+
let value = parseFloat((webFrame.getZoomFactor() - 0.1).toFixed(1));
40+
webFrame.setZoomFactor(value);
41+
this.props.store.settings.setZoomFactor(value);
42+
}
43+
};
44+
45+
handleResetZoom = () => {
46+
webFrame.setZoomFactor(1);
47+
};
48+
2749
render() {
2850
const { store } = this.props;
2951
return (
3052
<div className="system-settings">
53+
<label>User Interface Zoom</label>
54+
<div className="settings-zoom">
55+
<Button
56+
type="link"
57+
icon={true}
58+
onClick={this.handleZoomMinus}>
59+
<Icon size="16" icon="minus" />
60+
</Button>
61+
<Textbox
62+
value={`${(
63+
store.state.settings.system.zoomFactor * 100
64+
).toFixed()}%`}
65+
readOnly
66+
/>
67+
<Button
68+
type="link"
69+
icon={true}
70+
onClick={this.handleZoomPlus}>
71+
<Icon size="16" icon="plus" />
72+
</Button>
73+
<Button type="default" onClick={this.handleResetZoom}>
74+
Reset Zoom
75+
</Button>
76+
</div>
3177
<div className="settings-banner">
3278
<h5>
3379
These settings will work only after restarting the app

src/renderer/stores/AppContext.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import * as SearchActions from '../actions/SearchActions';
99
import * as PlaylistActions from '../actions/PlaylistActions';
1010
import AppStore, { ActionsModel } from './AppStore';
1111
import Player from '../libraries/Player';
12+
import { webFrame } from 'electron';
1213

1314
const defaultValue: AppStore = {
1415
state: {
@@ -49,6 +50,7 @@ export class AppStoreProvider extends React.Component<any, AppStoreModel> {
4950
this.state = defaultValue.state;
5051
Player.player.muted = defaultValue.state.settings.player.mute;
5152
Player.setVolume(defaultValue.state.settings.player.volume);
53+
webFrame.setZoomFactor(defaultValue.state.settings.system.zoomFactor);
5254

5355
this.actions = {
5456
init: null,

src/renderer/stores/AppStoreModel.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export interface SettingsStoreModel {
3737
};
3838
system: {
3939
unobtrusive: boolean;
40+
zoomFactor: number;
4041
};
4142
playlist: {
4243
folder: boolean;

src/renderer/styles/containers/_settings.scss

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,13 @@
2424
background: var(--accent-base-color);
2525
color: var(--text-accent-color);
2626
}
27+
28+
.settings-zoom {
29+
display: flex;
30+
align-items: center;
31+
justify-content: space-between;
32+
33+
.textbox {
34+
flex: 1;
35+
}
36+
}

0 commit comments

Comments
 (0)