fixed headerbar

This commit is contained in:
Vomitblood 2024-11-10 21:51:27 +08:00
parent c084b5fa48
commit e92ff39658
3 changed files with 24 additions and 50 deletions

Binary file not shown.

View file

@ -2,13 +2,28 @@
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
"app": { "app": {
"security": { "security": {
"capabilities": [
{
"identifier": "my-identifier",
"permissions": [
"core:window:default",
"core:window:allow-start-dragging",
"core:window:allow-is-fullscreen",
"core:window:allow-minimize",
"core:window:allow-toggle-maximize",
"core:window:allow-close"
],
"windows": [
"main"
]
}
],
"csp": null "csp": null
}, },
"windows": [ "windows": [
{ {
"decorations": false, "decorations": false,
"height": 600, "height": 600,
"maximized": true,
"resizable": true, "resizable": true,
"title": "CSPJ", "title": "CSPJ",
"width": 800 "width": 800

View file

@ -1,54 +1,26 @@
import { import { Close, Minimize, WebAssetOutlined } from "@mui/icons-material";
Close,
Fullscreen,
FullscreenExit,
Minimize,
WebAssetOutlined,
} from "@mui/icons-material";
import { Box, IconButton, Stack, useTheme } from "@mui/material"; import { Box, IconButton, Stack, useTheme } from "@mui/material";
import { import { getCurrentWindow } from "@tauri-apps/api/window";
getCurrentWebviewWindow,
WebviewWindow,
} from "@tauri-apps/api/webviewWindow";
import { useEffect, useState } from "react";
export const WindowButtons = () => { export const WindowButtons = () => {
// contexts // contexts
const userTheme = useTheme(); const userTheme = useTheme();
// states
const [appWindow, setAppWindow] = useState<WebviewWindow>();
// explanation:
// this is needed due to the server-sided nature of next js,
// this means that the window object might not be available on first load
// we will use dynamic imports to load the window object only when needed
// in hindsight, using next js for this project was a mistake
// using create-react-app or vite would have been a better choice just to generate a static site
const initializeAppWindow = async () => {
setAppWindow(getCurrentWebviewWindow());
};
const toggleFullscreen = async () => {
appWindow?.setFullscreen(!(await appWindow?.isFullscreen()));
};
const minimize = () => { const minimize = () => {
appWindow?.minimize(); const appWindow = getCurrentWindow();
appWindow.minimize();
}; };
const toggleMaximize = () => { const toggleMaximize = () => {
appWindow?.toggleMaximize(); const appWindow = getCurrentWindow();
appWindow.toggleMaximize();
}; };
const close = async () => { const close = async () => {
appWindow?.close(); const appWindow = getCurrentWindow();
appWindow.close();
}; };
useEffect(() => {
initializeAppWindow();
});
return ( return (
<Box <Box
sx={{ sx={{
@ -58,19 +30,6 @@ export const WindowButtons = () => {
}} }}
> >
<Stack direction="row" spacing={1}> <Stack direction="row" spacing={1}>
<IconButton
onClick={toggleFullscreen}
size="small"
sx={{
backgroundColor: userTheme.palette.grey[800],
}}
>
{appWindow?.isFullscreen() ? (
<FullscreenExit fontSize="inherit" />
) : (
<Fullscreen fontSize="inherit" />
)}
</IconButton>
<IconButton <IconButton
onClick={minimize} onClick={minimize}
size="small" size="small"