File tree Expand file tree Collapse file tree 3 files changed +33
-1
lines changed
Expand file tree Collapse file tree 3 files changed +33
-1
lines changed Original file line number Diff line number Diff line change 18361836 }
18371837 },
18381838 "canvasContextMenu" : {
1839+ "canvasGroup" : " Canvas" ,
18391840 "saveToGalleryGroup" : " Save To Gallery" ,
18401841 "saveCanvasToGallery" : " Save Canvas To Gallery" ,
18411842 "saveBboxToGallery" : " Save Bbox To Gallery" ,
18421843 "bboxGroup" : " Create From Bbox" ,
18431844 "newGlobalReferenceImage" : " New Global Reference Image" ,
18441845 "newRegionalReferenceImage" : " New Regional Reference Image" ,
18451846 "newControlLayer" : " New Control Layer" ,
1846- "newRasterLayer" : " New Raster Layer"
1847+ "newRasterLayer" : " New Raster Layer" ,
1848+ "cropCanvasToBbox" : " Crop Canvas to Bbox"
18471849 },
18481850 "stagingArea" : {
18491851 "accept" : " Accept" ,
Original file line number Diff line number Diff line change 11import { MenuGroup , MenuItem } from '@invoke-ai/ui-library' ;
2+ import { CanvasContextMenuItemsCropCanvasToBbox } from 'features/controlLayers/components/CanvasContextMenu/CanvasContextMenuItemsCropCanvasToBbox' ;
23import { NewLayerIcon } from 'features/controlLayers/components/common/icons' ;
34import {
45 useNewControlLayerFromBbox ,
@@ -25,6 +26,9 @@ export const CanvasContextMenuGlobalMenuItems = memo(() => {
2526
2627 return (
2728 < >
29+ < MenuGroup title = { t ( 'controlLayers.canvasContextMenu.canvasGroup' ) } >
30+ < CanvasContextMenuItemsCropCanvasToBbox />
31+ </ MenuGroup >
2832 < MenuGroup title = { t ( 'controlLayers.canvasContextMenu.saveToGalleryGroup' ) } >
2933 < MenuItem icon = { < PiFloppyDiskBold /> } isDisabled = { isBusy } onClick = { saveCanvasToGallery } >
3034 { t ( 'controlLayers.canvasContextMenu.saveCanvasToGallery' ) }
Original file line number Diff line number Diff line change 1+ import { MenuItem } from '@invoke-ai/ui-library' ;
2+ import { useCanvasManager } from 'features/controlLayers/contexts/CanvasManagerProviderGate' ;
3+ import { useCanvasIsBusy } from 'features/controlLayers/hooks/useCanvasIsBusy' ;
4+ import { memo , useCallback } from 'react' ;
5+ import { useTranslation } from 'react-i18next' ;
6+ import { PiCropBold } from 'react-icons/pi' ;
7+
8+ export const CanvasContextMenuItemsCropCanvasToBbox = memo ( ( ) => {
9+ const { t } = useTranslation ( ) ;
10+ const isBusy = useCanvasIsBusy ( ) ;
11+ const canvasManager = useCanvasManager ( ) ;
12+ const cropCanvasToBbox = useCallback ( async ( ) => {
13+ const adapters = canvasManager . getAllAdapters ( ) ;
14+ for ( const adapter of adapters ) {
15+ await adapter . cropToBbox ( ) ;
16+ }
17+ } , [ canvasManager ] ) ;
18+
19+ return (
20+ < MenuItem icon = { < PiCropBold /> } isDisabled = { isBusy } onClick = { cropCanvasToBbox } >
21+ { t ( 'controlLayers.canvasContextMenu.cropCanvasToBbox' ) }
22+ </ MenuItem >
23+ ) ;
24+ } ) ;
25+
26+ CanvasContextMenuItemsCropCanvasToBbox . displayName = 'CanvasContextMenuItemsCropCanvasToBbox' ;
You can’t perform that action at this time.
0 commit comments