aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts
diff options
context:
space:
mode:
authorSophie Zhang <sophie_zhang@brown.edu>2023-06-28 11:47:41 -0400
committerSophie Zhang <sophie_zhang@brown.edu>2023-06-28 11:47:41 -0400
commitb6537cce6aa34eb33c052d7ec2cbbf804be08fba (patch)
tree34ee9ff83af71359ce6a0cc17d5a711db7780fa1 /src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts
parenta6181a5695c7355b7996ac6c6c1e7aad886e6302 (diff)
added files
Diffstat (limited to 'src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts')
-rw-r--r--src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts b/src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts
new file mode 100644
index 000000000..c2716e083
--- /dev/null
+++ b/src/client/views/nodes/generativeFill/generativeFillUtils/BrushHandler.ts
@@ -0,0 +1,87 @@
+import { GenerativeFillMathHelpers } from "./GenerativeFillMathHelpers";
+import { eraserColor } from "./generativeFillConstants";
+import { Point } from "./generativeFillInterfaces";
+
+export class BrushHandler {
+ static brushCircle = (
+ x: number,
+ y: number,
+ brushRadius: number,
+ ctx: CanvasRenderingContext2D
+ ) => {
+ ctx.globalCompositeOperation = "destination-out";
+ ctx.shadowColor = "#ffffffeb";
+ ctx.shadowBlur = 5;
+ ctx.beginPath();
+ ctx.arc(x, y, brushRadius, 0, 2 * Math.PI);
+ ctx.fill();
+ ctx.closePath();
+ };
+
+ static brushCircleOverlay = (
+ x: number,
+ y: number,
+ brushRadius: number,
+ ctx: CanvasRenderingContext2D,
+ fillColor: string,
+ erase: boolean
+ ) => {
+ ctx.globalCompositeOperation = "destination-out";
+ // ctx.globalCompositeOperation = erase ? "destination-out" : "source-over";
+ ctx.fillStyle = fillColor;
+ ctx.shadowColor = eraserColor;
+ ctx.shadowBlur = 5;
+ ctx.beginPath();
+ ctx.arc(x, y, brushRadius, 0, 2 * Math.PI);
+ ctx.fill();
+ ctx.closePath();
+ };
+
+ static createBrushPath = (
+ startPoint: Point,
+ endPoint: Point,
+ brushRadius: number,
+ ctx: CanvasRenderingContext2D
+ ) => {
+ const dist = GenerativeFillMathHelpers.distanceBetween(
+ startPoint,
+ endPoint
+ );
+
+ for (let i = 0; i < dist; i += 5) {
+ const s = i / dist;
+ BrushHandler.brushCircle(
+ startPoint.x * (1 - s) + endPoint.x * s,
+ startPoint.y * (1 - s) + endPoint.y * s,
+ brushRadius,
+ ctx
+ );
+ }
+ };
+
+ static createBrushPathOverlay = (
+ startPoint: Point,
+ endPoint: Point,
+ brushRadius: number,
+ ctx: CanvasRenderingContext2D,
+ fillColor: string,
+ erase: boolean
+ ) => {
+ const dist = GenerativeFillMathHelpers.distanceBetween(
+ startPoint,
+ endPoint
+ );
+
+ for (let i = 0; i < dist; i += 5) {
+ const s = i / dist;
+ BrushHandler.brushCircleOverlay(
+ startPoint.x * (1 - s) + endPoint.x * s,
+ startPoint.y * (1 - s) + endPoint.y * s,
+ brushRadius,
+ ctx,
+ fillColor,
+ erase
+ );
+ }
+ };
+}