【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
ftk代码最早是由李先静同学开发的,很多地方都可以下载的到,比如这。作为一个gui库,ftk本身有很多值得我们学习的地方。以下就是我自己的一些想法和体会。
1、单线程架构
之前看minigui的时候,很多地方看不懂。但是ftk阅读起来却比较容易,因为ftk是单线程机制。这种单线程代码一般都是这种模式,
while(True){
event = Select();
process_event();
}
2、最简单的底层依赖
看过ftk代码的同学可能觉得有点奇怪,为什么ftk能支持那么多系统、那么多平台,这其实因为ftk对底层要求很低,一般只需要做到这两点就可以了,
- a、支持外部事件读取
- b、支持bitmap更新
3、引入事件源机制
gui作为基础软件,它的输入一般有这么几个地方:鼠标、键盘、定时器、自定义事件源,其中自定义事件源可以作为pubsub机制由其他线程调用,改进work线程和gui线程的同步策略。ftk下面所有的事件源都是可以动态添加的。这是因为事件源管理器本身也是单独添加到select当中的。通常的鼠标、键盘事件都是由窗口管理器直接接收过来处理的,大家可以在click回调函数设置断点,一下子就可以明白整个ftk的处理逻辑了。
4、抽象流程和私有数据
ftk下面很多的代码都是控件的代码,这些控件包括label、button、slider、combobox、entry等等。大家发现,这些控件的头文件代码都是非常简洁的,使用起来很容易,大部分实现都是放在c文件里面,且实现也是根据paint、event、destroy这些函数指针来实现的。对于通用代码部分,大部分控件直接调用ftk_widget相关函数,paint就调用canvas函数,而对于私有数据,则单独用priv保存,逻辑处理上面也尽量用static函数来表示,函数上面切割地非常干净。
5、单元测试
ftk大约是我除了redis代码之外,单元测试做的最好的c代码了。
6、丰富的demo代码
作为一个库,ftk提供给使用者的demo代码还是相当多的。对于普通的c语言开发者来说,基本上不需要花费很长的时间就可以理解ftk给出的demo代码,这一点要给一个大大的赞。
7、意外的lua脚本
如果你觉得ftk这些已经让你对作者的代码能力非常敬佩了,那么在顶层目录,你会发现居然还有一个script_binding目录,里面包含了和ftk相关的lua代码、c代码。换句话说,就是作者把ftk进行脚本化了。使用这些lua脚本编写ftk代码,都不用编译,实在是太方便了。从另外一方面来说,作者也真是太有才了。:-)