From 0954f70d71dbdd4689a5b655d03fa2bf6f6ffe3b Mon Sep 17 00:00:00 2001 From: Jefferey Neuffer <35882868+j7126@users.noreply.github.com> Date: Wed, 12 Jan 2022 04:32:43 +1000 Subject: [PATCH] Add zoom persistence (#2858) --- docs/PREFERENCES.md | 1 + src/main/preferences/schema.json | 7 ++++ src/renderer/pages/app.vue | 7 ++++ src/renderer/prefComponents/general/config.js | 41 +++++++++++++++++++ src/renderer/prefComponents/general/index.vue | 9 ++++ src/renderer/store/editor.js | 7 +++- src/renderer/store/preferences.js | 1 + static/preference.json | 1 + 8 files changed, 73 insertions(+), 1 deletion(-) diff --git a/docs/PREFERENCES.md b/docs/PREFERENCES.md index 280ce279..2b5d3e51 100644 --- a/docs/PREFERENCES.md +++ b/docs/PREFERENCES.md @@ -11,6 +11,7 @@ Preferences can be controlled and modified in the settings window or via the `pr | titleBarStyle | String | custom | The title bar style on Linux and Window: `custom` or `native` | | openFilesInNewWindow | Boolean | false | true, false | | openFolderInNewWindow | Boolean | false | true, false | +| zoom | Number | 1.0 | The zoom level. Between 0.5 and 2.0 inclusive. | | hideScrollbar | Boolean | false | Whether to hide scrollbars. Optional value: true, false | | wordWrapInToc | Boolean | false | Whether to enable word wrap in TOC. Optional value: true, false | | aidou | Boolean | true | Enable aidou. Optional value: true, false | diff --git a/src/main/preferences/schema.json b/src/main/preferences/schema.json index 827ec4f9..991b2778 100644 --- a/src/main/preferences/schema.json +++ b/src/main/preferences/schema.json @@ -28,6 +28,13 @@ "type": "boolean", "default": false }, + "zoom": { + "description": "General--The zoom level. Between 0.5 and 2.0 inclusive.", + "type": "number", + "minimum": 0.5, + "maximum": 2.0, + "default": 1.0 + }, "hideScrollbar": { "description": "General--Whether to hide scrollbars.", "type": "boolean", diff --git a/src/renderer/pages/app.vue b/src/renderer/pages/app.vue index 32533fb8..9f1595d9 100644 --- a/src/renderer/pages/app.vue +++ b/src/renderer/pages/app.vue @@ -54,6 +54,7 @@ import { loadingPageMixins } from '@/mixins' import { mapState } from 'vuex' import bus from '@/bus' import { DEFAULT_STYLE } from '@/config' +import { ipcRenderer } from 'electron' export default { name: 'marktext', @@ -82,6 +83,9 @@ export default { theme: state => state.preferences.theme, textDirection: state => state.preferences.textDirection }), + ...mapState({ + zoom: state => state.preferences.zoom + }), ...mapState({ projectTree: state => state.project.projectTree, pathname: state => state.editor.currentFile.pathname, @@ -103,6 +107,9 @@ export default { if (value !== oldValue) { addThemeStyle(value) } + }, + zoom: function (zoom) { + ipcRenderer.emit('mt::window-zoom', null, zoom) } }, created () { diff --git a/src/renderer/prefComponents/general/config.js b/src/renderer/prefComponents/general/config.js index 747bbea7..8ef14d09 100644 --- a/src/renderer/prefComponents/general/config.js +++ b/src/renderer/prefComponents/general/config.js @@ -6,6 +6,47 @@ export const titleBarStyleOptions = [{ value: 'native' }] +export const zoomOptions = [{ + label: '50.0%', + value: 0.5 +}, { + label: '62.5%', + value: 0.625 +}, { + label: '75.0%', + value: 0.75 +}, { + label: '87.5%', + value: 0.875 +}, { + label: '100.0%', + value: 1.0 +}, { + label: '112.5%', + value: 1.125 +}, { + label: '125.0%', + value: 1.25 +}, { + label: '137.5%', + value: 1.375 +}, { + label: '150.0%', + value: 1.5 +}, { + label: '162.5%', + value: 1.625 +}, { + label: '175.0%', + value: 1.75 +}, { + label: '187.5%', + value: 1.875 +}, { + label: '200.0%', + value: 2.0 +}] + export const fileSortByOptions = [{ label: 'Creation time', value: 'created' diff --git a/src/renderer/prefComponents/general/index.vue b/src/renderer/prefComponents/general/index.vue index dc1f632f..61a113ae 100644 --- a/src/renderer/prefComponents/general/index.vue +++ b/src/renderer/prefComponents/general/index.vue @@ -51,6 +51,12 @@ :bool="openFolderInNewWindow" :onChange="value => onSelectChange('openFolderInNewWindow', value)" > + @@ -129,6 +135,7 @@ import { isOsx } from '@/util' import { titleBarStyleOptions, + zoomOptions, fileSortByOptions, languageOptions } from './config' @@ -143,6 +150,7 @@ export default { }, data () { this.titleBarStyleOptions = titleBarStyleOptions + this.zoomOptions = zoomOptions this.fileSortByOptions = fileSortByOptions this.languageOptions = languageOptions this.isOsx = isOsx @@ -156,6 +164,7 @@ export default { defaultDirectoryToOpen: state => state.preferences.defaultDirectoryToOpen, openFilesInNewWindow: state => state.preferences.openFilesInNewWindow, openFolderInNewWindow: state => state.preferences.openFolderInNewWindow, + zoom: state => state.preferences.zoom, hideScrollbar: state => state.preferences.hideScrollbar, wordWrapInToc: state => state.preferences.wordWrapInToc, aidou: state => state.preferences.aidou, diff --git a/src/renderer/store/editor.js b/src/renderer/store/editor.js index 1f8e98c3..8f87a569 100644 --- a/src/renderer/store/editor.js +++ b/src/renderer/store/editor.js @@ -1219,8 +1219,13 @@ const actions = { return ipcRenderer.sendSync('mt::ask-for-image-path') }, - LISTEN_WINDOW_ZOOM () { + LISTEN_WINDOW_ZOOM ({ dispatch, rootState }) { ipcRenderer.on('mt::window-zoom', (e, zoomFactor) => { + zoomFactor = Number.parseFloat(zoomFactor.toFixed(3)) // prevent float rounding errors + const { zoom } = rootState.preferences + if (zoom !== zoomFactor) { + dispatch('SET_SINGLE_PREFERENCE', { type: 'zoom', value: zoomFactor }) + } webFrame.setZoomFactor(zoomFactor) }) } diff --git a/src/renderer/store/preferences.js b/src/renderer/store/preferences.js index fb5aeb41..10f364b1 100644 --- a/src/renderer/store/preferences.js +++ b/src/renderer/store/preferences.js @@ -8,6 +8,7 @@ const state = { titleBarStyle: 'custom', openFilesInNewWindow: false, openFolderInNewWindow: false, + zoom: 1.0, hideScrollbar: false, wordWrapInToc: false, aidou: true, diff --git a/static/preference.json b/static/preference.json index b3312d81..87c95036 100644 --- a/static/preference.json +++ b/static/preference.json @@ -4,6 +4,7 @@ "titleBarStyle": "custom", "openFilesInNewWindow": false, "openFolderInNewWindow": false, + "zoom": 1.0, "hideScrollbar": false, "wordWrapInToc": false, "aidou": true,