You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Grace note engraving: scaled stems/flags/beams, acciaccatura slash, stems forced up
Stem class gains _graceScale (60% thinner lines) and _slash (acciaccatura
diagonal through stem). handleNote/handleChord/drawBeamGroup in beams.js now
detect grace notes: force stems up, shorten to ~5 half-spaces, scale flag
glyphs, and tag beams with _graceScale for thinner beam lines. Beam class
scales thickness proportionally. Added 'Grace Note Variants' visual test
(accidentals, high position, beamed 16th grace pair).
-[x] Grace notes โ drawn at 60% scale with reduced spacing
57
+
-[x] Grace notes โ 60% scale noteheads/accidentals, stems always up, shorter stems (~5 half-spaces), thinner stem/beam lines, scaled flag glyphs, acciaccatura slash through stem. Beamed grace groups get scaled beams. Reduced horizontal spacing (40% spring, 50% padding).
58
58
-[x] Ties and slurs โ direction follows stem (upโbelow, downโabove); anchored at notehead pitch (offsetY); per-child-note chord ties; cross-system tie splitting preserves direction; slurs use outer chord note as anchor
59
59
-[x]**Professional tie/slur engraving** โ Cubic bezier curves with proportional arc height (short ties = round, long ties = flat); separate Tie/Slur classes (ties thicker+rounder, slurs thinner+more open); edge-anchored ties (gap from notehead edges, "never touch"); chord inner/outer direction (top curves above, bottom below, inner follows nearest); mixed-stem slurs default above; staff-line avoidance (peak nudged into spaces); accidental collision clearance; engraving constants in `src/engraving-rules.js`
60
60
-[x] Triplet/tuplet brackets โ numeral on stem/beam side; fully-beamed triplets get numeral only (no bracket); unbeamed/mixed get bracket+numeral; vocal staves place numeral above to clear lyrics
@@ -66,7 +66,7 @@ Planned features and improvements, roughly prioritized.
66
66
-[ ]**Staves need sufficient vertical space** โ when notes extend far above/below the staff (ledger lines, high beams, triplet brackets, slur arcs), adjacent staves can overlap. The vertical gap between staves should be computed dynamically based on the actual content extent (highest/lowest drawn element) rather than using a fixed inter-staff gap. This affects both scroll and wrap modes.
67
67
-[ ]**Hairpins collide with adjacent dynamics** โ a crescendo/decrescendo wedge that leads into a dynamic marking (e.g. cresc โ ff) can overlap the dynamic glyph. The hairpin end-point should stop short to leave clearance, or the dynamic should be nudged right.
68
68
-[ ]**Hairpins and dynamics vertical alignment** โ hairpin wedges and dynamic markings on the same staff should share a consistent baseline Y position so they read as a continuous expression lane, rather than each sitting at its own independent vertical offset.
69
-
-[]**Grace notes: stem/flag not scaled** โ grace note noteheads and accidentals render at 60% scale, but stems are full length/thickness and flags are full-sized. `beams.js` has zero grace-note awareness. Need: shorter stems (~4 half-spaces), 60%-scaled flag glyphs, thinner stem lines, and optionally an acciaccatura slash through the stem.
69
+
-[x]**Grace notes: stem/flag not scaled** โ Fixed: stems shortened to ~5 half-spaces with 60% thickness, flag glyphs scaled, acciaccatura slash drawn, stems forced up. Beam groups also scaled (thinner beams, shorter stems).
70
70
-[ ]**Stave brackets misaligned** โ bracket/brace rendering for staff groups (`bracketWithNext`, `braceWithNext`) is visually incorrect or mispositioned.
71
71
-[ ]**Chord tie orientation wrong** โ ties on chord notes don't always follow the inner/outer rule correctly in all cases. The top note should curve above, bottom note below, inner notes follow nearest outer.
72
72
-[ ]**Slur direction with mixed beams** โ when a slur spans notes that belong to different beam groups or a mix of beamed and unbeamed notes, the slur direction heuristic can pick the wrong side. Should consider the overall phrase contour and stem directions of all spanned notes, not just the start/end.
0 commit comments