From d303f2e3415237e1a519db21ad4e089c2ba7e9f9 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 23 Dec 2021 21:29:26 +0100 Subject: feat: Add BrowserView and synchronize its position --- packages/shared/package.json | 3 +- .../shared/src/contextBridge/SophieRenderer.ts | 6 +++- packages/shared/src/index.ts | 11 ++++++- .../shared/src/ipc/MainToRendererIpcMessage.ts | 4 +-- .../shared/src/ipc/RendererToMainIpcMessage.ts | 5 ++-- packages/shared/src/schemas.ts | 34 ++++++++++++++++++++++ packages/shared/src/stores/SharedStore.ts | 12 +++++++- packages/shared/vite.config.js | 1 + 8 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 packages/shared/src/schemas.ts (limited to 'packages/shared') diff --git a/packages/shared/package.json b/packages/shared/package.json index 83aec54..f5d4f90 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "mobx": "^6.3.10", - "mobx-state-tree": "^5.1.0" + "mobx-state-tree": "^5.1.0", + "zod": "^3.11.6" } } diff --git a/packages/shared/src/contextBridge/SophieRenderer.ts b/packages/shared/src/contextBridge/SophieRenderer.ts index 0d82d56..f2e2180 100644 --- a/packages/shared/src/contextBridge/SophieRenderer.ts +++ b/packages/shared/src/contextBridge/SophieRenderer.ts @@ -20,8 +20,12 @@ import { SharedStoreListener } from '../stores/SharedStore'; +import { BrowserViewBounds, PaletteMode } from '../schemas'; + export interface SophieRenderer { setSharedStoreListener(listener: SharedStoreListener): void; - buttonClick(): void; + setBrowserViewBounds(bounds: BrowserViewBounds): void; + + setPaletteMode(mode: PaletteMode): void; } diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 250700f..0a1ec40 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -23,10 +23,19 @@ export type { SophieRenderer } from './contextBridge/SophieRenderer'; export { MainToRendererIpcMessage } from './ipc/MainToRendererIpcMessage'; export { RendererToMainIpcMessage } from './ipc/RendererToMainIpcMessage'; +export type { + BrowserViewBounds, + PaletteMode, +} from './schemas'; +export { + browserViewBounds, + paletteMode +} from './schemas'; + export type { SharedStore, SharedStoreListener, SharedStoreSnapshotIn, SharedStoreSnapshotOut, } from './stores/SharedStore'; -export { sharedStore } from './stores/SharedStore'; +export { emptySharedStore, sharedStore } from './stores/SharedStore'; diff --git a/packages/shared/src/ipc/MainToRendererIpcMessage.ts b/packages/shared/src/ipc/MainToRendererIpcMessage.ts index e68d676..92da489 100644 --- a/packages/shared/src/ipc/MainToRendererIpcMessage.ts +++ b/packages/shared/src/ipc/MainToRendererIpcMessage.ts @@ -19,6 +19,6 @@ */ export enum MainToRendererIpcMessage { - SharedStoreSnapshot = "sophie-shared-store-snapshot", - SharedStorePatch = "sophie-shared-store-patch", + SharedStoreSnapshot = 'sophie-shared-store-snapshot', + SharedStorePatch = 'sophie-shared-store-patch', } diff --git a/packages/shared/src/ipc/RendererToMainIpcMessage.ts b/packages/shared/src/ipc/RendererToMainIpcMessage.ts index a7aa664..ba354d1 100644 --- a/packages/shared/src/ipc/RendererToMainIpcMessage.ts +++ b/packages/shared/src/ipc/RendererToMainIpcMessage.ts @@ -19,6 +19,7 @@ */ export enum RendererToMainIpcMessage { - SharedStoreSnapshotRequest = "sophie-shared-store-snapshot-request", - ButtonClick = "sophie-button-click" + SharedStoreSnapshotRequest = 'sophie-shared-store-snapshot-request', + SetBrowserViewBounds = 'sophie-set-browser-view-bounds', + SetPaletteMode = 'sophie-set-palette-mode', } diff --git a/packages/shared/src/schemas.ts b/packages/shared/src/schemas.ts new file mode 100644 index 0000000..8827467 --- /dev/null +++ b/packages/shared/src/schemas.ts @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2021-2022 Kristóf Marussy + * + * This file is part of Sophie. + * + * Sophie is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { z } from 'zod'; + +export const browserViewBounds = z.object({ + x: z.number().nonnegative(), + y: z.number().nonnegative(), + width: z.number().nonnegative(), + height: z.number().nonnegative(), +}); + +export type BrowserViewBounds = z.infer; + +export const paletteMode = z.enum(['light', 'dark']); + +export type PaletteMode = z.infer; diff --git a/packages/shared/src/stores/SharedStore.ts b/packages/shared/src/stores/SharedStore.ts index 7fd65b7..7c2b742 100644 --- a/packages/shared/src/stores/SharedStore.ts +++ b/packages/shared/src/stores/SharedStore.ts @@ -27,10 +27,20 @@ import { } from 'mobx-state-tree'; export const sharedStore = types.model("SharedStore", { + browserViewBounds: types.model("BrowserViewBoundsStore", { + x: 0, + y: 0, + width: 0, + height: 0, + }), shouldUseDarkColors: true, - clickCount: 0 }); +export const emptySharedStore: SharedStoreSnapshotIn = { + browserViewBounds: { + }, +}; + export interface SharedStore extends Instance {} export interface SharedStoreSnapshotIn extends SnapshotIn {} diff --git a/packages/shared/vite.config.js b/packages/shared/vite.config.js index 76bd965..2867541 100644 --- a/packages/shared/vite.config.js +++ b/packages/shared/vite.config.js @@ -29,6 +29,7 @@ const config = makeConfig({ external: [ 'mobx', 'mobx-state-tree', + 'zod', ...builtinModules, ], }, -- cgit v1.2.3-54-g00ecf