Skip to content

Commit 1823e44

Browse files
fix(ui): conditionally render CL preview
This fixes an issue where it sometimes gets out of sync, and fixes some konva errors.
1 parent 311e44a commit 1823e44

File tree

4 files changed

+14
-4
lines changed

4 files changed

+14
-4
lines changed

invokeai/frontend/web/src/features/controlLayers/store/controlLayersSlice.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,7 @@ export const $isDrawing = atom(false);
887887
export const $lastMouseDownPos = atom<Vector2d | null>(null);
888888
export const $tool = atom<Tool>('brush');
889889
export const $lastCursorPos = atom<Vector2d | null>(null);
890+
export const $isPreviewVisible = atom(true);
890891

891892
// IDs for singleton Konva layers and objects
892893
export const TOOL_PREVIEW_LAYER_ID = 'tool_preview_layer';

invokeai/frontend/web/src/features/parameters/components/ImageSize/AspectRatioCanvasPreview.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
import { Flex } from '@invoke-ai/ui-library';
2+
import { useStore } from '@nanostores/react';
23
import { StageComponent } from 'features/controlLayers/components/StageComponent';
4+
import { $isPreviewVisible } from 'features/controlLayers/store/controlLayersSlice';
5+
import { AspectRatioIconPreview } from 'features/parameters/components/ImageSize/AspectRatioIconPreview';
36
import { memo } from 'react';
47

58
export const AspectRatioCanvasPreview = memo(() => {
9+
const isPreviewVisible = useStore($isPreviewVisible);
10+
11+
if (!isPreviewVisible) {
12+
return <AspectRatioIconPreview />;
13+
}
14+
615
return (
716
<Flex w="full" h="full" alignItems="center" justifyContent="center" position="relative">
817
<StageComponent asPreview />

invokeai/frontend/web/src/features/settingsAccordions/components/ImageSettingsAccordion/ImageSizeLinear.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,12 @@ import { aspectRatioChanged, heightChanged, widthChanged } from 'features/contro
33
import { ParamHeight } from 'features/parameters/components/Core/ParamHeight';
44
import { ParamWidth } from 'features/parameters/components/Core/ParamWidth';
55
import { AspectRatioCanvasPreview } from 'features/parameters/components/ImageSize/AspectRatioCanvasPreview';
6-
import { AspectRatioIconPreview } from 'features/parameters/components/ImageSize/AspectRatioIconPreview';
76
import { ImageSize } from 'features/parameters/components/ImageSize/ImageSize';
87
import type { AspectRatioState } from 'features/parameters/components/ImageSize/types';
9-
import { activeTabNameSelector } from 'features/ui/store/uiSelectors';
108
import { memo, useCallback } from 'react';
119

1210
export const ImageSizeLinear = memo(() => {
1311
const dispatch = useAppDispatch();
14-
const tab = useAppSelector(activeTabNameSelector);
1512
const width = useAppSelector((s) => s.controlLayers.present.size.width);
1613
const height = useAppSelector((s) => s.controlLayers.present.size.height);
1714
const aspectRatioState = useAppSelector((s) => s.controlLayers.present.size.aspectRatio);
@@ -50,7 +47,7 @@ export const ImageSizeLinear = memo(() => {
5047
aspectRatioState={aspectRatioState}
5148
heightComponent={<ParamHeight />}
5249
widthComponent={<ParamWidth />}
53-
previewComponent={tab === 'generation' ? <AspectRatioCanvasPreview /> : <AspectRatioIconPreview />}
50+
previewComponent={<AspectRatioCanvasPreview />}
5451
onChangeAspectRatioState={onChangeAspectRatioState}
5552
onChangeWidth={onChangeWidth}
5653
onChangeHeight={onChangeHeight}

invokeai/frontend/web/src/features/ui/components/ParametersPanelTextToImage.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Box, Flex, Tab, TabList, TabPanel, TabPanels, Tabs } from '@invoke-ai/u
33
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
44
import { overlayScrollbarsParams } from 'common/components/OverlayScrollbars/constants';
55
import { ControlLayersPanelContent } from 'features/controlLayers/components/ControlLayersPanelContent';
6+
import { $isPreviewVisible } from 'features/controlLayers/store/controlLayersSlice';
67
import { isImageViewerOpenChanged } from 'features/gallery/store/gallerySlice';
78
import { Prompts } from 'features/parameters/components/Prompts/Prompts';
89
import QueueControls from 'features/queue/components/QueueControls';
@@ -53,6 +54,7 @@ const ParametersPanelTextToImage = () => {
5354
if (i === 1) {
5455
dispatch(isImageViewerOpenChanged(false));
5556
}
57+
$isPreviewVisible.set(i === 0);
5658
},
5759
[dispatch]
5860
);
@@ -66,6 +68,7 @@ const ParametersPanelTextToImage = () => {
6668
<Flex gap={2} flexDirection="column" h="full" w="full">
6769
{isSDXL ? <SDXLPrompts /> : <Prompts />}
6870
<Tabs
71+
defaultIndex={0}
6972
variant="enclosed"
7073
display="flex"
7174
flexDir="column"

0 commit comments

Comments
 (0)