禁止商用。所有使用 PolarisUI 的应用必须公开完整源码。许可全文
Windows x64 / C++17 / OpenGL 3.3+ · 不依赖 Java/JNI · 版本与校验值
Java 68 类控件对应表
C++ 0.2.0 的类型均在 polaris::ui,公共入口为 polaris/controls.hpp。编号严格对应 Java polaris.sdk.ui.controls 的 1–68。每类都有原生实例、实际绘制和交互/状态模型;同类菜单及容器按 Java 的语义复用基类。额外的 FileBrowser、GlassSettingsPanel 不计入 68。
范围为 Java 控件目录列出的基础行为,不是 Java API 的二进制兼容或逐帧动画复制。C++ 文本光标/选区使用 UTF-8 字节偏移并停在码点边界;菜单过滤、字符串排序的忽略大小写目前仅覆盖 ASCII,不是完整 Unicode case folding。复杂文字 shaping、软换行、富文本、多选表格、图片加载、异步树数据源不在本版范围。
| # | C++ 类 | 实际行为与边界 |
|---|---|---|
| 1 | Button | 鼠标范围内释放、Enter/Space、禁用、on_click;外部释放取消 |
| 2 | Label | UTF-8 静态文字、字号/字重/颜色;不自动富文本排版 |
| 3 | CheckBox | 布尔切换、键盘、on_change;无三态 |
| 4 | RadioButton | 选中不再次取消;互斥使用 RadioGroup |
| 5 | Switch | 开关状态及鼠标/键盘事件 |
| 6 | TextField | 光标、选区、拖选、码点删除、Ctrl 词导航、剪贴板、100 步撤销/重做、提交 |
| 7 | TextArea | 硬换行、多行选区、方向键和滚动;没有自动软换行 |
| 8 | PasswordField | 码点掩码、禁止复制/剪切;不承诺字符串内存安全擦除 |
| 9 | SearchField | 文本编辑、placeholder、清空按钮、提交回调 |
| 10 | Slider | 拖动、捕获、范围/步长、方向键和 Home/End |
| 11 | ProgressBar | 确定进度 0–1、填充和百分比;不执行任务 |
| 12 | ScrollBar | 水平/垂直、page_ratio、拖动和键盘;宿主绑定目标模型 |
| 13 | ComboSelect | 只读值、菜单选择、selected_index、键盘 |
| 14 | ComboBox | 自由文本、预设选项、箭头显示全部、过滤建议 |
| 15 | ListBox | 可见行绘制、单选/清除选中、滚轮、键盘、双击回调 |
| 16 | Spinner | − 数值 +、默认无整体底板、中心编辑、范围/步长/键盘;不是加载动画 |
| 17 | Tabs | 标签头、左右键、选中 TabPage;隐藏页不参与焦点 |
| 18 | MenuBar | 横向菜单按钮容器、裁切;复用 Panel |
| 19 | DropDownMenu | 按钮打开 PopupMenu;业务菜单不是数据选择框 |
| 20 | RightClickMenu | Widget.context_menu 右键入口的语义类型;复用 PopupMenu |
| 21 | ToolBar | 横向按钮/图标容器;命令由回调实现 |
| 22 | StatusBar | 左右两侧状态文字,不抢焦点 |
| 23 | Callout | 标题/内容的持久提示,不抢焦点 |
| 24 | Tooltip | 独立提示实例;Widget.tooltip 提供延迟悬停显示 |
| 25 | Notification | Scene 通知队列、到时消失、非阻塞 |
| 26 | Dialog | 可拖动标题、关闭、子控件、非模态显示 |
| 27 | Modal | 遮罩、底层鼠标隔离、限定 Tab、关闭恢复焦点 |
| 28 | MessageBox | 确定/取消按钮与 answer(bool),Enter/Escape |
| 29 | Panel | 绝对/行/列/网格布局、玻璃背景、子控件裁切 |
| 30 | GroupBox | 标题和内容区的 Panel |
| 31 | Accordion | 展开/折叠、恢复高度、隐藏内容退出命中和焦点 |
| 32 | SplitPane | 两个区域、分割条拖动、0–1 比例;不是停靠系统 |
| 33 | ScrollPane | 内容高度、滚轮/滚动条、裁切、焦点自动显露 |
| 34 | TreeView | 层级展开、选择、方向键、可见行绘制;最大深度 128 |
| 35 | Table | 字符串单元格、单选、表头升降序、双击/Enter 打开编辑模态;全数字列数值排序,否则 ASCII 无视大小写排序 |
| 36 | GridView | 文本卡片网格、单选、滚动、按列键盘导航;不加载图片 |
| 37 | PropertyGrid | bool/double/string 编辑器、值模型、on_property_change |
| 38 | Paginator | 页数/当前页、前后按钮和键盘;业务分页由宿主查询 |
| 39 | Sidebar | 侧栏列表单选/滚动/导航回调;复用 ListBox |
| 40 | NavBar | 互斥导航按钮;复用 ButtonGroup |
| 41 | Breadcrumb | 路径文字、分段点击及 on_navigate;不直接访问文件系统 |
| 42 | ColorPicker | HSV 平面、Hue/Alpha 滑块、#RRGGBB/#AARRGGBB 输入及验证 |
| 43 | DatePicker | 公历有效性/闰年、月切换、星期一开头的 6×7 日历区域、方向键 |
| 44 | TimePicker | 时/分/秒三个等宽 Spinner;24 小时制,不处理时区 |
| 45 | FilePicker | 原生只读浏览弹层、驱动器/路径/上级/双击目录、文件选择回调 |
| 46 | DirectoryPicker | 目录过滤、可选择当前目录或选中子目录;不创建/删除文件 |
| 47 | IconButton | 小型按钮、图标文字及激活事件 |
| 48 | ToggleButton | 按钮选中状态、键盘切换和回调 |
| 49 | RadioGroup | 真正 RadioButton 子控件的互斥组 |
| 50 | ButtonGroup | ToggleButton 子控件互斥、选中索引 |
| 51 | ListItem | 独立可选列表行,文字和选中背景 |
| 52 | TreeNode | 独立行实例、子节点、展开/选择、循环检测 |
| 53 | TableCell | 独立可编辑 TextField 单元格;Table 内按数据行绘制 |
| 54 | TabPage | 有标题的非玻璃容器;可放在 Tabs 或独立展示 |
| 55 | Card | 标题、副标题、内容区布局及裁切 |
| 56 | Avatar | 前两个码点的圆形文字头像;不是照片控件 |
| 57 | Badge | 胶囊状态文字 |
| 58 | Separator | 水平/垂直分隔线 |
| 59 | SpinnerIndicator | 旋转圆弧加载指示,独立于数值微调器 |
| 60 | RingProgress | 确定进度圆环和百分比 |
| 61 | DragBar | 移动绑定 Widget 或父容器;不拖动 OS 窗口 |
| 62 | RangeSlider | 双端点、不能交叉、Space 选择端点、拖动和键盘 |
| 63 | NumberField | 有限数值、范围/步长、Enter/失焦提交、无效文本回滚 |
| 64 | KeyBindingField | 记录键值和 Ctrl/Shift/Alt;不是 OS 全局快捷键注册 |
| 65 | AutoComplete | 过滤建议、上下键、Enter 接受;保持文本框焦点 |
| 66 | PopupMenu | 禁用项、分隔线、勾选、子菜单、键盘/滚动、外部点击消耗 |
| 67 | ContextMenu | 上下文菜单语义类;复用 PopupMenu |
| 68 | CommandPalette | 命令注册/过滤/方向键/执行、模态显示、Scene 注册后 Ctrl+K |
演示与证据
polaris_demo.exe 中有 9 个控件分类和独立的材质配置页。大型类别可以滚动;菜单与弹层页的“打开”按钮创建真正的 Scene 弹层,而不只是画一个外观。只读文件选择器从当前工作目录开始,异步工作线程不访问 UI;最多扫描 4096 项。系统/网络文件服务本身的延迟不受库控制。
tests/widgets_test.cpp 包含全部 68 类的构造、类型、实际绘制分派、禁用命中,以及文本、数值、数据、模态、菜单、日期、颜色、文件和配置的状态/错误分支测试。renders/gallery/gallery-report.json 记录真实 GPU 渲染类名集合。它们证明基础覆盖,不代表每类所有边缘交互或所有 GPU/编译器已通过测试。