From f3e1ca143d90e4a9d0648eea65fd084bb3fcb291 Mon Sep 17 00:00:00 2001 From: purocean Date: Tue, 28 Dec 2021 18:34:14 +0800 Subject: [PATCH] feat: add sync scroll control --- src/renderer/components/SvgIcon.vue | 1 + .../plugins/status-bar-control-center.ts | 9 +++++++++ src/renderer/services/view.ts | 19 +++++++++++++------ src/renderer/support/store.ts | 4 ++++ src/share/i18n/languages/en.ts | 3 ++- src/share/i18n/languages/zh-CN.ts | 1 + 6 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/renderer/components/SvgIcon.vue b/src/renderer/components/SvgIcon.vue index 136e2e01..cb474fef 100644 --- a/src/renderer/components/SvgIcon.vue +++ b/src/renderer/components/SvgIcon.vue @@ -40,6 +40,7 @@ export default defineComponent({ 'eye-regular': '', 'text-width-solid': '', 'keyboard-solid': '', + 'columns-solid': '', } const name = props.name! diff --git a/src/renderer/plugins/status-bar-control-center.ts b/src/renderer/plugins/status-bar-control-center.ts index 58cfb986..3e350494 100644 --- a/src/renderer/plugins/status-bar-control-center.ts +++ b/src/renderer/plugins/status-bar-control-center.ts @@ -46,6 +46,15 @@ export default { ctx.layout.toggleView() } }, + { + type: 'btn', + icon: 'columns-solid', + title: ctx.i18n.t('control-center.switch.sync-scroll'), + checked: ctx.store.state.syncScroll, + onClick: () => { + ctx.view.toggleSyncScroll() + } + }, { type: 'btn', icon: 'paint-roller', diff --git a/src/renderer/services/view.ts b/src/renderer/services/view.ts index 541482bd..058160df 100644 --- a/src/renderer/services/view.ts +++ b/src/renderer/services/view.ts @@ -12,7 +12,7 @@ import { switchDoc } from './document' export type MenuItem = Components.ContextMenu.Item export type BuildContextMenu = (items: MenuItem[], e: MouseEvent) => void -let enableSyncScroll = true +let tmpEnableSyncScroll = true let syncScrollTimer: any const contextMenuFunList: BuildContextMenu[] = [] @@ -172,8 +172,15 @@ export function exitPresent () { * @param flag */ export function toggleAutoPreview (flag?: boolean) { - const showXterm = store.state.autoPreview - store.commit('setAutoPreview', typeof flag === 'boolean' ? flag : !showXterm) + store.commit('setAutoPreview', typeof flag === 'boolean' ? flag : !store.state.autoPreview) +} + +/** + * Toggle sync scroll. + * @param flag + */ +export function toggleSyncScroll (flag?: boolean) { + store.commit('setSyncScroll', typeof flag === 'boolean' ? flag : !store.state.syncScroll) } /** @@ -204,7 +211,7 @@ export function getContextMenuItems (e: MouseEvent) { * @returns */ export function getEnableSyncScroll () { - return enableSyncScroll + return tmpEnableSyncScroll && store.state.syncScroll } /** @@ -214,10 +221,10 @@ export function getEnableSyncScroll () { */ export async function disableSyncScrollAwhile (fn: Function, timeout = 500) { clearTimeout(syncScrollTimer) - enableSyncScroll = false + tmpEnableSyncScroll = false await fn() syncScrollTimer = setTimeout(() => { - enableSyncScroll = true + tmpEnableSyncScroll = true }, timeout) } diff --git a/src/renderer/support/store.ts b/src/renderer/support/store.ts index 0807242d..6bf8c1df 100644 --- a/src/renderer/support/store.ts +++ b/src/renderer/support/store.ts @@ -12,6 +12,7 @@ export const initState = { showEditor: storage.get('showEditor', true), showXterm: false, autoPreview: true, + syncScroll: true, showSetting: false, showExport: false, showControlCenter: false, @@ -74,6 +75,9 @@ export default createStore({ setIsFullscreen (state, data) { state.isFullscreen = data }, + setSyncScroll (state, data) { + state.syncScroll = data + }, setAutoPreview (state, data) { state.autoPreview = data }, diff --git a/src/share/i18n/languages/en.ts b/src/share/i18n/languages/en.ts index 40e2634f..69e54a91 100644 --- a/src/share/i18n/languages/en.ts +++ b/src/share/i18n/languages/en.ts @@ -411,7 +411,8 @@ const data = { 'side-bar': 'Side Bar %s', 'editor': 'Editor %s', 'view': 'Editor %s', - 'sync-rendering': 'Synchronous rendering', + 'sync-scroll': 'Synchronous Scrolling', + 'sync-rendering': 'Synchronous Rendering', 'word-wrap': 'Word Wrap %s', 'typewriter-mode': 'Typewriter Mode', }, diff --git a/src/share/i18n/languages/zh-CN.ts b/src/share/i18n/languages/zh-CN.ts index 46b77c70..aea8b089 100644 --- a/src/share/i18n/languages/zh-CN.ts +++ b/src/share/i18n/languages/zh-CN.ts @@ -412,6 +412,7 @@ const data: BaseLanguage = { 'side-bar': '侧栏 %s', 'editor': '编辑器 %s', 'view': '预览 %s', + 'sync-scroll': '同步滚动', 'sync-rendering': '同步渲染', 'word-wrap': '编辑器换行 %s', 'typewriter-mode': '打字机模式',