diff --git a/changes/31.8.0.md b/changes/31.8.0.md index a7e3a798b..17ce16994 100644 --- a/changes/31.8.0.md +++ b/changes/31.8.0.md @@ -7,3 +7,5 @@ * Optimize stroke width of bar for split bowl variants of Cyrillic Lower Ef (`ф`). * Optimize glyph for Cyrillic Capital Ef (`Ф`) under Bulgarian locale (`'BGR '`) under slab. * Fix seam in glyphs of Cyrillic Capital/Small Letter Zhwe (`U+A684`..`U+A685`). +* Fix broken shape of certain power and playback symbols under quasi-proportional (#2528). +* Fix alignment of the suit part of Playing Cards glyphs under quasi-Proportional (#2529). diff --git a/packages/font-glyphs/src/auto-build/composite.ptl b/packages/font-glyphs/src/auto-build/composite.ptl index f94520fb1..c604acd28 100644 --- a/packages/font-glyphs/src/auto-build/composite.ptl +++ b/packages/font-glyphs/src/auto-build/composite.ptl @@ -832,7 +832,7 @@ glyph-block AutoBuild-Enclosure : begin do "Double-digit circled" local compositions : list - list null {'markBaseSpace'} WideWidth1 + list null {'sp1'} WideWidth1 list 0x2789 {'one/sansSerif.lnum' 'zero.lnum'} WideWidth1 list 0x1F16D {'C' 'C'} WideWidth2 list 0x1F12D {'C' 'D'} WideWidth1 @@ -864,14 +864,12 @@ glyph-block AutoBuild-Enclosure : begin do "Single-digit boxed" local compositions {} - compositions.push { null {'markBaseSpace'} WideWidth1 } foreach [j : range 0 26] : compositions.push {(0x1F130 + j) {[glyphStore.queryNameByUnicode (['A'.charCodeAt 0] + j)]} WideWidth1} compositions.push : list 0x1F1A5 {'d'} WideWidth1 createBoxedGlyphs 1 compositions do "Double-digit boxed" createBoxedGlyphs 2 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F14A {'H' 'V'} WideWidth1 list 0x1F14B {'M' 'V'} WideWidth1 list 0x1F14C {'S' 'D'} WideWidth1 @@ -890,7 +888,6 @@ glyph-block AutoBuild-Enclosure : begin do "Triple-digit boxed" createBoxedGlyphs 3 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F14E {'P' 'P' 'V'} WideWidth1 list 0x1F195 {'N' 'E' 'W'} WideWidth1 list 0x1F198 {'S' 'O' 'S'} WideWidth1 @@ -905,7 +902,6 @@ glyph-block AutoBuild-Enclosure : begin do "Quadruple-digit boxed" createBoxedGlyphs 4 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F192 {'C' 'O' 'O' 'L'} WideWidth1 list 0x1F193 {'F' 'R' 'E' 'E'} WideWidth1 list 0x1F1A2 {'two.lnum' 'two.lnum' 'period' 'two.lnum'} WideWidth1 @@ -913,55 +909,50 @@ glyph-block AutoBuild-Enclosure : begin do "Triple-digit two-row boxed" createTwoRowBoxedGlyphs 3 : list - list null { 'markBaseSpace' 'markBaseSpace' } WideWidth1 list 0x1F19C { 'two.lnum' 'N' 'D' 'S' 'C' 'R' } WideWidth1 list 0x1F1A8 { 'H' 'I' 'hyphen' 'R' 'E' 'S' } WideWidth1 do "Quadruple-digit two-row boxed" createTwoRowBoxedGlyphs 4 : list - list null { 'markBaseSpace' 'markBaseSpace' } WideWidth1 list 0x1F1A9 { 'L' 'O' 'S' 'S' 'L' 'E' 'S' 'S' } WideWidth1 - do "Single-digit playing cards" + do "Playing cards" + # Here we always construct the two-digit cards to ensure that all digit and suit glyphs + # are aligned across all cards. local compositions : list - list null {'markBaseSpace' 'markBaseSpace'} WideWidth1 - list 0x1F0A1 {'A' 'spadeSuit'} WideWidth4 - list 0x1F0AB {'J/noDescend' 'spadeSuit'} WideWidth4 - list 0x1F0AC {'C' 'spadeSuit'} WideWidth4 - list 0x1F0AD {'Q' 'spadeSuit'} WideWidth4 - list 0x1F0AE {'K' 'spadeSuit'} WideWidth4 - list 0x1F0B1 {'A' 'whiteHeartSuit'} WideWidth4 - list 0x1F0BB {'J/noDescend' 'whiteHeartSuit'} WideWidth4 - list 0x1F0BC {'C' 'whiteHeartSuit'} WideWidth4 - list 0x1F0BD {'Q' 'whiteHeartSuit'} WideWidth4 - list 0x1F0BE {'K' 'whiteHeartSuit'} WideWidth4 - list 0x1F0C1 {'A' 'whiteDiamondSuit'} WideWidth4 - list 0x1F0CB {'J/noDescend' 'whiteDiamondSuit'} WideWidth4 - list 0x1F0CC {'C' 'whiteDiamondSuit'} WideWidth4 - list 0x1F0CD {'Q' 'whiteDiamondSuit'} WideWidth4 - list 0x1F0CE {'K' 'whiteDiamondSuit'} WideWidth4 - list 0x1F0D1 {'A' 'clubSuit'} WideWidth4 - list 0x1F0DB {'J/noDescend' 'clubSuit'} WideWidth4 - list 0x1F0DC {'C' 'clubSuit'} WideWidth4 - list 0x1F0DD {'Q' 'clubSuit'} WideWidth4 - list 0x1F0DE {'K' 'clubSuit'} WideWidth4 - foreach [j : range 2 till 9] : compositions.push : list (0x1F0A0 + j) [[digitGlyphNames j].concat {'spadeSuit'}] WideWidth4 - foreach [j : range 2 till 9] : compositions.push : list (0x1F0B0 + j) [[digitGlyphNames j].concat {'whiteHeartSuit'}] WideWidth4 - foreach [j : range 2 till 9] : compositions.push : list (0x1F0C0 + j) [[digitGlyphNames j].concat {'whiteDiamondSuit'}] WideWidth4 - foreach [j : range 2 till 9] : compositions.push : list (0x1F0D0 + j) [[digitGlyphNames j].concat {'clubSuit'}] WideWidth4 - createPlayingCardGlyphs 1 compositions - - do "Double-digit playing cards" - createPlayingCardGlyphs 2 : list - list null { 'markBaseSpace' 'markBaseSpace' } WideWidth1 - list 0x1F0AA { 'one.lnum' 'zero.lnum' 'spadeSuit' 'zwsp' } WideWidth4 - list 0x1F0BA { 'one.lnum' 'zero.lnum' 'whiteHeartSuit' 'zwsp' } WideWidth4 - list 0x1F0CA { 'one.lnum' 'zero.lnum' 'whiteDiamondSuit' 'zwsp' } WideWidth4 - list 0x1F0DA { 'one.lnum' 'zero.lnum' 'clubSuit' 'zwsp' } WideWidth4 + list 0x1F0A1 { 'A' 'sp1' 'spadeSuit' 'zwsp' } WideWidth4 + list 0x1F0AB { 'J/noDescend' 'sp1' 'spadeSuit' 'zwsp' } WideWidth4 + list 0x1F0AC { 'C' 'sp1' 'spadeSuit' 'zwsp' } WideWidth4 + list 0x1F0AD { 'Q' 'sp1' 'spadeSuit' 'zwsp' } WideWidth4 + list 0x1F0AE { 'K' 'sp1' 'spadeSuit' 'zwsp' } WideWidth4 + list 0x1F0B1 { 'A' 'sp1' 'whiteHeartSuit' 'zwsp' } WideWidth4 + list 0x1F0BB { 'J/noDescend' 'sp1' 'whiteHeartSuit' 'zwsp' } WideWidth4 + list 0x1F0BC { 'C' 'sp1' 'whiteHeartSuit' 'zwsp' } WideWidth4 + list 0x1F0BD { 'Q' 'sp1' 'whiteHeartSuit' 'zwsp' } WideWidth4 + list 0x1F0BE { 'K' 'sp1' 'whiteHeartSuit' 'zwsp' } WideWidth4 + list 0x1F0C1 { 'A' 'sp1' 'whiteDiamondSuit' 'zwsp' } WideWidth4 + list 0x1F0CB { 'J/noDescend' 'sp1' 'whiteDiamondSuit' 'zwsp' } WideWidth4 + list 0x1F0CC { 'C' 'sp1' 'whiteDiamondSuit' 'zwsp' } WideWidth4 + list 0x1F0CD { 'Q' 'sp1' 'whiteDiamondSuit' 'zwsp' } WideWidth4 + list 0x1F0CE { 'K' 'sp1' 'whiteDiamondSuit' 'zwsp' } WideWidth4 + list 0x1F0D1 { 'A' 'sp1' 'clubSuit' 'zwsp' } WideWidth4 + list 0x1F0DB { 'J/noDescend' 'sp1' 'clubSuit' 'zwsp' } WideWidth4 + list 0x1F0DC { 'C' 'sp1' 'clubSuit' 'zwsp' } WideWidth4 + list 0x1F0DD { 'Q' 'sp1' 'clubSuit' 'zwsp' } WideWidth4 + list 0x1F0DE { 'K' 'sp1' 'clubSuit' 'zwsp' } WideWidth4 + list 0x1F0AA { 'one.lnum' 'zero.lnum' 'spadeSuit' 'zwsp' } WideWidth4 + list 0x1F0BA { 'one.lnum' 'zero.lnum' 'whiteHeartSuit' 'zwsp' } WideWidth4 + list 0x1F0CA { 'one.lnum' 'zero.lnum' 'whiteDiamondSuit' 'zwsp' } WideWidth4 + list 0x1F0DA { 'one.lnum' 'zero.lnum' 'clubSuit' 'zwsp' } WideWidth4 + foreach [j : range 2 till 9] : begin + compositions.push : list (0x1F0A0 + j) [[digitGlyphNames j].concat {'sp1' 'spadeSuit' 'zwsp'}] WideWidth4 + compositions.push : list (0x1F0B0 + j) [[digitGlyphNames j].concat {'sp1' 'whiteHeartSuit' 'zwsp'}] WideWidth4 + compositions.push : list (0x1F0C0 + j) [[digitGlyphNames j].concat {'sp1' 'whiteDiamondSuit' 'zwsp'}] WideWidth4 + compositions.push : list (0x1F0D0 + j) [[digitGlyphNames j].concat {'sp1' 'clubSuit' 'zwsp'}] WideWidth4 + createPlayingCardGlyphs 2 compositions do "Single-digit trump cards" createTrumpCardGlyphs 1 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F0BF {'vShadeStar.NWID'} WideWidth4 list 0x1F0CF {'blackStar.NWID'} WideWidth4 list 0x1F0DF {'whiteStar.NWID'} WideWidth4 @@ -972,7 +963,6 @@ glyph-block AutoBuild-Enclosure : begin do "Double-digit trump cards" createTrumpCardGlyphs 2 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F0E2 {'I' 'I'} WideWidth4 list 0x1F0E4 {'I' 'V'} WideWidth4 list 0x1F0E6 {'V' 'I'} WideWidth4 @@ -983,7 +973,6 @@ glyph-block AutoBuild-Enclosure : begin do "Triple-digit trump cards" createTrumpCardGlyphs 3 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F0E3 {'I' 'I' 'I'} WideWidth4 list 0x1F0E7 {'V' 'I' 'I'} WideWidth4 list 0x1F0EC {'X' 'I' 'I'} WideWidth4 @@ -994,19 +983,17 @@ glyph-block AutoBuild-Enclosure : begin do "Quadruple-digit trump cards" createTrumpCardGlyphs 4 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F0E8 {'V' 'I' 'I' 'I'} WideWidth4 list 0x1F0ED {'X' 'I' 'I' 'I'} WideWidth4 list 0x1F0F1 {'X' 'V' 'I' 'I'} WideWidth4 do "Quintuple-digit trump cards" createTrumpCardGlyphs 5 : list - list null {'markBaseSpace'} WideWidth1 list 0x1F0F2 {'X' 'V' 'I' 'I' 'I'} WideWidth4 do "Playing card back" createPlayingCardBackGlyphs 1 : list - list 0x1F0A0 {'markBaseSpace'} WideWidth4 + list 0x1F0A0 {'sp1'} WideWidth4 do "Single-digit dashed-boxed" local compositions {} @@ -1047,13 +1034,11 @@ glyph-block AutoBuild-Enclosure : begin do "Single-digit double circled" local compositions {} - compositions.push { null {'markBaseSpace'} WideWidth1 } foreach [j : range 1 till 9] : compositions.push : list (0x24F5 + j - 1) [digitGlyphNames j] WideWidth1 createDoubleCircledGlyphs 1 compositions do "Double-digit double circled" local compositions {} - compositions.push { null {'markBaseSpace'} WideWidth1 } foreach [j : range 10 till 10] : compositions.push : list (0x24F5 + j - 1) [digitGlyphNames j] WideWidth1 createDoubleCircledGlyphs 2 compositions @@ -1223,7 +1208,7 @@ glyph-block Autobuild-Fractions : begin list 0x215C { 'three.lnum' 'eight.lnum' } list 0x215D { 'five.lnum' 'eight.lnum' } list 0x215E { 'seven.lnum' 'eight.lnum' } - list 0x215F { 'one.lnum' 'markBaseSpace' } + list 0x215F { 'one.lnum' 'sp1' } list 0x2189 { 'zero.lnum' 'three.lnum' } list 0x214D { 'A' 'S' } diff --git a/packages/font-glyphs/src/symbol/pictograph/iec-power-and-playback.ptl b/packages/font-glyphs/src/symbol/pictograph/iec-power-and-playback.ptl index b889b35be..0459d814f 100644 --- a/packages/font-glyphs/src/symbol/pictograph/iec-power-and-playback.ptl +++ b/packages/font-glyphs/src/symbol/pictograph/iec-power-and-playback.ptl @@ -7,170 +7,170 @@ glyph-module glyph-block Symbol-Pictograph-IEC-Power-And-Playback : for-width-kinds WideWidth1 : begin glyph-block-import CommonShapes glyph-block-import Common-Derivatives + glyph-block-import Symbol-Geometric-Shared : GeometricDim UnicodeWeightGrade GeometricSizes - define leftFW : 0 + SB * MosaicWidthScalar - define rightFW : MosaicWidth - SB * MosaicWidthScalar - define squareRadiusFW : (rightFW - leftFW) / (2 * [Math.pow MosaicWidthScalar 0.3]) - define topFW : SymbolMid + squareRadiusFW - define bottomFW : SymbolMid - squareRadiusFW - - define df : DivFrame MosaicWidthScalar - define gap : Math.max (squareRadiusFW / 8 * MosaicWidthScalar) GeometryStroke + define Geom : GeometricDim MosaicUnitWidth MosaicWidth + define Size : GeometricSizes Geom + define gap : Math.max (Geom.Size / 8 * MosaicWidthScalar) GeometryStroke create-glyph [MangleName 'powerOff'] [MangleUnicode 0x2B58] : glyph-proc - set-width df.width - include : RingStrokeAt df.middle SymbolMid squareRadiusFW GeometryStroke + set-width Geom.Width + include : RingStrokeAt Geom.MidX Geom.MidY Geom.Size GeometryStroke create-glyph [MangleName 'heavyCircledSaltire'] [MangleUnicode 0x2B59] : glyph-proc - set-width df.width - include : RingStrokeAt df.middle SymbolMid squareRadiusFW GeometryStroke + set-width Geom.Width + include : RingStrokeAt Geom.MidX Geom.MidY Geom.Size GeometryStroke include : intersection - RingAt df.middle SymbolMid squareRadiusFW + RingAt Geom.MidX Geom.MidY Geom.Size union - dispiro [widths.center GeometryStroke] [flat leftFW topFW] [curl rightFW bottomFW] - dispiro [widths.center GeometryStroke] [flat leftFW bottomFW] [curl rightFW topFW] + dispiro [widths.center GeometryStroke] + flat Geom.Left Geom.Top + curl Geom.Right Geom.Bot + dispiro [widths.center GeometryStroke] + flat Geom.Left Geom.Bot + curl Geom.Right Geom.Top create-glyph [MangleName 'powerOn'] [MangleUnicode 0x23FD] : glyph-proc - set-width df.width + set-width Geom.Width include : Rect - SymbolMid + squareRadiusFW - SymbolMid - squareRadiusFW - df.middle - [HSwToV : 0.5 * GeometryStroke] - df.middle + [HSwToV : 0.5 * GeometryStroke] + Geom.MidY + Geom.Size + Geom.MidY - Geom.Size + Geom.MidX - [HSwToV : 0.5 * GeometryStroke] + Geom.MidX + [HSwToV : 0.5 * GeometryStroke] create-glyph [MangleName 'powerOnOff'] [MangleUnicode 0x23FC] : glyph-proc - set-width df.width + set-width Geom.Width include : refer-glyph [MangleName 'powerOff'] include : Rect - SymbolMid + squareRadiusFW - GeometryStroke - gap - SymbolMid - squareRadiusFW + GeometryStroke + gap - df.middle - [HSwToV : 0.5 * GeometryStroke] - df.middle + [HSwToV : 0.5 * GeometryStroke] + Geom.MidY + Geom.Size - GeometryStroke - gap + Geom.MidY - Geom.Size + GeometryStroke + gap + Geom.MidX - [HSwToV : 0.5 * GeometryStroke] + Geom.MidX + [HSwToV : 0.5 * GeometryStroke] create-glyph [MangleName 'powerStandby'] [MangleUnicode 0x23FB] : glyph-proc - set-width df.width + set-width Geom.Width include : union difference refer-glyph [MangleName 'powerOff'] spiro-outline - corner df.middle SymbolMid - corner (df.middle - gap * 4 - [HSwToV GeometryStroke]) (SymbolMid + squareRadiusFW * 2) - corner (df.middle + gap * 4 + [HSwToV GeometryStroke]) (SymbolMid + squareRadiusFW * 2) + corner Geom.MidX Geom.MidY + corner (Geom.MidX - gap * 4 - [HSwToV GeometryStroke]) (Geom.MidY + Geom.Size * 2) + corner (Geom.MidX + gap * 4 + [HSwToV GeometryStroke]) (Geom.MidY + Geom.Size * 2) Rect - SymbolMid + 1.125 * squareRadiusFW - SymbolMid - 0.0 * squareRadiusFW - df.middle - [HSwToV : 0.5 * GeometryStroke] - df.middle + [HSwToV : 0.5 * GeometryStroke] + Geom.MidY + 1.125 * Geom.Size + Geom.MidY - 0.0 * Geom.Size + Geom.MidX - [HSwToV : 0.5 * GeometryStroke] + Geom.MidX + [HSwToV : 0.5 * GeometryStroke] create-glyph [MangleName 'powerSleep'] [MangleUnicode 0x23FE] : glyph-proc - set-width df.width + set-width Geom.Width include : difference - Circle.Outline.At df.middle SymbolMid squareRadiusFW + Circle.Outline.At Geom.MidX Geom.MidY Geom.Size Circle.Outline.At - df.middle + squareRadiusFW * 0.5 - SymbolMid + squareRadiusFW * 0.35 - squareRadiusFW * 1.1 - include : Translate (squareRadiusFW * 0.15) 0 + Geom.MidX + Geom.Size * 0.5 + Geom.MidY + Geom.Size * 0.35 + Geom.Size * 1.1 + include : Translate (Geom.Size * 0.15) 0 create-glyph [MangleName 'playback/record'] [MangleUnicode 0x23FA] : glyph-proc - set-width df.width - include : RingAt df.middle SymbolMid squareRadiusFW GeometryStroke + set-width Geom.Width + include : RingAt Geom.MidX Geom.MidY Geom.Size GeometryStroke create-glyph [MangleName 'playback/stop'] [MangleUnicode 0x23F9] : glyph-proc - set-width df.width - include : Rect (SymbolMid + squareRadiusFW) (SymbolMid - squareRadiusFW) (df.middle - squareRadiusFW) (df.middle + squareRadiusFW) + set-width Geom.Width + include : Rect (Geom.MidY + Geom.Size) (Geom.MidY - Geom.Size) (Geom.MidX - Geom.Size) (Geom.MidX + Geom.Size) create-glyph [MangleName 'playback/pause'] [MangleUnicode 0x23F8] : glyph-proc - set-width df.width - include : Rect (SymbolMid + squareRadiusFW) (SymbolMid - squareRadiusFW) (df.middle - squareRadiusFW) (df.middle - squareRadiusFW / 3) - include : Rect (SymbolMid + squareRadiusFW) (SymbolMid - squareRadiusFW) (df.middle + squareRadiusFW / 3) (df.middle + squareRadiusFW) + set-width Geom.Width + include : Rect (Geom.MidY + Geom.Size) (Geom.MidY - Geom.Size) (Geom.MidX - Geom.Size) (Geom.MidX - Geom.Size / 3) + include : Rect (Geom.MidY + Geom.Size) (Geom.MidY - Geom.Size) (Geom.MidX + Geom.Size / 3) (Geom.MidX + Geom.Size) - local trigRad : squareRadiusFW - O + local trigRad : Geom.Size - O create-glyph [MangleName 'playback/down'] [MangleUnicode 0x23F7] : glyph-proc - set-width df.width + set-width Geom.Width include : spiro-outline - corner (df.middle - trigRad) (SymbolMid + trigRad / 2) - corner (df.middle + trigRad) (SymbolMid + trigRad / 2) - corner (df.middle) (SymbolMid - trigRad / 2) + corner (Geom.MidX - trigRad) (Geom.MidY + trigRad / 2) + corner (Geom.MidX + trigRad) (Geom.MidY + trigRad / 2) + corner (Geom.MidX) (Geom.MidY - trigRad / 2) create-glyph [MangleName 'playback/up'] [MangleUnicode 0x23F6] : glyph-proc - set-width df.width + set-width Geom.Width include : spiro-outline - corner (df.middle - trigRad) (SymbolMid - trigRad / 2) - corner (df.middle + trigRad) (SymbolMid - trigRad / 2) - corner (df.middle) (SymbolMid + trigRad / 2) + corner (Geom.MidX - trigRad) (Geom.MidY - trigRad / 2) + corner (Geom.MidX + trigRad) (Geom.MidY - trigRad / 2) + corner (Geom.MidX) (Geom.MidY + trigRad / 2) create-glyph [MangleName 'playback/right'] [MangleUnicode 0x23F5] : glyph-proc - set-width df.width + set-width Geom.Width include : spiro-outline - corner (df.middle - trigRad / 2) (SymbolMid - trigRad) - corner (df.middle - trigRad / 2) (SymbolMid + trigRad) - corner (df.middle + trigRad / 2) (SymbolMid) + corner (Geom.MidX - trigRad / 2) (Geom.MidY - trigRad) + corner (Geom.MidX - trigRad / 2) (Geom.MidY + trigRad) + corner (Geom.MidX + trigRad / 2) (Geom.MidY) create-glyph [MangleName 'playback/left'] [MangleUnicode 0x23F4] : glyph-proc - set-width df.width + set-width Geom.Width include : spiro-outline - corner (df.middle + trigRad / 2) (SymbolMid - trigRad) - corner (df.middle + trigRad / 2) (SymbolMid + trigRad) - corner (df.middle - trigRad / 2) (SymbolMid) + corner (Geom.MidX + trigRad / 2) (Geom.MidY - trigRad) + corner (Geom.MidX + trigRad / 2) (Geom.MidY + trigRad) + corner (Geom.MidX - trigRad / 2) (Geom.MidY) create-glyph [MangleName 'playback/eject'] [MangleUnicode 0x23CF] : glyph-proc - set-width df.width - include : Rect (SymbolMid - squareRadiusFW / 3) (SymbolMid - squareRadiusFW) (df.middle - squareRadiusFW) (df.middle + squareRadiusFW) + set-width Geom.Width + include : Rect (Geom.MidY - Geom.Size / 3) (Geom.MidY - Geom.Size) (Geom.MidX - Geom.Size) (Geom.MidX + Geom.Size) include : spiro-outline - corner (df.middle - trigRad) (SymbolMid) - corner (df.middle + trigRad) (SymbolMid) - corner (df.middle) (SymbolMid + trigRad) + corner (Geom.MidX - trigRad) (Geom.MidY) + corner (Geom.MidX + trigRad) (Geom.MidY) + corner (Geom.MidX) (Geom.MidY + trigRad) create-glyph [MangleName 'playback/fastForward'] [MangleUnicode 0x23E9] : glyph-proc - set-width df.width + set-width Geom.Width include : spiro-outline - corner (df.middle - trigRad) (SymbolMid - trigRad) - corner (df.middle - trigRad) (SymbolMid + trigRad) - corner df.middle SymbolMid + corner (Geom.MidX - trigRad) (Geom.MidY - trigRad) + corner (Geom.MidX - trigRad) (Geom.MidY + trigRad) + corner Geom.MidX Geom.MidY include : spiro-outline - corner df.middle (SymbolMid - trigRad) - corner df.middle (SymbolMid + trigRad) - corner (df.middle + trigRad) SymbolMid + corner Geom.MidX (Geom.MidY - trigRad) + corner Geom.MidX (Geom.MidY + trigRad) + corner (Geom.MidX + trigRad) Geom.MidY create-glyph [MangleName 'playback/fastForwardToEnd'] [MangleUnicode 0x23ED] : glyph-proc - set-width df.width - local sw : Math.max [AdviceStroke (6 * [Math.sqrt df.div]) df.div] (trigRad / 6) + set-width Geom.Width + local sw : Math.max [AdviceStroke (6 * [Math.sqrt Geom.Scalar]) Geom.Scalar] (trigRad / 6) local swh : HSwToV sw include : spiro-outline - corner (df.middle - trigRad) (SymbolMid - trigRad) - corner (df.middle - trigRad) (SymbolMid + trigRad) - corner (df.middle - swh / 2) SymbolMid + corner (Geom.MidX - trigRad) (Geom.MidY - trigRad) + corner (Geom.MidX - trigRad) (Geom.MidY + trigRad) + corner (Geom.MidX - swh / 2) Geom.MidY include : spiro-outline - corner (df.middle - swh / 2) (SymbolMid - trigRad) - corner (df.middle - swh / 2) (SymbolMid + trigRad) - corner (df.middle + trigRad - swh) SymbolMid - include : VBar.r (df.middle + trigRad) (SymbolMid - trigRad) (SymbolMid + trigRad) sw + corner (Geom.MidX - swh / 2) (Geom.MidY - trigRad) + corner (Geom.MidX - swh / 2) (Geom.MidY + trigRad) + corner (Geom.MidX + trigRad - swh) Geom.MidY + include : VBar.r (Geom.MidX + trigRad) (Geom.MidY - trigRad) (Geom.MidY + trigRad) sw create-glyph [MangleName 'playback/playOrStop'] [MangleUnicode 0x23EF] : glyph-proc - set-width df.width - local sw : Math.max [AdviceStroke (6 * [Math.sqrt df.div]) df.div] (trigRad / 6) + set-width Geom.Width + local sw : Math.max [AdviceStroke (6 * [Math.sqrt Geom.Scalar]) Geom.Scalar] (trigRad / 6) local swh : HSwToV sw - local gap : Math.max [AdviceStroke (4 * [Math.sqrt df.div]) df.div] (trigRad / 4) + local gap : Math.max [AdviceStroke (4 * [Math.sqrt Geom.Scalar]) Geom.Scalar] (trigRad / 4) local width : trigRad + swh * 2 + gap include : spiro-outline - corner (df.middle - width / 2) (SymbolMid - trigRad) - corner (df.middle - width / 2) (SymbolMid + trigRad) - corner (df.middle - width / 2 + trigRad) SymbolMid - include : VBar.r (df.middle + width / 2 - swh - gap) (SymbolMid - trigRad) (SymbolMid + trigRad) sw - include : VBar.r (df.middle + width / 2) (SymbolMid - trigRad) (SymbolMid + trigRad) sw + corner (Geom.MidX - width / 2) (Geom.MidY - trigRad) + corner (Geom.MidX - width / 2) (Geom.MidY + trigRad) + corner (Geom.MidX - width / 2 + trigRad) Geom.MidY + include : VBar.r (Geom.MidX + width / 2 - swh - gap) (Geom.MidY - trigRad) (Geom.MidY + trigRad) sw + include : VBar.r (Geom.MidX + width / 2) (Geom.MidY - trigRad) (Geom.MidY + trigRad) sw create-glyph [MangleName 'playback/fastUpward'] [MangleUnicode 0x23EB] : glyph-proc - set-width df.width + set-width Geom.Width include : spiro-outline - corner (df.middle - trigRad) (SymbolMid - trigRad) - corner (df.middle + trigRad) (SymbolMid - trigRad) - corner (df.middle) SymbolMid + corner (Geom.MidX - trigRad) (Geom.MidY - trigRad) + corner (Geom.MidX + trigRad) (Geom.MidY - trigRad) + corner (Geom.MidX) Geom.MidY include : spiro-outline - corner (df.middle - trigRad) SymbolMid - corner (df.middle + trigRad) SymbolMid - corner (df.middle) (SymbolMid + trigRad) + corner (Geom.MidX - trigRad) Geom.MidY + corner (Geom.MidX + trigRad) Geom.MidY + corner (Geom.MidX) (Geom.MidY + trigRad) - turned [MangleName 'playback/fastBackward'] [MangleUnicode 0x23EA] [MangleName 'playback/fastForward'] df.middle SymbolMid - turned [MangleName 'playback/fastBackwardToEnd'] [MangleUnicode 0x23EE] [MangleName 'playback/fastForwardToEnd'] df.middle SymbolMid - turned [MangleName 'playback/fastDownward'] [MangleUnicode 0x23EC] [MangleName 'playback/fastUpward'] df.middle SymbolMid + turned [MangleName 'playback/fastBackward'] [MangleUnicode 0x23EA] [MangleName 'playback/fastForward'] Geom.MidX Geom.MidY + turned [MangleName 'playback/fastBackwardToEnd'] [MangleUnicode 0x23EE] [MangleName 'playback/fastForwardToEnd'] Geom.MidX Geom.MidY + turned [MangleName 'playback/fastDownward'] [MangleUnicode 0x23EC] [MangleName 'playback/fastUpward'] Geom.MidX Geom.MidY