mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Changes mask to diagonal line pattern
This commit is contained in:
parent
8ed10c732b
commit
b44e9c7752
BIN
frontend/src/assets/images/mask_pattern2.png
Normal file
BIN
frontend/src/assets/images/mask_pattern2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
@ -1,13 +1,18 @@
|
|||||||
import { createSelector } from '@reduxjs/toolkit';
|
import { createSelector } from '@reduxjs/toolkit';
|
||||||
import { useAppSelector } from 'app/store';
|
import { useAppSelector } from 'app/store';
|
||||||
import { RectConfig } from 'konva/lib/shapes/Rect';
|
import { RectConfig } from 'konva/lib/shapes/Rect';
|
||||||
|
import _ from 'lodash';
|
||||||
import { Rect } from 'react-konva';
|
import { Rect } from 'react-konva';
|
||||||
import {
|
import {
|
||||||
currentCanvasSelector,
|
currentCanvasSelector,
|
||||||
InpaintingCanvasState,
|
InpaintingCanvasState,
|
||||||
OutpaintingCanvasState,
|
OutpaintingCanvasState,
|
||||||
} from './canvasSlice';
|
} from './canvasSlice';
|
||||||
|
import maskPatternImage from 'assets/images/mask_pattern2.png';
|
||||||
|
|
||||||
import { rgbaColorToString } from './util/colorToString';
|
import { rgbaColorToString } from './util/colorToString';
|
||||||
|
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||||
|
import Konva from 'konva';
|
||||||
|
|
||||||
export const canvasMaskCompositerSelector = createSelector(
|
export const canvasMaskCompositerSelector = createSelector(
|
||||||
currentCanvasSelector,
|
currentCanvasSelector,
|
||||||
@ -20,6 +25,7 @@ export const canvasMaskCompositerSelector = createSelector(
|
|||||||
stageDimensions,
|
stageDimensions,
|
||||||
stageScale,
|
stageScale,
|
||||||
maskColorString: rgbaColorToString(maskColor),
|
maskColorString: rgbaColorToString(maskColor),
|
||||||
|
maskOpacity: maskColor.a,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -29,18 +35,59 @@ type IAICanvasMaskCompositerProps = RectConfig;
|
|||||||
const IAICanvasMaskCompositer = (props: IAICanvasMaskCompositerProps) => {
|
const IAICanvasMaskCompositer = (props: IAICanvasMaskCompositerProps) => {
|
||||||
const { ...rest } = props;
|
const { ...rest } = props;
|
||||||
|
|
||||||
const { maskColorString, stageCoordinates, stageDimensions, stageScale } =
|
const {
|
||||||
useAppSelector(canvasMaskCompositerSelector);
|
maskColorString,
|
||||||
|
maskOpacity,
|
||||||
|
stageCoordinates,
|
||||||
|
stageDimensions,
|
||||||
|
stageScale,
|
||||||
|
} = useAppSelector(canvasMaskCompositerSelector);
|
||||||
|
|
||||||
|
const [fillPatternImage, setFillPatternImage] =
|
||||||
|
useState<HTMLImageElement | null>(null);
|
||||||
|
|
||||||
|
const [offset, setOffset] = useState<number>(0);
|
||||||
|
|
||||||
|
const rectRef = useRef<Konva.Rect>(null);
|
||||||
|
const incrementOffset = useCallback(() => {
|
||||||
|
setOffset(offset + 1);
|
||||||
|
setTimeout(incrementOffset, 500);
|
||||||
|
console.log('toggle');
|
||||||
|
console.log('incrementing');
|
||||||
|
}, [offset]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (fillPatternImage) return;
|
||||||
|
const image = new Image();
|
||||||
|
|
||||||
|
image.onload = () => {
|
||||||
|
setFillPatternImage(image);
|
||||||
|
};
|
||||||
|
|
||||||
|
image.src = maskPatternImage;
|
||||||
|
}, [fillPatternImage]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const timer = setInterval(() => setOffset((i) => (i + 1) % 6), 100);
|
||||||
|
return () => clearInterval(timer);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!fillPatternImage) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Rect
|
<Rect
|
||||||
|
ref={rectRef}
|
||||||
offsetX={stageCoordinates.x / stageScale}
|
offsetX={stageCoordinates.x / stageScale}
|
||||||
offsetY={stageCoordinates.y / stageScale}
|
offsetY={stageCoordinates.y / stageScale}
|
||||||
height={stageDimensions.height / stageScale}
|
height={stageDimensions.height / stageScale}
|
||||||
width={stageDimensions.width / stageScale}
|
width={stageDimensions.width / stageScale}
|
||||||
fill={maskColorString}
|
fillPatternImage={fillPatternImage}
|
||||||
|
fillPatternOffsetY={offset}
|
||||||
|
fillPatternRepeat={'repeat'}
|
||||||
|
fillPatternScale={{ x: 1 / stageScale, y: 1 / stageScale }}
|
||||||
|
listening={true}
|
||||||
|
opacity={maskOpacity}
|
||||||
globalCompositeOperation={'source-in'}
|
globalCompositeOperation={'source-in'}
|
||||||
listening={false}
|
|
||||||
{...rest}
|
{...rest}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user