From 371a1b1af3ec5a925722e758b3776bb01815f2b9 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 22 Oct 2024 16:15:48 +1000 Subject: [PATCH] feat(ui): make CanvasBboxModule child of CanvasToolModule --- .../CanvasToolbarFitBboxToLayersButton.tsx | 4 ++-- .../controlLayers/konva/CanvasBboxModule.ts | 17 +++++++------- .../controlLayers/konva/CanvasManager.ts | 8 +------ .../konva/CanvasTool/CanvasToolColorPicker.ts | 12 ++++++++++ .../konva/CanvasTool/CanvasToolEraser.ts | 1 + .../konva/CanvasTool/CanvasToolModule.ts | 23 +++++++++++-------- 6 files changed, 38 insertions(+), 27 deletions(-) diff --git a/invokeai/frontend/web/src/features/controlLayers/components/Toolbar/CanvasToolbarFitBboxToLayersButton.tsx b/invokeai/frontend/web/src/features/controlLayers/components/Toolbar/CanvasToolbarFitBboxToLayersButton.tsx index 2ac69f260e..382c183c0a 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/Toolbar/CanvasToolbarFitBboxToLayersButton.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/Toolbar/CanvasToolbarFitBboxToLayersButton.tsx @@ -10,8 +10,8 @@ export const CanvasToolbarFitBboxToLayersButton = memo(() => { const canvasManager = useCanvasManager(); const isBusy = useCanvasIsBusy(); const onClick = useCallback(() => { - canvasManager.bbox.fitToLayers(); - }, [canvasManager.bbox]); + canvasManager.tool.tools.bbox.fitToLayers(); + }, [canvasManager.tool.tools.bbox]); return ( { return [ - this.bbox, this.stagingArea, this.tool, this.progressImage, @@ -281,7 +276,6 @@ export class CanvasManager extends CanvasModuleBase { inpaintMasks: Array.from(this.adapters.inpaintMasks.values()).map((adapter) => adapter.repr()), regionMasks: Array.from(this.adapters.regionMasks.values()).map((adapter) => adapter.repr()), stateApi: this.stateApi.repr(), - bbox: this.bbox.repr(), stagingArea: this.stagingArea.repr(), tool: this.tool.repr(), progressImage: this.progressImage.repr(), diff --git a/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolColorPicker.ts b/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolColorPicker.ts index dd108f1c28..6d436849e5 100644 --- a/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolColorPicker.ts +++ b/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolColorPicker.ts @@ -120,6 +120,7 @@ export class CanvasToolColorPicker extends CanvasModuleBase { this.konva = { group: new Konva.Group({ name: `${this.type}:color_picker_group`, listening: false }), ringCandidateColor: new Konva.Ring({ + listening: false, name: `${this.type}:color_picker_candidate_color_ring`, innerRadius: 0, outerRadius: 0, @@ -127,6 +128,7 @@ export class CanvasToolColorPicker extends CanvasModuleBase { perfectDrawEnabled: false, }), ringCurrentColor: new Konva.Arc({ + listening: false, name: `${this.type}:color_picker_current_color_arc`, innerRadius: 0, outerRadius: 0, @@ -135,6 +137,7 @@ export class CanvasToolColorPicker extends CanvasModuleBase { perfectDrawEnabled: false, }), ringInnerBorder: new Konva.Ring({ + listening: false, name: `${this.type}:color_picker_inner_border_ring`, innerRadius: 0, outerRadius: 0, @@ -143,6 +146,7 @@ export class CanvasToolColorPicker extends CanvasModuleBase { perfectDrawEnabled: false, }), ringOuterBorder: new Konva.Ring({ + listening: false, name: `${this.type}:color_picker_outer_border_ring`, innerRadius: 0, outerRadius: 0, @@ -151,41 +155,49 @@ export class CanvasToolColorPicker extends CanvasModuleBase { perfectDrawEnabled: false, }), crosshairNorthInner: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_north1_line`, stroke: this.config.CROSSHAIR_LINE_COLOR, perfectDrawEnabled: false, }), crosshairNorthOuter: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_north2_line`, stroke: this.config.CROSSHAIR_BORDER_COLOR, perfectDrawEnabled: false, }), crosshairEastInner: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_east1_line`, stroke: this.config.CROSSHAIR_LINE_COLOR, perfectDrawEnabled: false, }), crosshairEastOuter: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_east2_line`, stroke: this.config.CROSSHAIR_BORDER_COLOR, perfectDrawEnabled: false, }), crosshairSouthInner: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_south1_line`, stroke: this.config.CROSSHAIR_LINE_COLOR, perfectDrawEnabled: false, }), crosshairSouthOuter: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_south2_line`, stroke: this.config.CROSSHAIR_BORDER_COLOR, perfectDrawEnabled: false, }), crosshairWestInner: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_west1_line`, stroke: this.config.CROSSHAIR_LINE_COLOR, perfectDrawEnabled: false, }), crosshairWestOuter: new Konva.Line({ + listening: false, name: `${this.type}:color_picker_crosshair_west2_line`, stroke: this.config.CROSSHAIR_BORDER_COLOR, perfectDrawEnabled: false, diff --git a/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolEraser.ts b/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolEraser.ts index b9d5c6922c..4062d9ff9f 100644 --- a/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolEraser.ts +++ b/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolEraser.ts @@ -78,6 +78,7 @@ export class CanvasToolEraser extends CanvasModuleBase { perfectDrawEnabled: false, }), outerBorder: new Konva.Ring({ + listening: false, name: `${this.type}:eraser_outer_border_ring`, innerRadius: 0, outerRadius: 0, diff --git a/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolModule.ts b/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolModule.ts index 422d844301..314912093d 100644 --- a/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolModule.ts +++ b/invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasToolModule.ts @@ -1,3 +1,4 @@ +import { CanvasBboxModule } from 'features/controlLayers/konva/CanvasBboxModule'; import type { CanvasManager } from 'features/controlLayers/konva/CanvasManager'; import { CanvasModuleBase } from 'features/controlLayers/konva/CanvasModuleBase'; import { CanvasToolBrush } from 'features/controlLayers/konva/CanvasTool/CanvasToolBrush'; @@ -58,6 +59,7 @@ export class CanvasToolModule extends CanvasModuleBase { eraser: CanvasToolEraser; rect: CanvasToolRect; colorPicker: CanvasToolColorPicker; + bbox: CanvasBboxModule; }; /** @@ -111,16 +113,18 @@ export class CanvasToolModule extends CanvasModuleBase { eraser: new CanvasToolEraser(this), rect: new CanvasToolRect(this), colorPicker: new CanvasToolColorPicker(this), + bbox: new CanvasBboxModule(this), }; this.konva = { stage: this.manager.stage.konva.stage, - group: new Konva.Group({ name: `${this.type}:group`, listening: false }), + group: new Konva.Group({ name: `${this.type}:group`, listening: true }), }; this.konva.group.add(this.tools.brush.konva.group); this.konva.group.add(this.tools.eraser.konva.group); this.konva.group.add(this.tools.colorPicker.konva.group); + this.konva.group.add(this.tools.bbox.konva.group); this.subscriptions.add(this.manager.stage.$stageAttrs.listen(this.render)); this.subscriptions.add(this.manager.$isBusy.listen(this.render)); @@ -145,12 +149,6 @@ export class CanvasToolModule extends CanvasModuleBase { this.syncCursorStyle(); }; - setToolVisibility = (tool: Tool, isDrawable: boolean) => { - this.tools.brush.setVisibility(isDrawable && tool === 'brush'); - this.tools.eraser.setVisibility(isDrawable && tool === 'eraser'); - this.tools.colorPicker.setVisibility(tool === 'colorPicker'); - }; - syncCursorStyle = () => { const stage = this.manager.stage; const tool = this.$tool.get(); @@ -191,6 +189,7 @@ export class CanvasToolModule extends CanvasModuleBase { this.tools.brush.render(); this.tools.eraser.render(); this.tools.colorPicker.render(); + this.tools.bbox.render(); }; syncCursorPositions = () => { @@ -588,9 +587,13 @@ export class CanvasToolModule extends CanvasModuleBase { $toolBuffer: this.$toolBuffer.get(), $isMouseDown: this.$isMouseDown.get(), $cursorPos: this.$cursorPos.get(), - brushToolPreview: this.tools.brush.repr(), - eraserToolPreview: this.tools.eraser.repr(), - colorPickerToolPreview: this.tools.colorPicker.repr(), + tools: { + brush: this.tools.brush.repr(), + eraser: this.tools.eraser.repr(), + colorPicker: this.tools.colorPicker.repr(), + rect: this.tools.rect.repr(), + bbox: this.tools.bbox.repr(), + }, }; };