|
我自己也做GUI,看了你写的文档(版本0.1),觉得我们在思维上的一些差异比较有趣:
1. 最大的差别是我的GUI只能供一个进程使用,因此没有内核代码,另外目前我只支持256色,当然代码逻辑是与颜色深度无关的.
2. 窗口类型,我只定义了一种窗口类型,其实例既可以充当根窗口(借用X术语),也可以充当控件,取决于它到底是注册到GUI核心还是另外一个窗口.
3. 窗口修饰,我的窗口没有任何修饰,即没有边框和标题栏,窗口可以在自己的范围内任意绘制,如果用户需要给某个应用定制统一的外观,可以自行派生一个窗口类来实现公共的绘制.
4. 窗口队列,我觉得其实"焦点"和窗口的Z序似乎没有太大关系,我曾经考虑过实现这种效果:即屏幕的顶层飘着一个窗口显示一些用户提示之类的东西,而实际接受用户键盘输入的是其下方的窗口.
5. 控件的Z序,我给控件定义了Z序,和根窗口的代码几乎一样,可以在实现中带来很多方便,例如呈现一个三维的场景并允许用户和其中的对象交互,此时具有Z序的控件很容易实现画家算法.
6. 鼠标消息分派,沿着Z序从上到下交给各个窗口直到消息被某个窗口标记为"consumed",则所有与该窗口同级的窗口都不再遍历,除非它是上一条鼠标消息的"consumer"或者设置了"mouse capture"标记.
还有一些没有从文档中找到线索 :
7. 对象间通信,我看到boost里面有一个signa/slot的实现,照猫画虎自己也做了一个简化的,不知EGUI如何处理?
8. 调试,为了完全控制键盘(例如检测大小写锁的按下),我把/dev/tty设置为原始方式,但如此一来就无法在控制台下运行GDB,我的解决办法是用SSH远程调试,不知EGUI如何考虑?
最后是一个小小的建议 :
9. 习惯上颜色深度的单位是bit,因此16位色的颜色深度应该是16而不是文档中的2,笔误? :D |
|