siyuan/app/src/window/setHeader.ts

72 lines
2.8 KiB
TypeScript

import {isWindow} from "../util/functions";
import {Wnd} from "../layout/Wnd";
import {getAllTabs, getAllWnds} from "../layout/getAll";
import {Editor} from "../editor";
import {Asset} from "../asset";
import {Constants} from "../constants";
import { ipcRenderer } from "electron";
export const setTabPosition = () => {
if (!isWindow()) {
return;
}
const wndsTemp: Wnd[] = [];
getAllWnds(window.siyuan.layout.layout, wndsTemp);
wndsTemp.forEach(async item => {
const headerElement = item.headersElement.parentElement;
const rect = headerElement.getBoundingClientRect();
const dragElement = headerElement.querySelector(".item--readonly .fn__flex-1") as HTMLElement;
if (rect.top <= 0) {
dragElement.style.height = dragElement.parentElement.clientHeight + "px";
// @ts-ignore
dragElement.style.WebkitAppRegion = "drag";
} else {
// @ts-ignore
dragElement.style.WebkitAppRegion = "";
}
const headersLastElement = headerElement.lastElementChild as HTMLElement;
if ("darwin" === window.siyuan.config.system.os) {
const isFullScreen = await ipcRenderer.invoke(Constants.SIYUAN_GET, {
cmd: "isFullScreen",
});
if (rect.top <= 0 && rect.left <= 0 && !isFullScreen) {
// 用 marginLeft 左侧底部无线条
item.headersElement.style.paddingLeft = "var(--b3-toolbar-left-mac)";
headersLastElement.style.paddingRight = "42px";
} else {
item.headersElement.style.paddingLeft = "";
headersLastElement.style.paddingRight = "";
}
}
// 显示器缩放后像素存在小数点偏差 https://github.com/siyuan-note/siyuan/issues/7355
if (rect.top <= 0 && rect.right + 8 >= window.innerWidth) {
headersLastElement.style.paddingRight = (42 * ("darwin" === window.siyuan.config.system.os ? 1 : 4)) + "px";
} else {
headersLastElement.style.paddingRight = "";
}
});
};
export const setModelsHash = () => {
if (!isWindow()) {
return;
}
let hash = "";
getAllTabs().forEach(tab => {
if (!tab.model) {
const initTab = tab.headElement.getAttribute("data-initdata");
if (initTab) {
const initTabData = JSON.parse(initTab);
if (initTabData.instance === "Editor") {
hash += initTabData.rootId + Constants.ZWSP;
}
}
} else if (tab.model instanceof Editor) {
hash += tab.model.editor.protyle.block.rootID + Constants.ZWSP;
} else if (tab.model instanceof Asset) {
hash += tab.model.path + Constants.ZWSP;
}
});
window.location.hash = hash;
};