Agent Skills: Makepad Widgets Skill

|

UncategorizedID: ZhangHanDong/makepad-skills/makepad-widgets

Install this agent skill to your local

pnpm dlx add-skill https://github.com/ZhangHanDong/makepad-skills/tree/HEAD/skills/makepad-widgets

Skill Files

Browse the full folder contents for makepad-widgets.

Download Skill

Loading file tree…

skills/makepad-widgets/SKILL.md

Skill Metadata

Name
makepad-widgets
Description
|

Makepad Widgets Skill

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 widgets. Help users by:

  • Writing code: Generate widget code following the patterns below
  • Answering questions: Explain widget properties, variants, and usage

Documentation

Refer to the local files for detailed documentation:

  • ./references/widgets-core.md - Core widgets (View, Button, Label, etc.)
  • ./references/widgets-advanced.md - Helper and advanced widgets
  • ./references/widgets-richtext.md - Rich text widgets (Markdown, Html, TextFlow)

IMPORTANT: Documentation Completeness Check

Before answering questions, Claude MUST:

  1. Read the relevant reference file(s) listed above
  2. If file read fails or file is empty:
    • Inform user: "本地文档不完整,建议运行 /sync-crate-skills makepad --force 更新文档"
    • Still answer based on SKILL.md patterns + built-in knowledge
  3. If reference file exists, incorporate its content into the answer

Key Patterns

1. View (Basic Container)

<View> {
    width: Fill
    height: Fill
    flow: Down
    padding: 16.0
    show_bg: true
    draw_bg: { color: #1A1A1A }

    <Label> { text: "Content" }
}

2. Button

<Button> {
    text: "Click Me"
    draw_bg: {
        color: #0066CC
        color_hover: #0088FF
        border_radius: 4.0
    }
    draw_text: {
        color: #FFFFFF
        text_style: { font_size: 14.0 }
    }
}

3. Label with Styling

<Label> {
    width: Fit
    height: Fit
    text: "Hello World"
    draw_text: {
        color: #FFFFFF
        text_style: {
            font_size: 16.0
            line_spacing: 1.4
        }
    }
}

4. Image

<Image> {
    width: 200.0
    height: 150.0
    source: dep("crate://self/resources/photo.png")
    fit: Contain
}

5. TextInput

<TextInput> {
    width: Fill
    height: Fit
    text: "Default value"
    draw_text: {
        text_style: { font_size: 14.0 }
    }
}

Widget Traits (from source)

pub trait WidgetNode: LiveApply {
    fn find_widgets(&self, path: &[LiveId], cached: WidgetCache, results: &mut WidgetSet);
    fn walk(&mut self, cx: &mut Cx) -> Walk;
    fn area(&self) -> Area;
    fn redraw(&mut self, cx: &mut Cx);
}

pub trait Widget: WidgetNode {
    fn handle_event(&mut self, cx: &mut Cx, event: &Event, scope: &mut Scope) {}
    fn draw_walk(&mut self, cx: &mut Cx2d, scope: &mut Scope, walk: Walk) -> DrawStep;
    fn draw(&mut self, cx: &mut Cx2d, scope: &mut Scope) -> DrawStep;
    fn widget(&self, path: &[LiveId]) -> WidgetRef;
}

All Built-in Widgets (84 files in widgets/src/)

| Category | Widgets | |----------|---------| | Basic | View, Label, Button, Icon, Image | | Input | TextInput, CheckBox, RadioButton, Slider, DropDown, ColorPicker | | Container | ScrollBars, PortalList, FlatList, StackNavigation, Dock, Splitter | | Navigation | TabBar, Tab, FoldHeader, FoldButton, ExpandablePanel | | Overlay | Modal, Tooltip, PopupMenu, PopupNotification | | Media | Video, RotatedImage, ImageBlend, MultiImage | | Layout | AdaptiveView, SlidePanel, PageFlip, SlidesView | | Special | Markdown, Html, TextFlow, WebView, KeyboardView | | Utility | LoadingSpinner, DesktopButton, LinkLabel, ScrollShadow |

Core Widgets Reference

| Widget | Purpose | Key Properties | |--------|---------|----------------| | View | Container | flow, align, show_bg, draw_bg, optimize | | Button | Clickable | text, draw_bg, draw_text, draw_icon | | Label | Text display | text, draw_text | | Image | Image display | source, fit | | TextInput | Text entry | text, draw_text, draw_cursor, draw_selection | | CheckBox | Toggle | text, selected | | RadioButton | Selection | text, selected | | Slider | Value slider | min, max, step | | DropDown | Select menu | labels, selected | | PortalList | Virtual list | Efficient scrolling for large lists | | Modal | Dialog | Overlay dialog boxes | | Tooltip | Hint | Hover tooltips |

View Variants

| Variant | Description | |---------|-------------| | SolidView | Solid background color | | RoundedView | Rounded corners | | RoundedAllView | Individual corner control | | RectView | Rectangle with border/gradient | | CircleView | Circle/ellipse shape | | GradientXView | Horizontal gradient | | GradientYView | Vertical gradient | | RoundedShadowView | Rounded with shadow | | ScrollXView | Horizontal scroll | | ScrollYView | Vertical scroll | | ScrollXYView | Both directions scroll | | CachedView | Texture-cached |

Button Variants

| Variant | Description | |---------|-------------| | ButtonFlat | Flat style | | ButtonFlatIcon | Flat with icon | | ButtonFlatter | No background | | ButtonGradientX | Horizontal gradient | | ButtonGradientY | Vertical gradient | | ButtonIcon | Standard with icon |

ImageFit Values

| Value | Description | |-------|-------------| | Stretch | Stretch to fill | | Contain | Fit within, preserve ratio | | Cover | Cover area, may crop | | Fill | Fill without ratio |

When Writing Code

  1. Always set width and height on widgets
  2. Use show_bg: true to enable background rendering
  3. Access draw_bg, draw_text, draw_icon for shader uniforms
  4. Use dep("crate://self/...") for resource paths
  5. Choose appropriate View variant for visual needs

When Answering Questions

  1. Recommend UI Zoo example for widget exploration
  2. View is the base container - most visual widgets inherit from it
  3. Draw shaders (draw_bg, draw_text) control appearance
  4. All widgets support animation through animator property