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

随想录(我从ftk学到的)相关推荐

  1. 代码随想录算法训练营第二十二天

    235. 二叉搜索树的最近公共祖先 利用二叉搜索树的性质,同时学习了代码随想录,我们可以学到第一个遍历到的值在目标区间内的数为最近公共祖先,若值大于目标区间,就探索左子树:若值小于目标区间,就探索右子 ...

  2. 跳跃游戏 (贪心/动态规划/dfs)

    1.跳跃游戏简单介绍 跳跃游戏是一种典型的算法题目,经常是给定一数组arr[],从数组的某一位置i出发,根据一定的跳跃规则,比如从i位置能跳arr[i]步,或者小于arr[i]步,或者固定步数,直到到 ...

  3. leetcode 14天刷题计划-算法入门(共计31题)

    文章目录 总结 2021.08.03(第1 天)二分 [1 704. 二分查找](https://leetcode-cn.com/problems/binary-search/) [2 278. 第一 ...

  4. 力扣动态规划入门21天刷题计划(共计46题)

    刷题地址:https://leetcode-cn.com/study-plan/dynamic-programming/?progress=8e97f6 动态规划常常适用于有重叠子问题和最优子结构性质 ...

  5. leetcode分类刷题

    1. 数组 数组是基本的数据结构,面试中考察数组的题目一般在思维上并不复杂,主要是考查面试者对代码的掌控能力. 数组下标都是从0开始 数组在内存空间的地址是连续的 题目: easy 704. 二分查找 ...

  6. 背包问题(1):关于零一背包问题的个人理解

    一.经典背包问题(零一背包) 给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高.问题的名称来源于如何选择最合适的物品放置于给定背包中.(每个物品只能 ...

  7. 随想录(对比着c学java)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 对于java,有两种论调.一种是鄙视,认为java是个人都能学,完全体现不出程序员的水平.还有一 ...

  8. 随想录(我们从uboot学什么)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] uboot的基本结构不复杂,主要就是一个裸循环的结构.但是,uboot包含的东西很多,有很多我们 ...

  9. 墙裂推荐!卡神力作《代码随想录》,上架首日卖爆!

    刚开始学习数据结构与算法,或者在力扣(LeetCode)上刷题的读者都有这种困惑--从何学起,先学什么,再学什么.很多人刷题的效率低,主要体现在以下三点: 难以寻找适合自己的题目. 找到了不合适现阶段 ...

最新文章

  1. 17、Kubernetes容器交付介绍
  2. SAP Spartacus 3.0部署在development environment上
  3. 浮动元素的均匀分布和两端对齐
  4. 【JEECG 官方】技术支持联系方式
  5. 3D卷积GAN飞起!微软“可缩放”新框架只需2D数据即可生成逼真3D模型
  6. C++学习笔记39:进程概念
  7. SQlite数据库的C编程接口(五) 便捷函数(Convenience Functions) ——《Using SQlite》读书笔记
  8. 如何选择tomcat版本
  9. Xcode6与Xcode5之间的细节差别(Precompile Prefix Header)
  10. 智能电视linux刷安卓,智能电视安卓盒子刷机ROOT成砖的解决办法
  11. 误删文件恢复软件哪款好
  12. 如何使用Three.js为3D模型构建Color Customizer应用
  13. 2、解读中台 -- 中台的作用
  14. python输入姓名输出欢迎你某某同学_2018-03-24 python 练习
  15. Android 设计模式之二:MVP模式与MVC模式 .
  16. 刚入职的新人如何快速了解公司业务--转载
  17. 【Django】开发日报_11_Day:手机号码管理系统-Ajax请求完善
  18. 关于tp-link wr740 v4的刷机救砖的办法(非线刷解决)恢复原版的
  19. 2021年终总结,我躺平了
  20. DSP28335的SPWM波生成方法

热门文章

  1. java machine 报错_Rhapsody启动过程显示[Cannot Find Java Virtual Machine file]错误信息
  2. 安装Linux平台Orion Health Rhapsody
  3. 语法分析器(syntax analyzer)【Python实现】
  4. 精益画布和商业模式画布
  5. 写在阿里游戏的最后几天
  6. ESSAY[000004]
  7. Hankson趣味题
  8. 圆形英文在html中,圆形元素在网页设计中的巧妙运用
  9. mail java_基于JavaMail的Java邮件发送:简单邮件发送
  10. Mongodb--day02