
前端UI组件3D渲染跨平台游戏开发【免费下载链接】makepadMakepad is a creative software development platform for Rust that compiles to wasm/webGL, osx/metal, windows/dx11 linux/opengl项目地址https://gitcode.com/gh_mirrors/ma/makepad点击查看免费下载IconSet 是 Makepad 控件库中用于显示字体图标的专用控件它以 FontAwesome 图标字体fa-solid-900.ttf为数据源通过text属性直接填入图标的 Unicode 码位即可渲染出图标并天然继承 Makepad 的 Live 主题体系。读完本文你将掌握 IconSet 的全部属性与样式配置方式能通过draw_text、text_style实现图标颜色、字号、行距与字体族的精细控制并能在 uizoo 这类演示工程里复现它的完整用法。控件概述什么是 IconSet根据 iconset.md 的定义IconSet 是一个基于 FontAwesome 的图标集控件FontAwesome IconSet。它并非一个独立实现的复杂控件而是直接复用 Makepad 的文本标签控件 Label 并覆盖其默认样式而成——这一点在 label.rs 的脚本注册代码中可以直接看到mod.widgets.IconSet mod.widgets.Label{ width: Fit draw_text : { ink_centered: false text_style: theme.font_icons{ line_spacing: theme.font_wdgt_line_spacing font_size: 100. } color: theme.color_text } text: Car }从源码结构可以看出IconSet 与 Label 是同一套渲染管线控件内部持有DrawText绘制时调用draw_text.draw_walk(cx, walk, self.align, self.text.as_ref())完成字形光栅化见 label.rs。因此任何关于文本对齐、换行、溢出截断、悬停上报的机制IconSet 都天然具备。IconSet 的核心定位是以字库为图标源它不加载 SVG 路径也不生成位图而是让图标字体里的字形直接参与文本排版。这与同目录下的 Icon 控件基于单色 SVG 矢量路径渲染形成互补——前者适合工具类 UI 图标、操作按钮图形后者适合精细的品牌图形与自定义路径。核心属性AttributesIconSet 的属性全部继承自 Label 控件以下是 iconset.md 给出的完整属性清单及其实际行为属性类型作用alignAlign文本在布局区域内的对齐方式水平/垂直决定字形落点draw_textDrawText文本绘制对象承载颜色、字形样式等全部绘制参数flowFlow内部布局流向默认Flow::right_wrap()hover_actions_enabledbool是否上报鼠标悬停动作HoverIn/HoverOut默认falsepaddingPadding内边距默认theme.mspace_1textString图标文本内容通常是 FontAwesome 图标的 Unicode 码位对应到 label.rs 中Label结构体的字段声明可以看到除了上述属性外控件还支持max_lines最大行数0表示不限与text_overflow溢出处理配合Ellipsis可显示省略号。text以ArcStringMut存储支持运行时通过set_text动态更新并触发重绘。样式属性Styling AttributesIconSet 的样式全部通过draw_text子树配置层级结构如下draw_text ├── color (Color) └── text_style ├── font_size (float) ├── line_spacing (float) └── font_family (FontFamilyId)color字形颜色Color类型。默认取theme.color_text随主题的暗/亮切换自动变化也可以直接写成十六进制颜色如#0ff。text_style一个TextStyle对象其中font_sizefloat字形字号默认 100.0见 label.rsline_spacingfloat行距默认取主题的theme.font_wdgt_line_spacingfont_familyFontFamilyId字体族引用默认是theme.font_icons即主题注册的图标字体族。text_style可通过:{}增量覆盖语法局部修改无需重建整个对象。例如在 uizoo 演示 中每个图标都通过draw_text : {color: #0ff}把字形刷成青色。图标字体从哪来theme.font_icons 与 fa-solid-900.ttfIconSet 之所以被称为 FontAwesome IconSet关键在于它的默认字体族指向主题的图标字体。在 font_policy.rs 中install_theme_fonts为暗色、亮色、骨架三套主题统一注册了font_icons: TextStyle{font_family: #(icons) line_spacing: 1.2}而#(icons)字体族的实际资源在 theme_desktop_skeleton.rs 中定义font_icons: TextStyle{ font_family: FontFamily{ latin : FontMember{res: crate_resource(makepad_widgets:resources/fa-solid-900.ttf) asc: 0.0 desc: 0.0} } line_spacing: 1.2 }由此可以确认图标源是随makepad_widgets打包的 FontAwesome Solid 900 字库fa-solid-900.ttf且asc、desc均为 0.0即字形以字体自身请求的基线排布不额外上下偏移。如何使用 FontAwesome 码位FontAwesome 图标的字形位于 Unicode 私有区PUA每个图标对应一个形如\u{f015}的码位。由于这些字形本质是装在盒子里的图形而不是常规大写字母IconSet 特地将ink_centered设为false见 label.rs 的注释图标字形应该留在字体请求的基线上而不是按文本视觉中心对齐。这一点是 IconSet 与普通 Label 的关键差异普通 Label 默认ink_centered: true会以墨迹重心居中图标字形若按此处理会偏离预期位置。实战在 uizoo 中查看并复现 IconSet 演示仓库中的 uizoo 是一个控件演示工程IconSet 是其 Dock 选项卡之一。其集成链路如下app.rs 将tIconSet加入tab_set_2的标签列表app.rs 定义tIconSet : DockTab{name: IconSet template: PermanentTab kind: TabIconSet}app.rs 将DemoIconSet挂到UIZooTab布局下app.rs 在启动时注册crate::tab_iconset::script_mod(vm)把演示所用的脚本模板加载进虚拟机。实际的演示代码在 tab_iconset.rs它把 16 个 FontAwesome 图标按flow: Right、间距30.横向排布mod.widgets.DemoIconSet UIZooTabLayout_B{ desc : { Markdown{body: # IconSet\n\nIconSet displays font-based icons.} } demos : { flow: Right spacing: 30. IconSet{text: \u{f015} draw_text : {color: #0ff}} IconSet{text: \u{f2bd} draw_text : {color: #0ff}} IconSet{text: \u{f03e} draw_text : {color: #0ff}} IconSet{text: \u{f15b} draw_text : {color: #0ff}} IconSet{text: \u{f030} draw_text : {color: #0ff}} IconSet{text: \u{f133} draw_text : {color: #0ff}} IconSet{text: \u{f0c2} draw_text : {color: #0ff}} IconSet{text: \u{f0d1} draw_text : {color: #0ff}} IconSet{text: \u{f164} draw_text : {color: #0ff}} IconSet{text: \u{f118} draw_text : {color: #0ff}} IconSet{text: \u{f025} draw_text : {color: #0ff}} IconSet{text: \u{f0f3} draw_text : {color: #0ff}} IconSet{text: \u{f007} draw_text : {color: #0ff}} IconSet{text: \u{f075} draw_text : {color: #0ff}} IconSet{text: \u{f0e0} draw_text : {color: #0ff}} IconSet{text: \u{f1b9} draw_text : {color: #0ff}} } }参考 FontAwesome 的码位表这些示例对应\u{f015}房子/home、\u{f2bd}用户头像、\u{f03e}图片、\u{f15b}文件、\u{f030}相机、\u{f133}电源、\u{f0c2}云、\u{f0d1}购物车、\u{f164}回复箭头、\u{f118}笑脸、\u{f025}音乐、\u{f0f3}铃铛、\u{f007}用户、\u{f075}对话气泡、\u{f0e0}邮件、\u{f1b9}插头。演示代码同时展示了两个重要能力一是多个图标可在同一容器内按flow: Right排列二是每个实例可独立覆盖draw_text实现同屏多配色。一个可直接套用的最小示例在任意 Makepad 工程中例如基于makepad_widgets的 app在 Live DSL 里声明IconSet{ text: \u{f015} draw_text : { color: #0ff text_style : { font_size: 24. line_spacing: 1.2 } } }要点归纳大小控制图标尺寸由text_style.font_size决定默认 100.0 偏大UI 场景常覆盖为 16~32颜色控制通过draw_text.color设置支持主题变量如theme.color_text与直接色值两种写法换字库把text_style.font_family换成#(...)指向的其它FontFamily即可复用 IconSet 的渲染链路显示任意字体字形悬停交互需要做 Tooltip 或 hover 高亮时将hover_actions_enabled设为true控件即会在鼠标进入/离开时派发LabelAction::HoverIn(Rect)/LabelAction::HoverOut见 label.rs且它只报告指针位置、绝不抢占指针捕获因此不会破坏外层列表/滚动的手势这一行为有专门的单元测试pointer_capture_tests验证见 label.rs。运行演示工程要直观查看 IconSet 的实际渲染效果可以运行 uizoo 工程工程清单见 Cargo.tomlcargo run -p uizoo启动后在 Dock 标签栏选择 IconSet 标签即可看到一排青色 FontAwesome 图标。本文所述内容均基于当前仓库源码widgets/core与examples/uizoo核实若要在自己的 Makepad 应用中引入 IconSet请确保依赖makepad_widgets且主题包含font_icons该样式由 font_policy.rs 在主题安装阶段自动注册。关键参考路径控件文档examples/uizoo/resources/iconset.md控件定义与实现widgets/core/src/label.rsIconSet 别名定义见 L241-L255Label 结构见 L266-L310绘制与事件见 L344-L420图标字体注册widgets/core/src/font_policy.rs图标字体资源widgets/core/src/theme_desktop_skeleton.rs演示集成examples/uizoo/src/app.rs 与 examples/uizoo/src/tab_iconset.rs赞分享前端UI组件3D渲染跨平台游戏开发【免费下载链接】makepadMakepad is a creative software development platform for Rust that compiles to wasm/webGL, osx/metal, windows/dx11 linux/opengl项目地址https://gitcode.com/gh_mirrors/ma/makepad点击查看免费下载相关推荐Dear ImGui 图标字体集成将 FontAwesome 用 MergeMode 合并进主字体Dear ImGui 图标字体集成将 FontAwesome 用 MergeMode 合并进主字体 如果你的 Dear ImGui 应用里想直接在按钮、文本中UI组件前端桌面应用图形学终极指南如何在Pencil Project中高效集成与使用FontAwesome图标字体终极指南如何在Pencil Project中高效集成与使用FontAwesome图标字体 Pencil Project是一款免费开源的GUI原型设计与 dia桌面应用amis Icon 图标组件完整指南字体图标、SVG、URL 与 FontAwesome 多版本适配amis Icon 图标组件完整指南字体图标、SVG、URL 与 FontAwesome 多版本适配 导读 本文基于 amis 低代码框架的 Icon 图标组前端低代码UI组件上一篇react-jsonschema-form与Jest测试覆盖率报告历史下一篇网盘直链下载三步到手9 大网盘取直链 Aria2/IDM 实操教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考