summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaze Winther <mazewinther@gmail.com>2026-05-02 01:33:20 +0200
committerMaze Winther <mazewinther@gmail.com>2026-05-02 03:27:23 +0200
commit23187b0b6a9f179bdb68578fc4bdaa8414b8316d (patch)
tree67b433f07fc316d95c997a48d57cb46b8780b9fc
parentf66cdbfeb2e8b68e70e1f8595c38cacf58210ddf (diff)
downloadopencut-23187b0b6a9f179bdb68578fc4bdaa8414b8316d.tar.gz
refactor: remove dead tangent handle variant
The { kind: "tangent" } MaskHandleId variant was never constructed — neither getFreeformDisplayHandles nor any other code ever produced a tangent handle object. The in/out control-arm branches in computeFreeformParamUpdate, the tangent case in maskHandleIdKey, and the CUSTOM_MASK_TANGENT_SIZE rendering path in mask-handles.tsx were all unreachable. Removed all four dead paths and removed "tangent" from MaskHandleKind. Co-authored-by: Cursor <cursoragent@cursor.com>
-rw-r--r--apps/web/src/masks/freeform/definition.ts30
-rw-r--r--apps/web/src/masks/types.ts6
-rw-r--r--apps/web/src/preview/components/mask-handles.tsx35
3 files changed, 22 insertions, 49 deletions
diff --git a/apps/web/src/masks/freeform/definition.ts b/apps/web/src/masks/freeform/definition.ts
index b657218d..ae30110e 100644
--- a/apps/web/src/masks/freeform/definition.ts
+++ b/apps/web/src/masks/freeform/definition.ts
@@ -257,7 +257,7 @@ function computeFreeformParamUpdate({
};
}
- if (handleId.kind !== "anchor" && handleId.kind !== "tangent") {
+ if (handleId.kind !== "anchor") {
return {};
}
@@ -279,29 +279,11 @@ function computeFreeformParamUpdate({
path: updateFreeformPathMaskPoint({
points,
pointId: handleId.pointId,
- updater: (point) => {
- if (handleId.kind === "anchor") {
- return {
- ...point,
- x: localPoint.x,
- y: localPoint.y,
- };
- }
-
- if (handleId.side === "in") {
- return {
- ...point,
- inX: localPoint.x - point.x,
- inY: localPoint.y - point.y,
- };
- }
-
- return {
- ...point,
- outX: localPoint.x - point.x,
- outY: localPoint.y - point.y,
- };
- },
+ updater: (point) => ({
+ ...point,
+ x: localPoint.x,
+ y: localPoint.y,
+ }),
}),
};
}
diff --git a/apps/web/src/masks/types.ts b/apps/web/src/masks/types.ts
index 59f84f71..afc79a8c 100644
--- a/apps/web/src/masks/types.ts
+++ b/apps/web/src/masks/types.ts
@@ -187,11 +187,10 @@ export interface MaskFeatures {
export type MaskHandleIcon = "rotate" | "feather";
-export type MaskHandleKind = "corner" | "edge" | "icon" | "point" | "tangent";
+export type MaskHandleKind = "corner" | "edge" | "icon" | "point";
type Side = "left" | "right" | "top" | "bottom";
type CornerXY = { x: "left" | "right"; y: "top" | "bottom" };
-type CustomTangent = "in" | "out";
export type MaskHandleId =
| { kind: "position" }
@@ -201,7 +200,6 @@ export type MaskHandleId =
| { kind: "edge"; side: Side }
| { kind: "corner"; corner: CornerXY }
| { kind: "anchor"; pointId: string }
- | { kind: "tangent"; pointId: string; side: CustomTangent }
| { kind: "segment"; index: number };
export function maskHandleIdKey({ id }: { id: MaskHandleId }): string {
@@ -217,8 +215,6 @@ export function maskHandleIdKey({ id }: { id: MaskHandleId }): string {
return `${id.corner.y}-${id.corner.x}`;
case "anchor":
return `point:${id.pointId}:anchor`;
- case "tangent":
- return `point:${id.pointId}:${id.side}`;
case "segment":
return `segment:${id.index}`;
}
diff --git a/apps/web/src/preview/components/mask-handles.tsx b/apps/web/src/preview/components/mask-handles.tsx
index 99f80007..314984ef 100644
--- a/apps/web/src/preview/components/mask-handles.tsx
+++ b/apps/web/src/preview/components/mask-handles.tsx
@@ -17,7 +17,6 @@ import {
} from "./handle-primitives";
const CUSTOM_MASK_ANCHOR_SIZE = 7;
-const CUSTOM_MASK_TANGENT_SIZE = 6;
import { Rotate01Icon, FeatherIcon } from "@hugeicons/core-free-icons";
export function MaskHandles({
@@ -258,25 +257,21 @@ export function MaskHandles({
);
}
- if (handle.kind === "point" || handle.kind === "tangent") {
- return (
- <CircleHandle
- key={key}
- screen={screen}
- size={
- handle.kind === "tangent"
- ? CUSTOM_MASK_TANGENT_SIZE
- : CUSTOM_MASK_ANCHOR_SIZE
- }
- isSelected={handle.isSelected}
- onPointerDown={(event) =>
- handleMaskPointerDown({ event, handleId: handle.id })
- }
- onPointerMove={onPointerMove}
- onPointerUp={onPointerUp}
- />
- );
- }
+ if (handle.kind === "point") {
+ return (
+ <CircleHandle
+ key={key}
+ screen={screen}
+ size={CUSTOM_MASK_ANCHOR_SIZE}
+ isSelected={handle.isSelected}
+ onPointerDown={(event) =>
+ handleMaskPointerDown({ event, handleId: handle.id })
+ }
+ onPointerMove={onPointerMove}
+ onPointerUp={onPointerUp}
+ />
+ );
+ }
if (handle.kind === "corner") {
return (