skills/makepad-font/SKILL.md
CRITICAL: Use for Makepad font and text rendering. Triggers on: makepad font, makepad text, makepad glyph, makepad typography, font atlas, text layout, font family, font size, text shaping, makepad 字体, makepad 文字, makepad 排版, makepad 字形
npx skillsauth add ZhangHanDong/makepad-skills makepad-fontInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Version: makepad-widgets (dev branch) | Last Updated: 2026-01-19
Check for updates: https://crates.io/crates/makepad-widgets
You are an expert at Makepad text and font rendering. Help users by:
Refer to the local files for detailed documentation:
./references/font-system.md - Font module structure and APIsBefore answering questions, Claude MUST:
/sync-crate-skills makepad --force 更新文档"draw/src/text/
├── font.rs # Font handle and metrics
├── font_atlas.rs # GPU texture atlas for glyphs
├── font_face.rs # Font face data
├── font_family.rs # Font family management
├── fonts.rs # Built-in fonts
├── glyph_outline.rs # Glyph vector outlines
├── glyph_raster_image.rs # Rasterized glyph images
├── layouter.rs # Text layout engine
├── rasterizer.rs # Glyph rasterization
├── sdfer.rs # Signed distance field generator
├── selection.rs # Text selection/cursor
├── shaper.rs # Text shaping (harfbuzz)
<Label> {
text: "Hello World"
draw_text: {
text_style: {
font: { path: dep("crate://self/resources/fonts/MyFont.ttf") }
font_size: 16.0
line_spacing: 1.5
letter_spacing: 0.0
}
color: #FFFFFF
}
}
<Label> {
text: "Styled Text"
draw_text: {
text_style: <THEME_FONT_REGULAR> {
font_size: (THEME_FONT_SIZE_P)
}
}
}
live_design! {
// Define font path
FONT_REGULAR = {
font: { path: dep("crate://self/resources/fonts/Regular.ttf") }
}
FONT_BOLD = {
font: { path: dep("crate://self/resources/fonts/Bold.ttf") }
}
// Use in widget
<Label> {
draw_text: {
text_style: <FONT_REGULAR> {
font_size: 14.0
}
}
}
}
pub struct Layouter {
loader: Loader,
cache_size: usize,
cached_params: VecDeque<OwnedLayoutParams>,
cached_results: HashMap<OwnedLayoutParams, Rc<LaidoutText>>,
}
impl Layouter {
pub fn new(settings: Settings) -> Self;
pub fn rasterizer(&self) -> &Rc<RefCell<Rasterizer>>;
pub fn is_font_family_known(&self, id: FontFamilyId) -> bool;
pub fn define_font_family(&mut self, id: FontFamilyId, definition: FontFamilyDefinition);
pub fn define_font(&mut self, id: FontId, definition: FontDefinition);
pub fn get_or_layout(&mut self, params: impl LayoutParams) -> Rc<LaidoutText>;
}
pub struct OwnedLayoutParams {
pub text: Substr,
pub spans: Box<[Span]>,
pub options: LayoutOptions,
}
pub struct Span {
pub style: Style,
pub len: usize,
}
pub struct Style {
pub font_family_id: FontFamilyId,
pub font_size_in_pts: f32,
pub color: Option<Color>,
}
pub struct LayoutOptions {
pub max_width_in_lpxs: Option<f32>, // Max width for wrapping
pub wrap: bool, // Enable word wrap
pub first_row_indent_in_lpxs: f32, // First line indent
}
pub struct Settings {
pub loader: loader::Settings,
pub cache_size: usize, // Default: 4096
}
pub struct rasterizer::Settings {
pub sdfer: sdfer::Settings {
padding: 4, // SDF padding
radius: 8.0, // SDF radius
cutoff: 0.25, // SDF cutoff
},
pub grayscale_atlas_size: Size::new(4096, 4096),
pub color_atlas_size: Size::new(2048, 2048),
}
<View> {
// Label is a simple text widget
<Label> {
text: "Simple Label"
draw_text: {
color: #FFFFFF
text_style: {
font_size: 14.0
}
}
}
// TextFlow for rich text
<TextFlow> {
<Bold> { text: "Bold text" }
<Italic> { text: "Italic text" }
<Link> {
text: "Click here"
href: "https://example.com"
}
}
}
| Property | Type | Description |
|----------|------|-------------|
| text | String | Text content |
| font | Font | Font resource |
| font_size | f64 | Size in points |
| line_spacing | f64 | Line height multiplier |
| letter_spacing | f64 | Character spacing |
| color | Vec4 | Text color |
| brightness | f64 | Text brightness |
| curve | f64 | Text curve effect |
dep("crate://...") for embedded font resourcesdata-ai
CRITICAL: Use for Robius widget patterns. Triggers on: apply_over, TextOrImage, modal, 可复用, 模态, collapsible, drag drop, reusable widget, widget design, pageflip, 组件设计, 组件模式
data-ai
CRITICAL: Use for Robius state management patterns. Triggers on: AppState, persistence, theme switch, 状态管理, Scope::with_data, save state, load state, serde, 状态持久化, 主题切换
tools
CRITICAL: Use for Matrix SDK integration with Makepad. Triggers on: Matrix SDK, sliding sync, MatrixRequest, timeline, matrix-sdk, matrix client, robrix, matrix room, Matrix 集成, 聊天客户端
tools
CRITICAL: Use for Robius event and action patterns. Triggers on: custom action, MatchEvent, post_action, cx.widget_action, handle_actions, DefaultNone, widget action, event handling, 事件处理, 自定义动作