From d0201136f7bdc3ed78f3ad3b6e039eba0144a0b8 Mon Sep 17 00:00:00 2001 From: Logo <21302803+Logo121@users.noreply.github.com> Date: Sat, 10 Feb 2024 03:11:43 +0800 Subject: [PATCH] Decorate White Arrows (#2063) (#2201) * arrows (#2063) * refine * fix --- changes/29.0.0.md | 35 +++++---- packages/font-glyphs/src/symbol/arrow.ptl | 94 ++++++++++++++++++++++- 2 files changed, 109 insertions(+), 20 deletions(-) diff --git a/changes/29.0.0.md b/changes/29.0.0.md index a7db83ca6..964b64720 100644 --- a/changes/29.0.0.md +++ b/changes/29.0.0.md @@ -13,21 +13,24 @@ - `five`.`oblique-arched` → `five`.`oblique-arched-serifless` - `five`.`oblique-flat` → `five`.`oblique-flat-serifless` * Add characters: - - LOWER HORIZONTAL RULER SEGMENT (U+1CC05) (Purposed for Unicode 16; L2/21-235). - - RIGHT VERTICAL RULER SEGMENT (U+1CC06) (Purposed for Unicode 16; L2/21-235). - - LOWER RIGHT RULER SEGMENT (U+1CC07) (Purposed for Unicode 16; L2/21-235). - - BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT (U+1CC1B) ... BOX DRAWINGS LIGHT BOTTOM AND LOWER LEFT (U+1CC1E) (Purposed for Unicode 16; L2/21-235). - - BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT (U+1FBD8) ... BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT (U+1FBDB) (Purposed for Unicode 16; L2/21-235). - - SEPARATED BLOCK QUADRANT-1 (U+1CC21) ... SEPARATED BLOCK QUADRANT-1234 (U+1CC2F) (Purposed for Unicode 16; L2/21-235). - - BLACK NEUTRAL FACE (U+1CC6F) (Purposed for Unicode 16; L2/21-235). - - VERTICAL LINE WITH FOUR TICK MARKS (U+1CC90) (Purposed for Unicode 16; L2/21-235). - - HORIZONTAL LINE WITH FOUR TICK MARKS (U+1CC91) (Purposed for Unicode 16; L2/21-235). - - SEPARATED BLOCK SEXTANT-1 (U+1CE51) ... SEPARATED BLOCK SEXTANT-123456 (U+1CE8F) (Purposed for Unicode 16; L2/21-235). - - UPPER LEFT ONE SIXTEENTH BLOCK (U+1CE90) ... LOWER HALF RIGHT ONE QUARTER BLOCK (U+1CEAF) (Purposed for Unicode 16; L2/21-235). - - FOLDER (U+1F5C0) (#2181). - - NEGATIVE SQUARED LEFTWARDS ARROW (U+1F8B4) ... NEGATIVE SQUARED DOWNWARDS ARROW (U+1F8B7) (Purposed for Unicode 16; L2/21-235). - - LEFT TWO THIRDS BLOCK (U+1FBCE) (Purposed for Unicode 16; L2/21-235). - - LEFT ONE THIRD BLOCK (U+1FBCF) (Purposed for Unicode 16; L2/21-235). - - UPPER CENTRE ONE QUARTER BLOCK (U+1FBE4) ... MIDDLE RIGHT ONE QUARTER BLOCK (U+1FBE7) (Purposed for Unicode 16; L2/21-235). + - UPWARDS WHITE ARROW FROM BAR (`U+21EA`) ... RIGHTWARDS WHITE ARROW FROM WALL (`U+21F0`). + - RETURN SYMBOL (`U+23CE`). + - UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR (`U+2BB8`). + - LOWER HORIZONTAL RULER SEGMENT (`U+1CC05`) (Purposed for Unicode 16; L2/21-235). + - RIGHT VERTICAL RULER SEGMENT (`U+1CC06`) (Purposed for Unicode 16; L2/21-235). + - LOWER RIGHT RULER SEGMENT (`U+1CC07`) (Purposed for Unicode 16; L2/21-235). + - BOX DRAWINGS LIGHT HORIZONTAL AND UPPER RIGHT (`U+1CC1B`) ... BOX DRAWINGS LIGHT BOTTOM AND LOWER LEFT (`U+1CC1E`) (Purposed for Unicode 16; L2/21-235). + - BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO UPPER RIGHT (`U+1FBD8`) ... BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO MIDDLE CENTRE TO LOWER LEFT (`U+1FBDB`) (Purposed for Unicode 16; L2/21-235). + - SEPARATED BLOCK QUADRANT-1 (`U+1CC21`) ... SEPARATED BLOCK QUADRANT-1234 (`U+1CC2F`) (Purposed for Unicode 16; L2/21-235). + - BLACK NEUTRAL FACE (`U+1CC6F`) (Purposed for Unicode 16; L2/21-235). + - VERTICAL LINE WITH FOUR TICK MARKS (`U+1CC90`) (Purposed for Unicode 16; L2/21-235). + - HORIZONTAL LINE WITH FOUR TICK MARKS (`U+1CC91`) (Purposed for Unicode 16; L2/21-235). + - SEPARATED BLOCK SEXTANT-1 (`U+1CE51`) ... SEPARATED BLOCK SEXTANT-123456 (`U+1CE8F`) (Purposed for Unicode 16; L2/21-235). + - UPPER LEFT ONE SIXTEENTH BLOCK (`U+1CE90`) ... LOWER HALF RIGHT ONE QUARTER BLOCK (`U+1CEAF`) (Purposed for Unicode 16; L2/21-235). + - FOLDER (`U+1F5C0`) (#2181). + - NEGATIVE SQUARED LEFTWARDS ARROW (`U+1F8B4`) ... NEGATIVE SQUARED DOWNWARDS ARROW (`U+1F8B7`) (Purposed for Unicode 16; L2/21-235). + - LEFT TWO THIRDS BLOCK (`U+1FBCE`) (Purposed for Unicode 16; L2/21-235). + - LEFT ONE THIRD BLOCK (`U+1FBCF`) (Purposed for Unicode 16; L2/21-235). + - UPPER CENTRE ONE QUARTER BLOCK (`U+1FBE4`) ... MIDDLE RIGHT ONE QUARTER BLOCK (`U+1FBE7`) (Purposed for Unicode 16; L2/21-235). * Fix a disjoint stroke of Outlined Curly `Z` under some weights (#2195). * Unify diagonal box drawings' angles (#2197). diff --git a/packages/font-glyphs/src/symbol/arrow.ptl b/packages/font-glyphs/src/symbol/arrow.ptl index 075c2f784..81f3b170e 100644 --- a/packages/font-glyphs/src/symbol/arrow.ptl +++ b/packages/font-glyphs/src/symbol/arrow.ptl @@ -37,9 +37,9 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 define arrowDiagBot : mix arrowMidX arrowBot diagPropY define arrowDiagTop : mix arrowMidX arrowTop diagPropY - define [ArrowBar x1 y1 x2 y2 halfSw w] : begin + define [ArrowBar x1 y1 x2 y2 halfSw w _offset] : begin return : PointingTo x1 y1 x2 y2 : lambda [mag] : begin - local p : (mag - o - halfSw * [fallback w 1.1]) / mag + local p : (mag - [fallback _offset : o + halfSw * [fallback w 1.1]]) / mag dispiro widths.center (halfSw * 2) flat (mag * (1 - p)) 0 @@ -162,6 +162,19 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 corner length (width - o) corner length (-width + o) + define [TriangleArrowHeadBar x1 y1 x2 y2 width sw _length] : begin + local length : fallback _length width + return : new-glyph : PointingTo x1 y1 x2 y2 : lambda [mag] : intersection + spiro-outline + corner o 0 + corner length (width - o) + corner length (-width + o) + Rect width (-width) (length / 2 - sw / 2) (length / 2 + sw / 2) + + define [RectangleArrowTail x1 y1 x2 y2 width _length _width2] : begin + local length : fallback _length width + return : new-glyph : PointingTo x1 y1 x2 y2 : lambda [mag] : Rect width (-[fallback _width2 width]) 0 length + define [ArrowShape x1 y1 x2 y2 size] : glyph-proc include : ArrowHead x1 y1 x2 y2 size include : ArrowBar x1 y1 x2 y2 halfArrowSw @@ -228,15 +241,24 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 local headLen : MosaicUnitWidth * [Math.sqrt MosaicWidthScalar] * 0.4 local halfBarWidth : headLen / 3 local headWidth : halfBarWidth * 2 - local fine : Math.min [AdviceStroke 5] (halfBarWidth * 0.6) + + local turnWidth : headWidth * 1.5 + local barLen : headLen * 0.2 + fine * 2 + local dotGap : barLen - fine * 2 + local doubleHeadOffset : headLen * 0.4 + local mag : Math.hypot (y2 - y1) (x2 - x1) local p : (mag - fine) / mag local p2 : (mag - fine * [Math.sqrt 13] / 2) / mag local innerHeaderLengthShrink : fine * (1 + [Math.sqrt 13] / 2) + local p3 : (mag - doubleHeadOffset) / mag + local p4 : (mag - fine * [Math.sqrt 13] / 2 - doubleHeadOffset) / mag local x1a : mix x1 x2 (1 - p) local y1a : mix y1 y2 (1 - p) + local x2FlatA : mix x1 x2 p + local y2FlatA : mix y1 y2 p local x2a : mix x1 x2 p2 local y2a : mix y1 y2 p2 local x1CoA : mix x1 x2 (-0.05) @@ -259,6 +281,55 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 TriangleArrowHead x1CoA y1CoA x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) ArrowBar x1CoA y1CoA x2a y2a (halfBarWidth - fine / 2) 2 + [Just "white-closing"] : difference + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 0 0 + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 0 0 + + [Just "whiteDouble"] : difference + union + difference + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + TriangleArrowHead x1a y1a x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + TriangleArrowHead x1 y1 [mix x1 x2 p3] [mix y1 y2 p3] headWidth headLen + ArrowBar x1 y1 [mix x1 x2 p3] [mix y1 y2 p3] (halfBarWidth + fine / 2) 2 + union + TriangleArrowHead x1a y1a [mix x1 x2 p4] [mix y1 y2 p4] (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + ArrowBar x1CoA y1CoA [mix x1 x2 p4] [mix y1 y2 p4] (halfBarWidth - fine / 2) 2 + + [Just "whiteBarred"] : union + difference + union + TriangleArrowHead x1 y1 x2 y2 headWidth headLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 2 + union + TriangleArrowHead x1CoA y1CoA x2a y2a (headWidth - innerHeaderLengthShrink * headWidth / headLen) (headLen - innerHeaderLengthShrink) + ArrowBar x1CoA y1CoA x2a y2a (halfBarWidth - fine / 2) 2 + TriangleArrowHeadBar x1 y1 x2 y2 headWidth fine headLen + + [Just "whiteDot"] : difference + union + RectangleArrowTail x1 y1 x2 y2 (halfBarWidth + fine / 2) barLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 0 (barLen + dotGap) + union + RectangleArrowTail x1a y1a x2FlatA y2FlatA (halfBarWidth - fine / 2) (barLen - fine * 2) + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 0 (barLen + dotGap) + + [Just "whiteRect"] : difference + union + RectangleArrowTail x1 y1 x2 y2 headWidth barLen + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 0.5 + union + RectangleArrowTail x1a y1a x2FlatA y2FlatA (headWidth - fine) (barLen - fine * 2) + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 0.5 + + [Just "whiteLeftTurn"] : difference + union + RectangleArrowTail x1 y1 x2 y2 (halfBarWidth + fine / 2) (halfBarWidth * 2 + fine * 1.5) turnWidth + ArrowBar x1 y1 x2 y2 (halfBarWidth + fine / 2) 1 + union + RectangleArrowTail x1a y1a x2FlatA y2FlatA (halfBarWidth - fine / 2) (halfBarWidth * 2 - fine / 2) (turnWidth - fine) + ArrowBar x1CoA y1CoA x2FlatA y2FlatA (halfBarWidth - fine / 2) 1 + [Just "black"] : union TriangleArrowHead x1 y1 x2 y2 headWidth headLen ArrowBar x1 y1 x2 y2 halfBarWidth 2 @@ -756,6 +827,15 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 DoubleArrow [ThickArrowShape 'white-open'] [MangleName 'uni2B04'] [MangleUnicode 0x2B04] arrowSB SymbolMid arrowRSB SymbolMid DoubleArrow [ThickArrowShape 'white-open'] [MangleName 'uni21F3'] [MangleUnicode 0x21F3] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteDot'] [ThickArrowShape 'white-open'] [MangleName 'uni21EA'] [MangleUnicode 0x21EA] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'white-open'] [MangleName 'uni21EB'] [MangleUnicode 0x21EB] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'whiteBarred'] [MangleName 'uni21EC'] [MangleUnicode 0x21EC] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'white-closing'] [ThickArrowShape 'whiteDouble'] [MangleName 'uni21EE'] [MangleUnicode 0x21EE] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'whiteDouble'] [MangleName 'uni21EF'] [MangleUnicode 0x21EF] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteRect'] [ThickArrowShape 'white-open'] [MangleName 'uni21F0'] [MangleUnicode 0x21F0] arrowSB SymbolMid arrowRSB SymbolMid + DoubleArrow2 [ThickArrowShape 'whiteDot'] [ThickArrowShape 'whiteBarred'] [MangleName 'uni2BB8'] [MangleUnicode 0x2BB8] arrowMidX arrowBot arrowMidX arrowTop + DoubleArrow2 [ThickArrowShape 'whiteLeftTurn'] [ThickArrowShape 'white-open'] [MangleName 'uni23CE'] [MangleUnicode 0x23CE] arrowRSB SymbolMid arrowSB SymbolMid + MkArrow [ThickArrowShape 'black'] [MangleName 'uni2B05'] [MangleUnicode 0x2B05] arrowRSB SymbolMid arrowSB SymbolMid MkArrow [ThickArrowShape 'black'] [MangleName 'uni2B06'] [MangleUnicode 0x2B06] arrowMidX arrowBot arrowMidX arrowTop MkArrow [ThickArrowShape 'black'] [MangleName 'uni27A1'] [MangleUnicode 0x27A1] arrowSB SymbolMid arrowRSB SymbolMid @@ -768,6 +848,12 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 DoubleArrow [ThickArrowShape 'black'] [MangleName 'uni2B0C'] [MangleUnicode 0x2B0C] arrowSB SymbolMid arrowRSB SymbolMid DoubleArrow [ThickArrowShape 'black'] [MangleName 'uni2B0D'] [MangleUnicode 0x2B0D] arrowMidX arrowBot arrowMidX arrowTop + create-glyph [MangleName 'uni21ED'] [MangleUnicode 0x21ED] : composite-proc + refer-glyph : MangleName 'uni21EB' + intersection + refer-glyph : MangleName 'uni2B06' + Rect arrowTop arrowBot (arrowMidX - [AdviceStroke 5] / 2) (arrowMidX + [AdviceStroke 5] / 2) + MkArrow [ThickArrowShape 'blackSemiHookL'] [MangleName 'uni27A5'] [MangleUnicode 0x27A5] arrowSB SymbolMid arrowRSB SymbolMid MkArrow [ThickArrowShape 'blackSemiHookR'] [MangleName 'uni27A6'] [MangleUnicode 0x27A6] arrowSB SymbolMid arrowRSB SymbolMid @@ -1220,7 +1306,7 @@ glyph-block Symbol-Arrow : for-width-kinds WideWidth1 include : union TriangleArrowHead x3ArrowHeadMock y3 x4 y4 arrowHeadSize ZigZagArrowBar - + do "Lightning" define x1 : mix arrowMidX arrowRSB (0.875 / [Math.sqrt MosaicWidthScalar]) define x2 : mix arrowMidX arrowSB (0.875 / [Math.sqrt MosaicWidthScalar])