Skip to content

Commit dc51b13

Browse files
author
Attila Cseh
committed
code review changes
1 parent 1d735a9 commit dc51b13

File tree

7 files changed

+62
-42
lines changed

7 files changed

+62
-42
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,10 @@
589589
"title": "Prev Layer",
590590
"desc": "Select the previous layer in the list."
591591
},
592+
"setFillColorsToDefault": {
593+
"title": "Set Colors to Default",
594+
"desc": "Set the current tool colors to default."
595+
},
592596
"toggleFillColor": {
593597
"title": "Toggle Fill Color",
594598
"desc": "Toggle the current tool fill color."
@@ -2268,8 +2272,8 @@
22682272
},
22692273
"fill": {
22702274
"fillColor": "Fill Color",
2271-
"fillColor1": "Color1",
2272-
"fillColor2": "Color2",
2275+
"bgFillColor": "Background Color",
2276+
"fgFillColor": "Foreground Color",
22732277
"fillStyle": "Fill Style",
22742278
"solid": "Solid",
22752279
"grid": "Grid",

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolFillColorPicker.tsx

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,42 +15,51 @@ import { rgbaColorToString } from 'common/util/colorCodeTransformers';
1515
import {
1616
selectCanvasSettingsSlice,
1717
settingsActiveColorToggled,
18-
settingsColor1Changed,
19-
settingsColor2Changed,
18+
settingsBgColorChanged,
19+
settingsColorsSetToDefault,
20+
settingsFgColorChanged,
2021
} from 'features/controlLayers/store/canvasSettingsSlice';
2122
import type { RgbaColor } from 'features/controlLayers/store/types';
2223
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
2324
import { memo, useCallback, useMemo } from 'react';
2425
import { useTranslation } from 'react-i18next';
2526

2627
const selectActiveColor = createSelector(selectCanvasSettingsSlice, (settings) => settings.activeColor);
27-
const selectColor1 = createSelector(selectCanvasSettingsSlice, (settings) => settings.color1);
28-
const selectColor2 = createSelector(selectCanvasSettingsSlice, (settings) => settings.color2);
28+
const selectBgColor = createSelector(selectCanvasSettingsSlice, (settings) => settings.bgColor);
29+
const selectFgColor = createSelector(selectCanvasSettingsSlice, (settings) => settings.fgColor);
2930

3031
export const ToolFillColorPicker = memo(() => {
3132
const { t } = useTranslation();
3233
const activeColorType = useAppSelector(selectActiveColor);
33-
const color1 = useAppSelector(selectColor1);
34-
const color2 = useAppSelector(selectColor2);
35-
const { activeColor, tooltip, color1zIndex, color2zIndex } = useMemo(() => {
36-
if (activeColorType === 'color1') {
37-
return { activeColor: color1, tooltip: t('controlLayers.fill.fillColor1'), color1zIndex: 2, color2zIndex: 1 };
34+
const bgColor = useAppSelector(selectBgColor);
35+
const fgColor = useAppSelector(selectFgColor);
36+
const { activeColor, tooltip, bgColorzIndex, fgColorzIndex } = useMemo(() => {
37+
if (activeColorType === 'bgColor') {
38+
return { activeColor: bgColor, tooltip: t('controlLayers.fill.bgFillColor'), bgColorzIndex: 2, fgColorzIndex: 1 };
3839
} else {
39-
return { activeColor: color2, tooltip: t('controlLayers.fill.fillColor2'), color1zIndex: 1, color2zIndex: 2 };
40+
return { activeColor: fgColor, tooltip: t('controlLayers.fill.fgFillColor'), bgColorzIndex: 1, fgColorzIndex: 2 };
4041
}
41-
}, [activeColorType, color1, color2, t]);
42+
}, [activeColorType, bgColor, fgColor, t]);
4243
const dispatch = useAppDispatch();
4344
const onColorChange = useCallback(
4445
(color: RgbaColor) => {
45-
if (activeColorType === 'color1') {
46-
dispatch(settingsColor1Changed(color));
46+
if (activeColorType === 'bgColor') {
47+
dispatch(settingsBgColorChanged(color));
4748
} else {
48-
dispatch(settingsColor2Changed(color));
49+
dispatch(settingsFgColorChanged(color));
4950
}
5051
},
5152
[activeColorType, dispatch]
5253
);
5354

55+
useRegisteredHotkeys({
56+
id: 'setFillColorsToDefault',
57+
category: 'canvas',
58+
callback: () => dispatch(settingsColorsSetToDefault()),
59+
options: { preventDefault: true },
60+
dependencies: [dispatch],
61+
});
62+
5463
useRegisteredHotkeys({
5564
id: 'toggleFillColor',
5665
category: 'canvas',
@@ -71,23 +80,23 @@ export const ToolFillColorPicker = memo(() => {
7180
w={6}
7281
h={6}
7382
borderWidth={2}
74-
bg={rgbaColorToString(color1)}
83+
bg={rgbaColorToString(bgColor)}
7584
position="absolute"
7685
top="0"
7786
left="0"
78-
zIndex={color1zIndex}
87+
zIndex={bgColorzIndex}
7988
/>
8089
<Box
8190
borderRadius="full"
8291
borderColor="base.600"
8392
w={6}
8493
h={6}
8594
borderWidth={2}
86-
bg={rgbaColorToString(color2)}
95+
bg={rgbaColorToString(fgColor)}
8796
position="absolute"
8897
top="2"
8998
left="2"
90-
zIndex={color2zIndex}
99+
zIndex={fgColorzIndex}
91100
/>
92101
</Flex>
93102
</Tooltip>

invokeai/frontend/web/src/features/controlLayers/konva/CanvasStateApiModule.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import type { SubscriptionHandler } from 'features/controlLayers/konva/util';
1010
import { createReduxSubscription, getPrefixedId } from 'features/controlLayers/konva/util';
1111
import {
1212
selectCanvasSettingsSlice,
13+
settingsBgColorChanged,
1314
settingsBrushWidthChanged,
14-
settingsColor1Changed,
15-
settingsColor2Changed,
1615
settingsEraserWidthChanged,
16+
settingsFgColorChanged,
1717
} from 'features/controlLayers/store/canvasSettingsSlice';
1818
import {
1919
bboxChangedFromCanvas,
@@ -233,9 +233,9 @@ export class CanvasStateApiModule extends CanvasModuleBase {
233233
* Sets the drawing color, pushing state to redux.
234234
*/
235235
setColor = (color: Partial<RgbaColor>) => {
236-
return this.getSettings().activeColor === 'color1'
237-
? this.store.dispatch(settingsColor1Changed(color))
238-
: this.store.dispatch(settingsColor2Changed(color));
236+
return this.getSettings().activeColor === 'bgColor'
237+
? this.store.dispatch(settingsBgColorChanged(color))
238+
: this.store.dispatch(settingsFgColorChanged(color));
239239
};
240240

241241
/**
@@ -425,7 +425,7 @@ export class CanvasStateApiModule extends CanvasModuleBase {
425425
*/
426426
getCurrentColor = (): RgbaColor => {
427427
let color: RgbaColor =
428-
this.getSettings().activeColor === 'color1' ? this.getSettings().color1 : this.getSettings().color2;
428+
this.getSettings().activeColor === 'bgColor' ? this.getSettings().bgColor : this.getSettings().fgColor;
429429
const selectedEntity = this.getSelectedEntityAdapter();
430430
if (selectedEntity) {
431431
// These two entity types use a compositing rect for opacity. Their fill is always a solid color.
@@ -453,7 +453,7 @@ export class CanvasStateApiModule extends CanvasModuleBase {
453453
// selected entity's fill color with 50% opacity.
454454
return { ...selectedEntity.state.fill.color, a: 0.5 };
455455
} else {
456-
return this.getSettings().activeColor === 'color1' ? this.getSettings().color1 : this.getSettings().color2;
456+
return this.getSettings().activeColor === 'bgColor' ? this.getSettings().bgColor : this.getSettings().fgColor;
457457
}
458458
};
459459

invokeai/frontend/web/src/features/controlLayers/konva/CanvasTool/CanvasColorPickerToolModule.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ export class CanvasColorPickerToolModule extends CanvasModuleBase {
328328
const colorPickerOuterRadius = this.manager.stage.unscale(this.config.RING_OUTER_RADIUS);
329329
const onePixel = this.manager.stage.unscale(1);
330330
const twoPixels = this.manager.stage.unscale(2);
331-
const color = settings.activeColor === 'color1' ? settings.color1 : settings.color2;
331+
const color = settings.activeColor === 'bgColor' ? settings.bgColor : settings.fgColor;
332332

333333
this.konva.ringCandidateColor.setAttrs({
334334
x,

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

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { createSelector, createSlice } from '@reduxjs/toolkit';
33
import type { RootState } from 'app/store/store';
44
import type { SliceConfig } from 'app/store/types';
55
import type { RgbaColor } from 'features/controlLayers/store/types';
6-
import { zRgbaColor } from 'features/controlLayers/store/types';
6+
import { RGBA_BLACK, RGBA_WHITE, zRgbaColor } from 'features/controlLayers/store/types';
77
import { z } from 'zod';
88

99
const zAutoSwitchMode = z.enum(['off', 'switch_on_start', 'switch_on_finish']);
@@ -38,9 +38,9 @@ const zCanvasSettingsState = z.object({
3838
/**
3939
* The colors to use when drawing lines or filling shapes.
4040
*/
41-
activeColor: z.enum(['color1', 'color2']),
42-
color1: zRgbaColor,
43-
color2: zRgbaColor,
41+
activeColor: z.enum(['bgColor', 'fgColor']),
42+
bgColor: zRgbaColor,
43+
fgColor: zRgbaColor,
4444
/**
4545
* Whether to composite inpainted/outpainted regions back onto the source image when saving canvas generations.
4646
*
@@ -103,9 +103,9 @@ const getInitialState = (): CanvasSettingsState => ({
103103
invertScrollForToolWidth: false,
104104
brushWidth: 50,
105105
eraserWidth: 50,
106-
activeColor: 'color1',
107-
color1: { r: 31, g: 160, b: 224, a: 1 }, // invokeBlue.500
108-
color2: { r: 0, g: 0, b: 0, a: 1 }, // black
106+
activeColor: 'fgColor',
107+
bgColor: RGBA_BLACK,
108+
fgColor: RGBA_WHITE,
109109
outputOnlyMaskedRegions: true,
110110
autoProcess: true,
111111
snapToGrid: true,
@@ -140,13 +140,17 @@ const slice = createSlice({
140140
state.eraserWidth = Math.round(action.payload);
141141
},
142142
settingsActiveColorToggled: (state) => {
143-
state.activeColor = state.activeColor === 'color1' ? 'color2' : 'color1';
143+
state.activeColor = state.activeColor === 'bgColor' ? 'fgColor' : 'bgColor';
144144
},
145-
settingsColor1Changed: (state, action: PayloadAction<Partial<RgbaColor>>) => {
146-
state.color1 = { ...state.color1, ...action.payload };
145+
settingsBgColorChanged: (state, action: PayloadAction<Partial<RgbaColor>>) => {
146+
state.bgColor = { ...state.bgColor, ...action.payload };
147147
},
148-
settingsColor2Changed: (state, action: PayloadAction<Partial<RgbaColor>>) => {
149-
state.color2 = { ...state.color2, ...action.payload };
148+
settingsFgColorChanged: (state, action: PayloadAction<Partial<RgbaColor>>) => {
149+
state.fgColor = { ...state.fgColor, ...action.payload };
150+
},
151+
settingsColorsSetToDefault: (state) => {
152+
state.bgColor = RGBA_BLACK;
153+
state.fgColor = RGBA_WHITE;
150154
},
151155
settingsInvertScrollForToolWidthChanged: (
152156
state,
@@ -203,8 +207,9 @@ export const {
203207
settingsBrushWidthChanged,
204208
settingsEraserWidthChanged,
205209
settingsActiveColorToggled,
206-
settingsColor1Changed,
207-
settingsColor2Changed,
210+
settingsBgColorChanged,
211+
settingsFgColorChanged,
212+
settingsColorsSetToDefault,
208213
settingsInvertScrollForToolWidthChanged,
209214
settingsOutputOnlyMaskedRegionsToggled,
210215
settingsAutoProcessToggled,

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export const zRgbaColor = zRgbColor.extend({
8282
});
8383
export type RgbaColor = z.infer<typeof zRgbaColor>;
8484
export const RGBA_BLACK: RgbaColor = { r: 0, g: 0, b: 0, a: 1 };
85+
export const RGBA_WHITE: RgbaColor = { r: 255, g: 255, b: 255, a: 1 };
8586

8687
const zOpacity = z.number().gte(0).lte(1);
8788

invokeai/frontend/web/src/features/system/components/HotkeysModal/useHotkeyData.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ export const useHotkeyData = (): HotkeysData => {
118118
addHotkey('canvas', 'selectRectTool', ['u']);
119119
addHotkey('canvas', 'selectViewTool', ['h']);
120120
addHotkey('canvas', 'selectColorPickerTool', ['i']);
121+
addHotkey('canvas', 'setFillColorsToDefault', ['d']);
121122
addHotkey('canvas', 'toggleFillColor', ['x']);
122123
addHotkey('canvas', 'fitLayersToCanvas', ['mod+0']);
123124
addHotkey('canvas', 'fitBboxToCanvas', ['mod+shift+0']);

0 commit comments

Comments
 (0)