15个版本

0.2.4 2024年6月22日
0.2.3 2021年7月16日
0.2.2 2021年6月3日
0.2.1 2020年10月30日
0.1.2 2018年9月21日

#64文本处理

Download history 16286/week @ 2024-04-23 16545/week @ 2024-04-30 13729/week @ 2024-05-07 14320/week @ 2024-05-14 16072/week @ 2024-05-21 16867/week @ 2024-05-28 17112/week @ 2024-06-04 13693/week @ 2024-06-11 16103/week @ 2024-06-18 16056/week @ 2024-06-25 14018/week @ 2024-07-02 15608/week @ 2024-07-09 15198/week @ 2024-07-16 16558/week @ 2024-07-23 17090/week @ 2024-07-30 16860/week @ 2024-08-06

68,862 每月下载量
374 个crate中使用了(9个直接使用)

Apache-2.0

65KB
1.5K SLoC

glyph_brush_layout crates.io 文档

ab_glyph提供文本布局。

  • 泛型定位与换行特性。
  • 内置布局逻辑
    • 在单个布局中混合字体和缩放部分。
    • 水平对齐:左/中/右。
    • 垂直对齐:顶部/中/底部。
    • Unicode换行。
    • 有界布局。
use glyph_brush_layout::{ab_glyph::*, *};

let dejavu = FontRef::try_from_slice(include_bytes!("../../fonts/DejaVuSans.ttf"))?;
let garamond = FontRef::try_from_slice(include_bytes!("../../fonts/GaramondNo8-Reg.ttf"))?;

// Simple font mapping: FontId(0) -> deja vu sans, FontId(1) -> garamond
let fonts = &[dejavu, garamond];

// Layout "hello glyph_brush_layout" on an unbounded line with the second
// word suitably bigger, greener and serif-ier.
let glyphs = Layout::default().calculate_glyphs(
    fonts,
    &SectionGeometry {
        screen_position: (150.0, 50.0),
        ..SectionGeometry::default()
    },
    &[
        SectionText {
            text: "hello ",
            scale: PxScale::from(20.0),
            font_id: FontId(0),
        },
        SectionText {
            text: "glyph_brush_layout",
            scale: PxScale::from(25.0),
            font_id: FontId(1),
        },
    ],
);

assert_eq!(glyphs.len(), 24);

let SectionGlyph { glyph, font_id, section_index, byte_index } = &glyphs[4];
assert_eq!(glyph.id, fonts[0].glyph_id('o'));
assert_eq!(*font_id, FontId(0));
assert_eq!(*section_index, 0);
assert_eq!(*byte_index, 4);

let SectionGlyph { glyph, font_id, section_index, byte_index } = &glyphs[14];
assert_eq!(glyph.id, fonts[1].glyph_id('u'));
assert_eq!(*font_id, FontId(1));
assert_eq!(*section_index, 1);
assert_eq!(*byte_index, 8);

依赖关系

~1.5MB
~25K SLoC