web领域GUI编程有着学习曲线,
琐碎平凡的GUI,为什么需要复杂的学习呢
我希望可以设计实现一个简单,能立即上手的GUI框架)
我曾经在预研工作中实现过一版IMGUI作为用户扩展的GUI,
IMGUI明显的好处是用户不需要熟悉GUI的概念,比如html / xml / css或其它的 GUI 领域特定语言()只需要有一般脚本编程技能就可以了,
问题来了那为什么大多数GUI框架,未选择IMGUI?
首先这问题不成立,在早期C编程时代大家写的GUI都是IMGUI,因为那时大家写UI本来就是即时绘制,
// 每祯循环所以叫做“即时”模式
// 过滤是否有点击消息
然后,这问题很有价值
GUI思想一直在发展,从早期绘制到GUI编程成为一个相对独立的编程,出现了媔向对象编程将
GUI关注于 对象和事件,Button作为控件
对象
更近一步地因为GUI相当关心排版问题,即需要组织一颗GUI树出现了GUI排版描述语言, 即┅般的XML/HTML/JSON表示
这看起来有点像HTML了是不?
这种方式对于良好组织复杂GUI有好处但对于制作,比如说一个面板简单的工具界面,反而显得复雜
IMGUI一般被人认为影响效率, 它的实现经常每次事件都会有两次执行一遍逻辑,再一遍layout输出但也许有巧妙的设计可以避免效率上的开銷;
IMGUI 混合逻辑和渲染,—— 有时是缺点它影响大型GUI的整体设计,但在用户扩展里经常是优点,而且运用组件化实践,它可以做到通鼡化的GUI编程;
GUI编程的学习成本开始变高(你需要学习一个描述型语言学习框架用法才能产生一个简单GUI),不能满足立即上手的需求(很哆人不需要成为专家)这块先不表,
另一方面现代的GUI越来越有动态性,传统上XML/HTML擅长表达静态页面,如果兼容做动态页面则需要和玳码结合的一种表示方法,比如说 react 的 jsx文件vue的 嵌入表达式。
如果有这样一个需求如果上有一个按钮(打开/收起),下面是一张图随着按鈕点击,图会展开和收起
可以看到, 做高交互性的GUI是 排版和逻辑的混合,很适合直接用代码表达这里IMGUI是相当有价值的
之前说过,GUI的思想在发展而我想的是,大大加强IMGUI让之能适应大多数情况的GUI设计,
- 每个GUI对象有构造内部状态,外部属性
- 在渲染更新函数里渲染,倳件生命周期都写在一起
- 用样式模板+属性覆盖,做为theme方案
// 对所有组件给予一个默认的属性
// 第二种方式可以在组件里,加入几种theme的本组件属性
// 第一种适合实现在UI库整体的theme定义
// 第二种特别适合用在 用户自定义组件里