3个版本
0.7.2 | 2024年5月1日 |
---|---|
0.7.1 | 2024年3月30日 |
0.7.0 | 2024年1月13日 |
#254 in 图像
1,694 每月下载量
用于 9 个crate(2个直接)
1MB
4.5K SLoC
你可能正在寻找真正的cosmic-text crate。
Floem依赖于尚未合并到上游的cosmic-text更改。为了使Floem可以在crates.io上发布,必须将其所有依赖项都发布在那里 - 因此这个非官方crate。
lib.rs
:
COSMIC 文本
该库以通用方式提供高级文本处理。它提供了形状、字体发现、字体回退、布局、光栅化和编辑的抽象。形状使用rustybuzz,字体发现使用fontdb,光栅化是可选的,并使用swash。其他功能是在此库内部开发的。
建议您首先创建一个 FontSystem
,之后您可以创建一个 Buffer
,向其提供一些文本,然后检查它产生的布局。此时,您可以使用 SwashCache
将字符形状光栅化为图像或像素。
use floem_cosmic_text::{Attrs, Color, FontSystem, SwashCache, Buffer, Metrics};
// A FontSystem provides access to detected system fonts, create one per application
let mut font_system = FontSystem::new();
// A SwashCache stores rasterized glyphs, create one per application
let mut swash_cache = SwashCache::new();
// Text metrics indicate the font size and line height of a buffer
let metrics = Metrics::new(14.0, 20.0);
// A Buffer provides shaping and layout for a UTF-8 string, create one per text widget
let mut buffer = Buffer::new(&mut font_system, metrics);
// Borrow buffer together with the font system for more convenient method calls
let mut buffer = buffer.borrow_with(&mut font_system);
// Set a size for the text buffer, in pixels
buffer.set_size(80.0, 25.0);
// Attributes indicate what font to choose
let attrs = Attrs::new();
// Add some text!
buffer.set_text("Hello, Rust! 🦀\n", attrs);
// Perform shaping as desired
buffer.shape_until_scroll();
// Inspect the output runs
for run in buffer.layout_runs() {
for glyph in run.glyphs.iter() {
println!("{:#?}", glyph);
}
}
// Create a default text color
let text_color = Color::rgb(0xFF, 0xFF, 0xFF);
// Draw the buffer (for performance, instead use SwashCache directly)
buffer.draw(&mut swash_cache, text_color, |x, y, w, h, color| {
// Fill in your code here for drawing rectangles
});
依赖关系
~12–26MB
~344K SLoC