1
0
Fork 0

fix(gui): only show inpaint image once

This commit is contained in:
Sean Sube 2023-01-18 08:24:53 -06:00
parent a074078cec
commit d6f2c626f6
3 changed files with 42 additions and 44 deletions

View File

@ -5,25 +5,21 @@ import * as React from 'react';
export interface ImageInputProps { export interface ImageInputProps {
filter: string; filter: string;
hidden?: boolean;
image?: Maybe<Blob>; image?: Maybe<Blob>;
label: string; label: string;
hideSelection?: boolean;
onChange: (file: File) => void; onChange: (file: File) => void;
renderImage?: (image: Maybe<Blob>) => React.ReactNode;
} }
export function ImageInput(props: ImageInputProps) { export function ImageInput(props: ImageInputProps) {
function renderImage() { function renderImage() {
if (mustDefault(props.hidden, false)) { if (doesExist(props.image)) {
if (mustDefault(props.hideSelection, false)) {
return undefined; return undefined;
} }
if (doesExist(props.renderImage)) {
return props.renderImage(props.image);
}
if (doesExist(props.image)) {
return <img return <img
src={URL.createObjectURL(props.image)} src={URL.createObjectURL(props.image)}
style={{ style={{
@ -37,6 +33,7 @@ export function ImageInput(props: ImageInputProps) {
} }
return <Stack direction='row' spacing={2}> return <Stack direction='row' spacing={2}>
<Stack>
<Button component='label' startIcon={<PhotoCamera />}> <Button component='label' startIcon={<PhotoCamera />}>
{props.label} {props.label}
<input <input
@ -53,6 +50,7 @@ export function ImageInput(props: ImageInputProps) {
}} }}
/> />
</Button> </Button>
</Stack>
{renderImage()} {renderImage()}
</Stack>; </Stack>;
} }

View File

@ -38,14 +38,14 @@ export interface Point {
} }
export interface MaskCanvasProps { export interface MaskCanvasProps {
base?: Maybe<Blob>;
source?: Maybe<Blob>; source?: Maybe<Blob>;
mask?: Maybe<Blob>;
onSave: (blob: Blob) => void; onSave: (blob: Blob) => void;
} }
export function MaskCanvas(props: MaskCanvasProps) { export function MaskCanvas(props: MaskCanvasProps) {
const { base, source } = props; const { source, mask } = props;
const { params } = mustExist(useContext(ConfigContext)); const { params } = mustExist(useContext(ConfigContext));
function saveMask(): void { function saveMask(): void {
@ -140,20 +140,20 @@ export function MaskCanvas(props: MaskCanvasProps) {
}, [maskState.current]); }, [maskState.current]);
useEffect(() => { useEffect(() => {
if (doesExist(bufferRef.current) && doesExist(source)) { if (doesExist(bufferRef.current) && doesExist(mask)) {
drawSource(source); drawSource(mask);
} }
}, [source]); }, [mask]);
useEffect(() => { useEffect(() => {
if (doesExist(base)) { if (doesExist(source)) {
if (doesExist(background)) { if (doesExist(background)) {
URL.revokeObjectURL(background); URL.revokeObjectURL(background);
} }
setBackground(URL.createObjectURL(base)); setBackground(URL.createObjectURL(source));
} }
}, [base]); }, [source]);
const styles: React.CSSProperties = { const styles: React.CSSProperties = {
maxHeight: params.height.default, maxHeight: params.height.default,

View File

@ -75,6 +75,7 @@ export function Inpaint() {
filter={IMAGE_FILTER} filter={IMAGE_FILTER}
image={source} image={source}
label='Source' label='Source'
hideSelection={true}
onChange={(file) => { onChange={(file) => {
setInpaint({ setInpaint({
source: file, source: file,
@ -85,23 +86,22 @@ export function Inpaint() {
filter={IMAGE_FILTER} filter={IMAGE_FILTER}
image={mask} image={mask}
label='Mask' label='Mask'
hideSelection={true}
onChange={(file) => { onChange={(file) => {
setInpaint({ setInpaint({
mask: file, mask: file,
}); });
}} }}
renderImage={(image) => />
<MaskCanvas <MaskCanvas
base={source} source={source}
source={image} mask={mask}
onSave={(file) => { onSave={(file) => {
setInpaint({ setInpaint({
mask: file, mask: file,
}); });
}} }}
/> />
}
/>
<ImageControl <ImageControl
selector={(s) => s.inpaint} selector={(s) => s.inpaint}
onChange={(newParams) => { onChange={(newParams) => {