mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-22 13:48:11 +08:00
* unfinished implementation * Add frontend for the empty panel screen * Add an icon for Folder based on NodeFolder * fixed messages causing peicees of ui not to render on new document * Standardize nextTick syntax * WIP generisization of component subscriptions (not compiling yet) * Fix crash when loading font and there is no active document * Only advertise tool actions with a document * Fix failure to create new document * Initalise the properties panel * Fix highlight tab, canvas jump, warns and layer tree * Fix tests * Possibly fix some things? * Move WorkingColors layout definition to backend * Standardize action macro formatting * Provide typing for widgets in TS/Vue and associated cleanup * Fix viewport positioning initialization * Fix menu bar init at startup not document creation * Fix no viewport bounds bug * Change !=0 to >0 * Simplify the init system Closes #656 Co-authored-by: Keavon Chambers <keavon@keavon.com> Co-authored-by: 0hypercube <0hypercube@gmail.com>
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { reactive, readonly } from "vue";
|
|
|
|
import { Editor } from "@/wasm-communication/editor";
|
|
|
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
export function createFullscreenState(_: Editor) {
|
|
const state = reactive({
|
|
windowFullscreen: false,
|
|
keyboardLocked: false,
|
|
});
|
|
|
|
function fullscreenModeChanged(): void {
|
|
state.windowFullscreen = Boolean(document.fullscreenElement);
|
|
if (!state.windowFullscreen) state.keyboardLocked = false;
|
|
}
|
|
|
|
async function enterFullscreen(): Promise<void> {
|
|
await document.documentElement.requestFullscreen();
|
|
|
|
if (keyboardLockApiSupported) {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
await (navigator as any).keyboard.lock(["ControlLeft", "ControlRight"]);
|
|
state.keyboardLocked = true;
|
|
}
|
|
}
|
|
|
|
async function exitFullscreen(): Promise<void> {
|
|
await document.exitFullscreen();
|
|
}
|
|
|
|
async function toggleFullscreen(): Promise<void> {
|
|
if (state.windowFullscreen) await exitFullscreen();
|
|
else await enterFullscreen();
|
|
}
|
|
|
|
// Experimental Keyboard API: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/keyboard
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const keyboardLockApiSupported: Readonly<boolean> = "keyboard" in navigator && (navigator as any).keyboard && "lock" in (navigator as any).keyboard;
|
|
|
|
return {
|
|
state: readonly(state) as typeof state,
|
|
fullscreenModeChanged,
|
|
enterFullscreen,
|
|
exitFullscreen,
|
|
toggleFullscreen,
|
|
keyboardLockApiSupported,
|
|
};
|
|
}
|
|
export type FullscreenState = ReturnType<typeof createFullscreenState>;
|