[聚合文章] 随想录(我从ftk学到的)

软件架构 2018-01-03 29 阅读

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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代码,都不用编译,实在是太方便了。从另外一方面来说,作者也真是太有才了。:-)

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。