diff --git a/changes/5.0.0.md b/changes/5.0.0.md index 54b33170a..b7118e08d 100644 --- a/changes/5.0.0.md +++ b/changes/5.0.0.md @@ -9,6 +9,7 @@ * Add Characters: * Z Notation Schema Composition (`U+2A1F`) and Z Notation Relation Composition (`U+2A3E`) (#857). * Circled Zero With Slash (`U+1F10D`, #861). + * Ballot Box, Ballot Box with Check and Ballot Box with X (`U+2610` ... `U+2612`, #890). * Add Variants: * Add diagonal-tailed variants for `f`, `i`, `j`, `k`, `l`, `q`, `t` (#795). * Add motion-serifed variants for `A`, `B`, `D`, `E`, `F`, `H`, `K`, `M`, `N`, `P`, `R`, `T`, `V`, `W`, `X`, `Y`, `Z`, `v`, `w`, `x`, `y`, `z` (#806, #815, #818). diff --git a/font-src/glyphs/symbol/geometric.ptl b/font-src/glyphs/symbol/geometric.ptl index b04c32016..aadbaa5d2 100644 --- a/font-src/glyphs/symbol/geometric.ptl +++ b/font-src/glyphs/symbol/geometric.ptl @@ -10,3 +10,4 @@ export : define [apply] : begin run-glyph-module './geometric/sun-and-gear.js' run-glyph-module './geometric/dotted.js' run-glyph-module './geometric/masked.js' + run-glyph-module './geometric/ballot-box.js' diff --git a/font-src/glyphs/symbol/geometric/ballot-box.ptl b/font-src/glyphs/symbol/geometric/ballot-box.ptl new file mode 100644 index 000000000..b859214fc --- /dev/null +++ b/font-src/glyphs/symbol/geometric/ballot-box.ptl @@ -0,0 +1,46 @@ +$$include '../../../meta/macros.ptl' + +import [mix linreg clamp fallback] from '../../../support/utils' +import [DesignParameters] from '../../../meta/aesthetics' + +glyph-module + +glyph-block Symbol-Geometric-Dice : for-width-kinds WideWidth1 + glyph-block-import CommonShapes + glyph-block-import Common-Derivatives + glyph-block-import Symbol-Geometric-Shared : GeometricDim UnicodeWeightGrade GeometricSizes + + define Geom : GeometricDim MosaicUnitWidth MosaicWidth + + alias [MangleName 'ballotBox'] [MangleUnicode 0x2610] [MangleName 'whiteSquare'] + + define bbGap : Math.max (Geom.Size / 6) [AdviceStroke 5 Geom.Scalar] + define swMark : Math.min GeometryStroke : AdviceStroke 5 Geom.Scalar + define bbSize : Geom.Size - bbGap - swMark / 2 + + create-glyph [MangleName 'checkedBallotBox'] [MangleUnicode 0x2611] : glyph-proc + local k1 0.4 + local k2 0.425 + local k3 1 + include [refer-glyph : MangleName 'whiteSquare'] AS_BASE ALSO_METRICS + + local z1 : corner (Geom.MidX - bbSize) [mix (Geom.MidY - bbSize) (Geom.MidY + bbSize) k1] + local z2 : corner [mix (Geom.MidX - bbSize) (Geom.MidX + bbSize) k2] (Geom.MidY - bbSize) + local z3 : corner (Geom.MidX + bbSize) [mix (Geom.MidY - bbSize) (Geom.MidY + bbSize) k3] + + include : intersection + spiro-outline z1 z2 z3 [corner z1.x z3.y] + union + dispiro [widths.lhs swMark] z1 z2 + dispiro [widths.lhs swMark] z2 z3 + + create-glyph [MangleName 'crossBallotBox'] [MangleUnicode 0x2612] : glyph-proc + include [refer-glyph : MangleName 'whiteSquare'] AS_BASE ALSO_METRICS + include : dispiro + widths.center swMark + corner (Geom.MidX - bbSize) (Geom.MidY - bbSize) + corner (Geom.MidX + bbSize) (Geom.MidY + bbSize) + include : dispiro + widths.center swMark + corner (Geom.MidX + bbSize) (Geom.MidY - bbSize) + corner (Geom.MidX - bbSize) (Geom.MidY + bbSize)