From 2b3e6fc61c11b67cadb30ed7fdddc71fb2c33d2a Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Wed, 19 Nov 2025 08:43:22 -0800 Subject: [PATCH] Fix: Clean Q hole and optimize tail winding --- src/glyphs/Q.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/glyphs/Q.js b/src/glyphs/Q.js index cf2051a..9c01421 100644 --- a/src/glyphs/Q.js +++ b/src/glyphs/Q.js @@ -1,9 +1,21 @@ export const glyphQ=(o,w)=>new o.Glyph({name:"Q",unicode:81,advanceWidth:w,path:(p=>{ - p.moveTo(340,715).curveTo(530,715,620,540,620,360).curveTo(620,180,525,50,370,10).lineTo(460,-90).lineTo(385,-120).lineTo(285,10).curveTo(155,30,65,170,65,350).curveTo(65,555,170,715,340,715).close() - .moveTo(340,70).curveTo(375,70,405,95,430,130).lineTo(305,270).lineTo(280,245).lineTo(345,70).curveTo(343,70,341,70,340,70).close() // tail bisect - .moveTo(530,360).curveTo(530,420,515,635,340,635).curveTo(220,635,155,510,155,350).curveTo(155,190,220,70,285,70).lineTo(355,210).lineTo(385,185).lineTo(300,85).curveTo(470,85,530,180,530,360).close(); return p; + // Outer Circle + p.moveTo(340,-15).curveTo(155,-15,65,160,65,350).curveTo(65,540,155,715,340,715) + .curveTo(525,715,615,540,615,350).curveTo(615,160,525,-15,340,-15).close() + // Inner Circle (Hole) - Reversed winding + .moveTo(340,635).curveTo(460,635,530,500,530,350).curveTo(530,185,460,65,340,65) + .curveTo(220,65,150,185,150,350).curveTo(150,500,220,635,340,635).close() + // Tail - Positive winding (same as outer) + .moveTo(380,180).curveTo(380,180,420,220,445,220).curveTo(480,220,540,100,660,30) + .lineTo(620,-30).curveTo(500,50,455,120,435,120).curveTo(420,120,370,70,340,40).close(); + return p; })(new o.Path())}); + export const glyphq=(o,w)=>new o.Glyph({name:"q",unicode:113,advanceWidth:w,path:(p=>{ - p.moveTo(460,-200).lineTo(460,500).lineTo(385,500).lineTo(385,430).curveTo(340,495,260,506,215,506).curveTo(95,506,45,380,45,255).curveTo(45,90,120,-15,215,-15).curveTo(300,-15,340,50,385,90).lineTo(385,-200).close() - .moveTo(250,60).curveTo(180,60,130,110,130,250).curveTo(130,385,180,435,260,435).curveTo(340,435,385,350,385,255).curveTo(385,120,325,60,250,60).close(); return p; + p.moveTo(460,-200).lineTo(460,500).lineTo(385,500).lineTo(385,430) + .curveTo(340,495,260,506,215,506).curveTo(95,506,45,380,45,255) + .curveTo(45,90,120,-15,215,-15).curveTo(300,-15,340,50,385,90).lineTo(385,-200).close() + .moveTo(250,60).curveTo(180,60,130,110,130,250).curveTo(130,385,180,435,260,435) + .curveTo(340,435,385,350,385,255).curveTo(385,120,325,60,250,60).close(); + return p; })(new o.Path())});