根据我这些年的探索,图形界面库主要有如下痛点:是否跨平台,是否易用,组件是否丰富。最近,我开始了解离屏渲染,并有了一个设想:基于离屏渲染实现图形界面。
我认为离屏渲染至少有如下好处:将图形界面的操作逻辑与渲染分离。这样下来,操作图形界面相当于操作一个盲盒。编写图形界面的操作逻辑是相对简单的,跨平台也是相对容易实现的。
经历了对 wke 接口的封装,我注意到,图形界面对操作系统消息的需求度并不高:
- 响应鼠标(触摸)、键盘事件
- 响应输入法
一套下来,只需要将渲染的结果适配到渲染库,同时响应操作系统事件,跨平台的图形界面便实现了。
这样看来实现图形界面的思路就很清晰。就我现在的理解,首先需要使用某个数据结构定义图形界面,然后响应事件。触发某事件,相当于在数据结构里找到符合事件的组件……。修改界面的样式,也相当于修改某种数据结构……。最终,渲染引擎根据这些结构渲染界面……。
为了让图形界面更加易用,提供脚本引擎创建、修改、销毁这些数据结构。图形界面初始化时创建脚本运行时,可能是某个单独的线程。从这个思路来看,走 web 路线实现图形界面反而是简单的:基于 HTML 定义图形界面 + CSS 描述图形界面 + JavaScript 操作图形界面……
看来,我的全新的计算机之旅又要开始了!
为了实现图形界面,需要筛选一个 web 子集:
- 文本:h1、h2、p、a 等。
- 多媒体:img、svg、video 等。
- 表格:table 等。
- 表单:button、input、progress 等
以我目前的水平,通过自己造轮子是无法实现的,所以要背靠大山。