summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPopa Ioan Alexandru <49609151+ALEX11BR@users.noreply.github.com>2024-01-26 14:45:26 +0200
committerChristian Duerr <contact@christianduerr.com>2024-03-19 02:20:53 +0100
commitc661eb462e5c3e54264f112609098f0542faaa4a (patch)
tree2501c7ba7c460a17fd87e298ce1641a5a209ae5f
parenta526b733c90de92b0fdc3ce32a2549455c662e17 (diff)
Use builtin font to draw sextants
Sextants are similar to quadrants and should align with them and other box drawing, thus use builtin font to align them properly. Part-of: #7422.
-rw-r--r--CHANGELOG.md1
-rw-r--r--alacritty/src/renderer/text/builtin_font.rs92
-rw-r--r--extra/man/alacritty.5.scd4
3 files changed, 91 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a6a53a56..1ae72180 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Changed
- `alacritty migrate` will ignore null values in yaml instead of erroring out
+- Use built-in font for sextant symbols from `U+1FB00` to `U+1FB3B`
### Fixed
diff --git a/alacritty/src/renderer/text/builtin_font.rs b/alacritty/src/renderer/text/builtin_font.rs
index f59616d5..ece7eb86 100644
--- a/alacritty/src/renderer/text/builtin_font.rs
+++ b/alacritty/src/renderer/text/builtin_font.rs
@@ -1,5 +1,4 @@
-//! Hand-rolled drawing of unicode [box drawing](http://www.unicode.org/charts/PDF/U2500.pdf)
-//! and [block elements](https://www.unicode.org/charts/PDF/U2580.pdf), and also powerline symbols.
+//! Hand-rolled drawing of unicode characters that need to fully cover their character area.
use std::{cmp, mem, ops};
@@ -29,7 +28,9 @@ pub fn builtin_glyph(
) -> Option<RasterizedGlyph> {
let mut glyph = match character {
// Box drawing characters and block elements.
- '\u{2500}'..='\u{259f}' => box_drawing(character, metrics, offset),
+ '\u{2500}'..='\u{259f}' | '\u{1fb00}'..='\u{1fb3b}' => {
+ box_drawing(character, metrics, offset)
+ },
// Powerline symbols: '','','',''
POWERLINE_TRIANGLE_LTR..=POWERLINE_ARROW_RTL => {
powerline_drawing(character, metrics, offset)?
@@ -487,6 +488,89 @@ fn box_drawing(character: char, metrics: &Metrics, offset: &Delta<i8>) -> Raster
// Fourth quadrant.
canvas.draw_rect(x_center, y_center, w_fourth, h_fourth, COLOR_FILL);
},
+ // Sextants: '🬀', '🬁', '🬂', '🬃', '🬄', '🬅', '🬆', '🬇', '🬈', '🬉', '🬊', '🬋', '🬌', '🬍', '🬎',
+ // '🬏', '🬐', '🬑', '🬒', '🬓', '🬔', '🬕', '🬖', '🬗', '🬘', '🬙', '🬚', '🬛', '🬜', '🬝', '🬞', '🬟',
+ // '🬠', '🬡', '🬢', '🬣', '🬤', '🬥', '🬦', '🬧', '🬨', '🬩', '🬪', '🬫', '🬬', '🬭', '🬮', '🬯', '🬰',
+ // '🬱', '🬲', '🬳', '🬴', '🬵', '🬶', '🬷', '🬸', '🬹', '🬺', '🬻'.
+ '\u{1fb00}'..='\u{1fb3b}' => {
+ let x_center = canvas.x_center().round().max(1.);
+ let y_third = (height as f32 / 3.).round().max(1.);
+ let y_last_third = height as f32 - 2. * y_third;
+
+ let (w_top_left, h_top_left) = match character {
+ '\u{1fb00}' | '\u{1fb02}' | '\u{1fb04}' | '\u{1fb06}' | '\u{1fb08}'
+ | '\u{1fb0a}' | '\u{1fb0c}' | '\u{1fb0e}' | '\u{1fb10}' | '\u{1fb12}'
+ | '\u{1fb15}' | '\u{1fb17}' | '\u{1fb19}' | '\u{1fb1b}' | '\u{1fb1d}'
+ | '\u{1fb1f}' | '\u{1fb21}' | '\u{1fb23}' | '\u{1fb25}' | '\u{1fb27}'
+ | '\u{1fb28}' | '\u{1fb2a}' | '\u{1fb2c}' | '\u{1fb2e}' | '\u{1fb30}'
+ | '\u{1fb32}' | '\u{1fb34}' | '\u{1fb36}' | '\u{1fb38}' | '\u{1fb3a}' => {
+ (x_center, y_third)
+ },
+ _ => (0., 0.),
+ };
+ let (w_top_right, h_top_right) = match character {
+ '\u{1fb01}' | '\u{1fb02}' | '\u{1fb05}' | '\u{1fb06}' | '\u{1fb09}'
+ | '\u{1fb0a}' | '\u{1fb0d}' | '\u{1fb0e}' | '\u{1fb11}' | '\u{1fb12}'
+ | '\u{1fb14}' | '\u{1fb15}' | '\u{1fb18}' | '\u{1fb19}' | '\u{1fb1c}'
+ | '\u{1fb1d}' | '\u{1fb20}' | '\u{1fb21}' | '\u{1fb24}' | '\u{1fb25}'
+ | '\u{1fb28}' | '\u{1fb2b}' | '\u{1fb2c}' | '\u{1fb2f}' | '\u{1fb30}'
+ | '\u{1fb33}' | '\u{1fb34}' | '\u{1fb37}' | '\u{1fb38}' | '\u{1fb3b}' => {
+ (x_center, y_third)
+ },
+ _ => (0., 0.),
+ };
+ let (w_mid_left, h_mid_left) = match character {
+ '\u{1fb03}' | '\u{1fb04}' | '\u{1fb05}' | '\u{1fb06}' | '\u{1fb0b}'
+ | '\u{1fb0c}' | '\u{1fb0d}' | '\u{1fb0e}' | '\u{1fb13}' | '\u{1fb14}'
+ | '\u{1fb15}' | '\u{1fb1a}' | '\u{1fb1b}' | '\u{1fb1c}' | '\u{1fb1d}'
+ | '\u{1fb22}' | '\u{1fb23}' | '\u{1fb24}' | '\u{1fb25}' | '\u{1fb29}'
+ | '\u{1fb2a}' | '\u{1fb2b}' | '\u{1fb2c}' | '\u{1fb31}' | '\u{1fb32}'
+ | '\u{1fb33}' | '\u{1fb34}' | '\u{1fb39}' | '\u{1fb3a}' | '\u{1fb3b}' => {
+ (x_center, y_third)
+ },
+ _ => (0., 0.),
+ };
+ let (w_mid_right, h_mid_right) = match character {
+ '\u{1fb07}' | '\u{1fb08}' | '\u{1fb09}' | '\u{1fb0a}' | '\u{1fb0b}'
+ | '\u{1fb0c}' | '\u{1fb0d}' | '\u{1fb0e}' | '\u{1fb16}' | '\u{1fb17}'
+ | '\u{1fb18}' | '\u{1fb19}' | '\u{1fb1a}' | '\u{1fb1b}' | '\u{1fb1c}'
+ | '\u{1fb1d}' | '\u{1fb26}' | '\u{1fb27}' | '\u{1fb28}' | '\u{1fb29}'
+ | '\u{1fb2a}' | '\u{1fb2b}' | '\u{1fb2c}' | '\u{1fb35}' | '\u{1fb36}'
+ | '\u{1fb37}' | '\u{1fb38}' | '\u{1fb39}' | '\u{1fb3a}' | '\u{1fb3b}' => {
+ (x_center, y_third)
+ },
+ _ => (0., 0.),
+ };
+ let (w_bottom_left, h_bottom_left) = match character {
+ '\u{1fb0f}' | '\u{1fb10}' | '\u{1fb11}' | '\u{1fb12}' | '\u{1fb13}'
+ | '\u{1fb14}' | '\u{1fb15}' | '\u{1fb16}' | '\u{1fb17}' | '\u{1fb18}'
+ | '\u{1fb19}' | '\u{1fb1a}' | '\u{1fb1b}' | '\u{1fb1c}' | '\u{1fb1d}'
+ | '\u{1fb2d}' | '\u{1fb2e}' | '\u{1fb2f}' | '\u{1fb30}' | '\u{1fb31}'
+ | '\u{1fb32}' | '\u{1fb33}' | '\u{1fb34}' | '\u{1fb35}' | '\u{1fb36}'
+ | '\u{1fb37}' | '\u{1fb38}' | '\u{1fb39}' | '\u{1fb3a}' | '\u{1fb3b}' => {
+ (x_center, y_last_third)
+ },
+ _ => (0., 0.),
+ };
+ let (w_bottom_right, h_bottom_right) = match character {
+ '\u{1fb1e}' | '\u{1fb1f}' | '\u{1fb20}' | '\u{1fb21}' | '\u{1fb22}'
+ | '\u{1fb23}' | '\u{1fb24}' | '\u{1fb25}' | '\u{1fb26}' | '\u{1fb27}'
+ | '\u{1fb28}' | '\u{1fb29}' | '\u{1fb2a}' | '\u{1fb2b}' | '\u{1fb2c}'
+ | '\u{1fb2d}' | '\u{1fb2e}' | '\u{1fb2f}' | '\u{1fb30}' | '\u{1fb31}'
+ | '\u{1fb32}' | '\u{1fb33}' | '\u{1fb34}' | '\u{1fb35}' | '\u{1fb36}'
+ | '\u{1fb37}' | '\u{1fb38}' | '\u{1fb39}' | '\u{1fb3a}' | '\u{1fb3b}' => {
+ (x_center, y_last_third)
+ },
+ _ => (0., 0.),
+ };
+
+ canvas.draw_rect(0., 0., w_top_left, h_top_left, COLOR_FILL);
+ canvas.draw_rect(x_center, 0., w_top_right, h_top_right, COLOR_FILL);
+ canvas.draw_rect(0., y_third, w_mid_left, h_mid_left, COLOR_FILL);
+ canvas.draw_rect(x_center, y_third, w_mid_right, h_mid_right, COLOR_FILL);
+ canvas.draw_rect(0., y_third * 2., w_bottom_left, h_bottom_left, COLOR_FILL);
+ canvas.draw_rect(x_center, y_third * 2., w_bottom_right, h_bottom_right, COLOR_FILL);
+ },
_ => unreachable!(),
}
@@ -926,7 +1010,7 @@ mod tests {
let glyph_offset = Default::default();
// Test coverage of box drawing characters.
- for character in '\u{2500}'..='\u{259f}' {
+ for character in ('\u{2500}'..='\u{259f}').chain('\u{1fb00}'..='\u{1fb3b}') {
assert!(builtin_glyph(character, &METRICS, &offset, &glyph_offset).is_some());
}
diff --git a/extra/man/alacritty.5.scd b/extra/man/alacritty.5.scd
index b74d1fe3..8786e5a4 100644
--- a/extra/man/alacritty.5.scd
+++ b/extra/man/alacritty.5.scd
@@ -272,8 +272,8 @@ macOS: { family = _"Menlo"_, style = _"Regular"_ }
*builtin_box_drawing* = _true_ | _false_
When _true_, Alacritty will use a custom built-in font for box drawing
- characters (Unicode points _U+2500_ - _U+259F_) and powerline symbols
- (Unicode points _U+E0B0_ - _U+E0B3_).
+ characters (Unicode points _U+2500_ - _U+259F_), legacy computing symbols
+ (_U+1FB00_ - _U+1FB3B_), and powerline symbols (_U+E0B0_ - _U+E0B3_).
Default: _true_