This commit is contained in:
Vanessa 2023-05-11 09:55:33 +08:00
parent a52cf1eb29
commit 8a53c82a27
12 changed files with 119 additions and 35 deletions

View file

@ -1,4 +1,4 @@
import {isCtrl, isMac, setStorageVal, updateHotkeyTip, writeText} from "../protyle/util/compatibility";
import {isCtrl, isMac, updateHotkeyTip, writeText} from "../protyle/util/compatibility";
import {matchHotKey} from "../protyle/util/hotKey";
import {openSearch} from "../search/spread";
import {
@ -43,7 +43,7 @@ import {editor} from "../config/editor";
import {hintMoveBlock} from "../protyle/hint/extend";
import {Backlink} from "../layout/dock/Backlink";
/// #if !BROWSER
import {webFrame} from "electron";
import {setZoom} from "../layout/topBar";
/// #endif
import {openHistory} from "../history/history";
import {openCard, openCardByData} from "../card/openCard";
@ -575,39 +575,17 @@ export const globalShortcut = (app: App) => {
/// #if !BROWSER
if (matchHotKey("⌘=", event) && !hasClosestByClassName(target, "pdf__outer")) {
Constants.SIZE_ZOOM.find((item, index) => {
if (item === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
window.siyuan.storage[Constants.LOCAL_ZOOM] = Constants.SIZE_ZOOM[index + 1] || 3;
webFrame.setZoomFactor(window.siyuan.storage[Constants.LOCAL_ZOOM]);
if (!isTabWindow) {
setStorageVal(Constants.LOCAL_ZOOM, window.siyuan.storage[Constants.LOCAL_ZOOM]);
}
return true;
}
});
setZoom("zoomIn")
event.preventDefault();
return;
}
if (matchHotKey("⌘0", event)) {
webFrame.setZoomFactor(1);
window.siyuan.storage[Constants.LOCAL_ZOOM] = 1;
if (!isTabWindow) {
setStorageVal(Constants.LOCAL_ZOOM, 1);
}
setZoom("restore")
event.preventDefault();
return;
}
if (matchHotKey("⌘-", event) && !hasClosestByClassName(target, "pdf__outer")) {
Constants.SIZE_ZOOM.find((item, index) => {
if (item === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
window.siyuan.storage[Constants.LOCAL_ZOOM] = Constants.SIZE_ZOOM[index - 1] || 0.25;
webFrame.setZoomFactor(window.siyuan.storage[Constants.LOCAL_ZOOM]);
if (!isTabWindow) {
setStorageVal(Constants.LOCAL_ZOOM, window.siyuan.storage[Constants.LOCAL_ZOOM]);
}
return true;
}
});
setZoom("zoomOut")
event.preventDefault();
return;
}

View file

@ -1,5 +1,5 @@
import {getWorkspaceName} from "../util/noRelyPCFunction";
import {updateHotkeyTip} from "../protyle/util/compatibility";
import {setStorageVal, updateHotkeyTip} from "../protyle/util/compatibility";
import {processSync} from "../dialog/processSystem";
import {goBack, goForward} from "../util/backForward";
import {syncGuide} from "../sync/syncGuide";
@ -10,6 +10,11 @@ import {setMode} from "../util/assets";
import {openSetting} from "../config";
import {openSearch} from "../search/spread";
import {App} from "../index";
/// #if !BROWSER
import {webFrame} from "electron";
/// #endif
import {Constants} from "../constants";
import {isBrowser, isWindow} from "../util/functions";
export const updateEditModeElement = () => {
const target = document.querySelector("#barReadonly");
@ -45,6 +50,9 @@ export const initBar = (app: App) => {
<div id="barSearch" class="toolbar__item b3-tooltips b3-tooltips__sw" aria-label="${window.siyuan.languages.globalSearch} ${updateHotkeyTip(window.siyuan.config.keymap.general.globalSearch.custom)}">
<svg><use xlink:href="#iconSearch"></use></svg>
</div>
<div id="barZoom" class="toolbar__item b3-tooltips b3-tooltips__sw${(window.siyuan.storage[Constants.LOCAL_ZOOM] === 1 || isBrowser()) ? " fn__none" : ""}" aria-label="${window.siyuan.languages.zoom}">
<svg><use xlink:href="#iconZoom${window.siyuan.storage[Constants.LOCAL_ZOOM] > 1 ? "In" : "Out"}"></use></svg>
</div>
<div id="barReadonly" class="toolbar__item b3-tooltips b3-tooltips__sw${window.siyuan.config.readonly ? " fn__none" : ""}${window.siyuan.config.editor.readOnly ? " toolbar__item--active" : ""}" aria-label="${window.siyuan.languages.use} ${window.siyuan.config.editor.readOnly ? window.siyuan.languages.editMode : window.siyuan.languages.editReadonly} ${updateHotkeyTip(window.siyuan.config.keymap.general.editMode.custom)}">
<svg><use xlink:href="#icon${window.siyuan.config.editor.readOnly ? "Preview" : "Edit"}"></use></svg>
</div>
@ -123,8 +131,82 @@ export const initBar = (app: App) => {
openSearch(window.siyuan.config.keymap.general.globalSearch.custom);
event.stopPropagation();
break;
} else if (target.id === "barZoom") {
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
window.siyuan.menus.menu.element.getAttribute("data-name") === "barZoom") {
window.siyuan.menus.menu.remove();
return;
}
window.siyuan.menus.menu.remove();
window.siyuan.menus.menu.element.setAttribute("data-name", "barZoom");
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.zoomIn,
icon: "iconZoomIn",
accelerator: "⌘=",
click: () => {
setZoom("zoomIn")
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.zoomOut,
accelerator: "⌘-",
icon: "iconZoomOut",
click: () => {
setZoom("zoomOut")
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.reset,
accelerator: "⌘0",
click: () => {
setZoom("restore")
}
}).element);
const rect = target.getBoundingClientRect();
window.siyuan.menus.menu.popup({x: rect.right, y: rect.bottom}, true);
event.stopPropagation();
break;
}
target = target.parentElement;
}
});
};
export const setZoom = (type: "zoomIn" | "zoomOut" | "restore") => {
/// #if !BROWSER
const isTabWindow = isWindow();
let zoom = 1;
if (type === "zoomIn") {
Constants.SIZE_ZOOM.find((item, index) => {
if (item === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
zoom = Constants.SIZE_ZOOM[index + 1] || 3;
return true;
}
});
} else if (type === "zoomOut") {
Constants.SIZE_ZOOM.find((item, index) => {
if (item === window.siyuan.storage[Constants.LOCAL_ZOOM]) {
zoom = Constants.SIZE_ZOOM[index - 1] || 0.25;
return true;
}
});
}
webFrame.setZoomFactor(zoom);
window.siyuan.storage[Constants.LOCAL_ZOOM] = zoom;
if (!isTabWindow) {
setStorageVal(Constants.LOCAL_ZOOM, zoom);
}
const barZoomElement = document.getElementById("barZoom");
if (zoom === 1) {
barZoomElement.classList.add("fn__none");
} else {
if (zoom > 1) {
barZoomElement.querySelector("use").setAttribute("xlink:href", "#iconZoomIn")
} else {
barZoomElement.querySelector("use").setAttribute("xlink:href", "#iconZoomOut")
}
barZoomElement.classList.remove("fn__none");
}
/// #endif
}