diff --git a/src/app/editor-store.ts b/src/app/editor-store.ts index 0a280096..8eeba9d8 100644 --- a/src/app/editor-store.ts +++ b/src/app/editor-store.ts @@ -26,7 +26,8 @@ import { type ViewportDisplayMode, type ViewportLayoutMode, type ViewportPanelId, - type ViewportPanelState + type ViewportPanelState, + type ViewportQuadSplit } from "../viewport-three/viewport-layout"; export interface EditorStoreState { @@ -36,6 +37,7 @@ export interface EditorStoreState { viewportLayoutMode: ViewportLayoutMode; activeViewportPanelId: ViewportPanelId; viewportPanels: Record; + viewportQuadSplit: ViewportQuadSplit; viewportTransientState: ViewportTransientState; canUndo: boolean; canRedo: boolean; @@ -61,6 +63,7 @@ export class EditorStore { private viewportLayoutMode: ViewportLayoutMode = "single"; private activeViewportPanelId: ViewportPanelId = "topLeft"; private viewportPanels = createDefaultViewportLayoutState().panels; + private viewportQuadSplit = createDefaultViewportLayoutState().viewportQuadSplit; private viewportTransientState = createDefaultViewportTransientState(); private previousEditingToolMode: Exclude = "select"; private readonly history = new CommandHistory(); @@ -168,6 +171,18 @@ export class EditorStore { this.emit(); } + setViewportQuadSplit(viewportQuadSplit: ViewportQuadSplit) { + if (this.viewportQuadSplit.x === viewportQuadSplit.x && this.viewportQuadSplit.y === viewportQuadSplit.y) { + return; + } + + this.viewportQuadSplit = { + x: viewportQuadSplit.x, + y: viewportQuadSplit.y + }; + this.emit(); + } + setViewportToolPreview(toolPreview: ViewportToolPreview) { const nextToolPreview = cloneViewportToolPreview(toolPreview); @@ -330,6 +345,7 @@ export class EditorStore { viewportLayoutMode: this.viewportLayoutMode, activeViewportPanelId: this.activeViewportPanelId, viewportPanels: this.viewportPanels, + viewportQuadSplit: this.viewportQuadSplit, viewportTransientState: this.viewportTransientState, canUndo: this.history.canUndo(), canRedo: this.history.canRedo(), diff --git a/src/viewport-three/ViewportPanel.tsx b/src/viewport-three/ViewportPanel.tsx index e88b9e72..f016dc18 100644 --- a/src/viewport-three/ViewportPanel.tsx +++ b/src/viewport-three/ViewportPanel.tsx @@ -1,3 +1,5 @@ +import type { CSSProperties } from "react"; + import { ViewportCanvas } from "./ViewportCanvas"; import { getViewportDisplayModeLabel, @@ -22,6 +24,8 @@ interface ViewportPanelProps { panelState: ViewportPanelState; layoutMode: ViewportLayoutMode; isActive: boolean; + className?: string; + style?: CSSProperties; world: WorldSettings; sceneDocument: SceneDocument; projectAssets: Record; @@ -45,6 +49,8 @@ export function ViewportPanel({ panelState, layoutMode, isActive, + className, + style, world, sceneDocument, projectAssets, @@ -63,15 +69,16 @@ export function ViewportPanel({ onSelectionChange }: ViewportPanelProps) { const shouldShow = layoutMode === "quad" || isActive; + const panelStyle = shouldShow ? style : { ...(style ?? {}), display: "none" }; return (
onActivatePanel(panelId)} onFocusCapture={() => onActivatePanel(panelId)} >