From acdffac5ad5720ec2d200b9195e8b773dc91996c Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 24 Oct 2024 11:41:20 +1000 Subject: [PATCH] feat(ui): close viewer when filtering/transforming/automasking --- .../web/src/features/controlLayers/hooks/useEntityFilter.ts | 5 ++++- .../features/controlLayers/hooks/useEntitySegmentAnything.ts | 5 ++++- .../src/features/controlLayers/hooks/useEntityTransform.ts | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityFilter.ts b/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityFilter.ts index ca4b032219..d194674a9a 100644 --- a/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityFilter.ts +++ b/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityFilter.ts @@ -5,11 +5,13 @@ import { useEntityAdapterSafe } from 'features/controlLayers/contexts/EntityAdap import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy'; import type { CanvasEntityIdentifier } from 'features/controlLayers/store/types'; import { isFilterableEntityIdentifier } from 'features/controlLayers/store/types'; +import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer'; import { useCallback, useMemo } from 'react'; export const useEntityFilter = (entityIdentifier: CanvasEntityIdentifier | null) => { const canvasManager = useCanvasManager(); const adapter = useEntityAdapterSafe(entityIdentifier); + const imageViewer = useImageViewer(); const isBusy = useCanvasIsBusy(); const isInteractable = useStore(adapter?.$isInteractable ?? $false); const isEmpty = useStore(adapter?.$isEmpty ?? $false); @@ -50,8 +52,9 @@ export const useEntityFilter = (entityIdentifier: CanvasEntityIdentifier | null) if (!adapter) { return; } + imageViewer.close(); adapter.filterer.start(); - }, [isDisabled, entityIdentifier, canvasManager]); + }, [isDisabled, entityIdentifier, canvasManager, imageViewer]); return { isDisabled, start } as const; }; diff --git a/invokeai/frontend/web/src/features/controlLayers/hooks/useEntitySegmentAnything.ts b/invokeai/frontend/web/src/features/controlLayers/hooks/useEntitySegmentAnything.ts index b51986776a..106f95a74f 100644 --- a/invokeai/frontend/web/src/features/controlLayers/hooks/useEntitySegmentAnything.ts +++ b/invokeai/frontend/web/src/features/controlLayers/hooks/useEntitySegmentAnything.ts @@ -5,11 +5,13 @@ import { useEntityAdapterSafe } from 'features/controlLayers/contexts/EntityAdap import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy'; import type { CanvasEntityIdentifier } from 'features/controlLayers/store/types'; import { isSegmentableEntityIdentifier } from 'features/controlLayers/store/types'; +import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer'; import { useCallback, useMemo } from 'react'; export const useEntitySegmentAnything = (entityIdentifier: CanvasEntityIdentifier | null) => { const canvasManager = useCanvasManager(); const adapter = useEntityAdapterSafe(entityIdentifier); + const imageViewer = useImageViewer(); const isBusy = useCanvasIsBusy(); const isInteractable = useStore(adapter?.$isInteractable ?? $false); const isEmpty = useStore(adapter?.$isEmpty ?? $false); @@ -50,8 +52,9 @@ export const useEntitySegmentAnything = (entityIdentifier: CanvasEntityIdentifie if (!adapter) { return; } + imageViewer.close(); adapter.segmentAnything.start(); - }, [isDisabled, entityIdentifier, canvasManager]); + }, [isDisabled, entityIdentifier, canvasManager, imageViewer]); return { isDisabled, start } as const; }; diff --git a/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityTransform.ts b/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityTransform.ts index 3f71c767a5..74fa52a8a1 100644 --- a/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityTransform.ts +++ b/invokeai/frontend/web/src/features/controlLayers/hooks/useEntityTransform.ts @@ -5,11 +5,13 @@ import { useEntityAdapterSafe } from 'features/controlLayers/contexts/EntityAdap import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy'; import type { CanvasEntityIdentifier } from 'features/controlLayers/store/types'; import { isTransformableEntityIdentifier } from 'features/controlLayers/store/types'; +import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer'; import { useCallback, useMemo } from 'react'; export const useEntityTransform = (entityIdentifier: CanvasEntityIdentifier | null) => { const canvasManager = useCanvasManager(); const adapter = useEntityAdapterSafe(entityIdentifier); + const imageViewer = useImageViewer(); const isBusy = useCanvasIsBusy(); const isInteractable = useStore(adapter?.$isInteractable ?? $false); const isEmpty = useStore(adapter?.$isEmpty ?? $false); @@ -67,10 +69,11 @@ export const useEntityTransform = (entityIdentifier: CanvasEntityIdentifier | nu if (!adapter) { return; } + imageViewer.close(); await adapter.transformer.startTransform({ silent: true }); adapter.transformer.fitToBboxContain(); await adapter.transformer.applyTransform(); - }, [canvasManager, entityIdentifier, isDisabled]); + }, [canvasManager, entityIdentifier, imageViewer, isDisabled]); return { isDisabled, start, fitToBbox } as const; };