Skip to content

20260301优化 #65

@cxllm001

Description

@cxllm001

一、SGL目前的事件不合理

  1. 事件类型太少,有些功能不好做
    事件至少要有 按下 抬起 单击 长按 长按连续
    事件应该使用枚举类型限定死传入的参数类型
  2. 事件绑定函数参数不规范
    设置设计的函数应该参考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的事件来做就行了

二、有些控件的属性设置会导致程序死机

  1. 部分控件设置参数,如果设置了不合理的参数,程序会崩溃掉
  2. label不设置字体会导致死机,应该加空指针判断的,没有字体就拒绝绘制
  3. 部分控件参数设置讲究先后,先设置也会导致死机
    例如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应该分为两种

  1. sgl_label_set_text
    这种方法是将字符复制到动态内存之中,第一次调用会malloc,之后的每次调用可能会relloc,重新分配内存,传入NULL是销毁分配的内存
  2. sgl_label_set_text_static
    这种方法就是直接指向固定的一片内存

七、增加软件定时器
创建定时器和销毁定时器使用动态内存创建还是静态内存看你设计,也可以两种接口都写

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions