aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/bluebey-studio/src/faceArt.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/bluebey-studio/src/faceArt.js')
-rw-r--r--public/bluebey-studio/src/faceArt.js20
1 files changed, 20 insertions, 0 deletions
diff --git a/public/bluebey-studio/src/faceArt.js b/public/bluebey-studio/src/faceArt.js
index 04dd6e3..765c0db 100644
--- a/public/bluebey-studio/src/faceArt.js
+++ b/public/bluebey-studio/src/faceArt.js
@@ -130,6 +130,8 @@ export const EYE_LAYOUT = {
armX: 104,
},
arch: { edgesUp: 8, apexUp: 44 },
+ // まつげ: a few strokes flicking out from the upper-outer lid (see drawEyes).
+ lash: { length: 34, width: 9, angles: [26, 52, 78] },
};
/**
@@ -1540,6 +1542,24 @@ export function drawEyes(ctx, p) {
ctx.restore();
}
+ // --- まつげ --------------------------------------------------------
+ // Short strokes flicking outwards from the upper-outer lid. They sit outside
+ // the eyeball, so they are drawn after the lid block and are not clipped.
+ if (style.lashes) {
+ const outDir = -eye.towardNose;
+ for (const deg of EYE_LAYOUT.lash.angles) {
+ const t = (deg * Math.PI) / 180;
+ const ux = outDir * Math.cos(t);
+ const uy = -Math.sin(t);
+ const r0 = eye.r * 0.96;
+ const r1 = r0 + EYE_LAYOUT.lash.length;
+ strokePolyline(ctx, [
+ { x: eye.cx + ux * r0, y: eye.cy + uy * r0 },
+ { x: eye.cx + ux * r1, y: eye.cy + uy * r1 },
+ ], { color: lineColor, width: EYE_LAYOUT.lash.width });
+ }
+ }
+
// --- outline (line-art mode only) ---------------------------------
if (line) strokeCircle(ctx, eye.cx, eye.cy, eye.r, lineColor, lidWidth * 0.75);
}