Skip to content

Commit 262c2f1

Browse files
psychedelicioushipsterusername
authored andcommitted
feat(ui): add crop canvas to bbox
1 parent 150d323 commit 262c2f1

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

invokeai/frontend/web/public/locales/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1836,14 +1836,16 @@
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",

invokeai/frontend/web/src/features/controlLayers/components/CanvasContextMenu/CanvasContextMenuGlobalMenuItems.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { MenuGroup, MenuItem } from '@invoke-ai/ui-library';
2+
import { CanvasContextMenuItemsCropCanvasToBbox } from 'features/controlLayers/components/CanvasContextMenu/CanvasContextMenuItemsCropCanvasToBbox';
23
import { NewLayerIcon } from 'features/controlLayers/components/common/icons';
34
import {
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')}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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';

0 commit comments

Comments
 (0)