-
Notifications
You must be signed in to change notification settings - Fork 19
Description
一、SGL目前的事件不合理
- 事件类型太少,有些功能不好做
事件至少要有 按下 抬起 单击 长按 长按连续
事件应该使用枚举类型限定死传入的参数类型 - 事件绑定函数参数不规范
设置设计的函数应该参考LVGL的
lv_event_dsc_t *lv_obj_add_event_cb(lv_obj_t *obj, lv_event_cb_t event_cb, lv_event_code_t filter, void *user_data)
应该包含对象,回调函数,事件类型,用户数据指针
LVGL是绑定了对应的事件类型,对应的事件发生才会回调,我们的不管什么事件发生都会回调
以上两个问题可以直接参考LVGL的事件来做就行了
二、有些控件的属性设置会导致程序死机
- 部分控件设置参数,如果设置了不合理的参数,程序会崩溃掉
- label不设置字体会导致死机,应该加空指针判断的,没有字体就拒绝绘制
- 部分控件参数设置讲究先后,先设置也会导致死机
例如sgl_dropdown_set_selected_index如果在控件未创建选项以后先调用,会导致死机
检查一下哪些控件对参数的范围有要求,加个保护
代码不应该因为参数的设置和函数的先后调用而死机,不合理的参数可以限定范围或者拒绝写入,拒绝响应,拒绝控件的绘制
三、控件类型直接转换就好,不用加一堆转换
sgl_rectangle_t *rect = sgl_container_of(obj, sgl_rectangle_t, obj);
->
sgl_rectangle_t rect = (sgl_rectangle_t)obj;
我看了LVGL也是这么干的,如果后期用户要增加控件,肯定是要按我们的规定来的
四、屏幕切换没办法写动画
目前我的方法是有多少个页面就创建多少个矩形,矩形就是屏幕,或者叫页面,
矩形之间可以做动画,淡入淡出,平移切换等,因为一次只会显示一个画面,因此可以等需要的时候创建,不需要的时候删除。
但是使用sgl_obj_create(NULL)去创建page的话,可以创建出不同的page,但很多效果没法做,淡入淡出,平移切换
没法实现,sgl_screen_load函数是一种很生硬的切换,必须把不同页面创建到矩形才能灵活的做很多效果
得考虑一下基于sgl_obj_create(NULL)方法管理不同页面,如果去实现切屏动画,目前的局限性太大
五、sgl_progress有比较多的bug
按以下创建,进度条会显得很是奇怪,应该是没有做参数保护参数限定的结果
sg]_obj_t* process = sgl_progress_create(NULL);
sgl_obj_set_pos(process,50,100);
sgl_obj_set_size(process,2oe,20);
sgl_progress_set_track_color(process,SGL_COLOR_DARK_GRAY);
sgl_progress_set_fill_color(process,SGL_COLOR_BRIGHT_BLUE);
sgl_progress_set_track_alpha(process,255);
sgl_progress_set_fill_alpha(process,255);
sgl_progress_set_radius(process,10);
sgl_progress_set_border_width(process,2);
sgl_progress_set_border_color(process,SGL_COLOR_LIGHT_GRAY);
sgl_progress_set_fill_interval(process,5);
sgl_progress_set_fill_radius(process,10);
sgl_progress_set_fill_width(process,10);
sgl_progress set value(process,127);
六、每个控件去初始化一套默认的参数
目前有默认的参数,但只初始化了一部分
例如:switch控件
初始化坐标、大小、圆角、边框宽度、边框颜色、背景色、主体色、开关状态
每个参数都要去初始化,不要担心代码占用,这个占用是合理的
不同的控件是有相同的参数的,也有不同的参数,复杂的控件要设置的颜色、透明度、圆角、边框可能比较多
目前代码统一使用的CONFIG_SGL_THEME_DEFAULT方法来设置效果,个人感觉还是每个控件把主题独立出来比较好
直接根据每个控件可设置的参数去定义就行,独立出来可调整度高,因为你统一效果的话没办法调
可以把效果#define到各自的.h文件下,先写一套亮色系再说,后面其他色系的有时间再加
如switch控件
#define SGL_THEME_SWITCH_COLOR xxx
#define SGL_THEME_SWITCH_BG_COLOR xxx
#define SGL_THEME_SWITCH_KNBO_COLOR xxx
#define SGL_THEME_SWITCH_ALPHA xxx
#define SGL_THEME_SWITCH_RADIUS xxx
#define SGL_THEME_SWITCH_BORDER_COLOR xxx
#define SGL_THEME_SWITCH_BORDER_WIDTH xxx
六、label控件的设置text应该分为两种
- sgl_label_set_text
这种方法是将字符复制到动态内存之中,第一次调用会malloc,之后的每次调用可能会relloc,重新分配内存,传入NULL是销毁分配的内存 - sgl_label_set_text_static
这种方法就是直接指向固定的一片内存
七、增加软件定时器
创建定时器和销毁定时器使用动态内存创建还是静态内存看你设计,也可以两种接口都写