暴论:ImGui是后现代 CSS-in-JS。
- 注:本文中所有出现的
ImGui
一词,均代指「即时模式GUI框架(Immediate mode GUI)」,而非 Dear ImGui 。
闲来无事,尝试了一堆 ImGui 框架 。
想法很美好,现实倒是依旧一样地骨感。一旦涉及复杂layout嵌套、多种样式排版、动态窗口大小适配等种种甚至不算高级的需求,就不得不依赖开发者自己造轮子解决。suckless.org 早已把 Nuklear 列入了推荐库列表,但当我们做一个GUI框架、面对一切UI/UX设计体验问题的时候,「Keep it simple, stupid」的哲学又是否依旧适用?
Just an FYI, nuklear 的 CJK 支持目前依旧半死不活。什么,你不想引入ICU和Harfbuzz?等着处理114514个edge case吧。Unicode留下的历史债,你不还没人帮你还.jpg
没有人会反对Glib + GTK是依托答辩,但连Gnome都懂得帮你包好底层图形栈、顺便仍给你一套 UI Builder 跟 设计规范,大家骂归骂,满足需求的东西才不会止步于「开发者的玩具」。
做GUI绝对不只是开发这一环的事情。不用写事件驱动爽是真的爽,但在ImGui社区能拿出一套完备的体系之前,我依旧难对这套东西持乐观态度。散了散了,大家都去用Qt吧。
BTW: ImGui 这一套样式写法,无端幻视 css-in-js 🤔 🤔 🤔
// JSS
/* Nuklear */
struct nk_color table;
table= ;
table= ;
;
/* Dear ImGui */
ImGuiStyle* style = dst ? dst : &;
ImVec4* colors = style->Colors;
colors= ;
colors= ;