fix(gui): only show inpaint image once
This commit is contained in:
parent
a074078cec
commit
d6f2c626f6
|
@ -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>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
Loading…
Reference in New Issue