打印
[STM32F1]

小型gui开源免费ugui

[复制链接]
6552|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位小伙伴好,我也是偶然机会发现了这个帖子(原贴地址https://bbs.21ic.com/icview-2383616-1-1.html作者:WoodData),并且了解下这个ugui,这两天没事,研究了一下,发表一下想法以及自己认为是的一些bug,不当之处希望大家多多讨论。
1、ugui控件虽然少,但是你搞明白了作者的思路,你可以在二次深开发,有助于理解GUI的设计原理和思想;所以这个ugui很好;
2、里面还是有一些bug的,我个人对一个事物,有刨根问底的习惯,所以,我在成功移植,使用后,抽时间研究了程序的源码,明白设计架构、启动流程;
3、初步搞了个小的草稿文档,如果小伙伴门觉得还不错,希望大家跟帖讨论,我继续完善;

uGUI启动流程.zip

1.37 MB

草稿啊

沙发
tjx0512| | 2018-6-21 10:52 | 只看该作者
如果能加上数值输入控件跟中文显示 那就可以应用了,能讨教下实现的方法吗?

使用特权

评论回复
板凳
小时代的我们|  楼主 | 2018-6-22 08:25 | 只看该作者
tjx0512 发表于 2018-6-21 10:52
如果能加上数值输入控件跟中文显示 那就可以应用了,能讨教下实现的方法吗? ...

你好,你的想法完全可以啊,你到ugui的github仓库就可以看到,作者的目标是做一个紧凑,但五脏俱全的小gui;不知道为什么后来不更新了,在源码中也可以发现作者留了很多待完善的地方;
    目前就有窗口、按键、文本显示、图片显示这几个控件,如果想自己搞一下,那就按照作者的设计框架,直接添加你需要的控件(绘制方法、handle方法)就可以了,这里有两种方法:1、自己闭门造车,因为ugui的基本的功能都有了,你做的就是绘制、处理部门;2、借鉴点别的gui的数值输入、中文等控件,直接搞过来,已修改就能用,我感觉这个方法比较好,因为自己造还是有点那啥。。。
    另外补充一下:上次放的草稿的文档中,说发现的几个bug,那是我按照上面wooddata作者的提供的例程来分析的,后来看了ugui原作者的例程,发现人家设计的没有bug,因为人家在update之前,都有添加一些其他的操作,从而避免了文档中说的几个bug;另外,wooddate的例程设计只能作为移植的验证,如果作为代码来分析,流程和框架都是有很大问题的,使用的小伙伴要注意了啊
    最后,如果你想完善这个夭折的ugui,可以自行二次开发,推荐一个可以借鉴的另一个开源、免费、牛X的、当下比较火的gui  : littlevgl

使用特权

评论回复
地板
WoodData| | 2018-6-22 09:54 | 只看该作者
楼主做的不错啊,其实第1个gui->state应该有赋值的,在void UG_WaitForUpdate( void )函数中,是我把这个调用去掉了没有加上,看下图。





加上UG_WaitForUpdate( )时就要注意UG_Update()要放到中断中定时更新。

第2个空指针是应该要检查一下,再操作。

这个GUI我移植好后本来还想自己添加一些控件的,后来忙其他事情,一直没空搞了。

使用特权

评论回复
5
WoodData| | 2018-6-22 10:02 | 只看该作者
这个GUI 还有一些问题,我发现在新的窗口覆盖旧窗口时,触屏不停在新窗口移动会触发旧窗口的控件点击反应。还没查是什么原因

使用特权

评论回复
6
598330983| | 2018-6-22 11:52 | 只看该作者
我都是用主流的,非主流的玩玩而已。

使用特权

评论回复
7
小时代的我们|  楼主 | 2018-6-22 14:58 | 只看该作者
本帖最后由 小时代的我们 于 2018-6-22 21:23 编辑
WoodData 发表于 2018-6-22 09:54
楼主做的不错啊,其实第1个gui->state应该有赋值的,在void UG_WaitForUpdate( void )函数中,是我把这个调 ...

wooddata 你好,
  是的,使用UG_WaitForUpdate( )的确要定时更新,刚好我的系统中用了rtt的os,所以我一个任务就触摸,另一个任务就是专注于绘制了,update()

使用特权

评论回复
8
小时代的我们|  楼主 | 2018-6-22 15:00 | 只看该作者
598330983 发表于 2018-6-22 11:52
我都是用主流的,非主流的玩玩而已。

没有什么主流、非主流之分,只有合适、不合适之分;适合你的才是最好的!

使用特权

评论回复
9
小时代的我们|  楼主 | 2018-6-22 16:13 | 只看该作者
WoodData 发表于 2018-6-22 10:02
这个GUI 还有一些问题,我发现在新的窗口覆盖旧窗口时,触屏不停在新窗口移动会触发旧窗口的控件点击反应。 ...

我刚才查阅了我的工程,并在平台上,多次试验,没有发现当新的窗口成为活跃窗口后,即覆盖原来的窗口;然后在新的窗口处随便点击,都不会触发被覆盖窗口的控件事件啊    图中的红色区域、蓝色区域我都测试了,我估计可能就是gui中的那几个窗口指针没有合理初始化,然后活跃窗口混乱造成的吧
    我在update之前把窗口1也设置成了gui.active_window = &window_1;

1.png (121.55 KB )

1.png

7.png (526.68 KB )

7.png

28.png (291.02 KB )

28.png

使用特权

评论回复
10
stm32jy| | 2018-6-22 21:06 | 只看该作者
ugui与emwin哪个好?

使用特权

评论回复
11
stm32jy| | 2018-6-22 21:07 | 只看该作者
只会用emwin写点触摸屏的界面,这个不是很熟悉。

使用特权

评论回复
12
小时代的我们|  楼主 | 2018-6-22 21:29 | 只看该作者
stm32jy 发表于 2018-6-22 21:06
ugui与emwin哪个好?

这种东西没有好与不好,看你使用的环境了,适合你项目实际情况的就是好的(波音747的发动机是装不到拖拉机上的 ),emwin,比较成熟,但是有版权和不开源的限制;从学习角度来说,ugui可以帮助你理解gui设计的框架和原理,对界面控制要求不多的设计,ugui是个选择,只可惜原作者,不更新了,有想法的,自己二次开发吧

使用特权

评论回复
13
aizaixiyuanqian| | 2018-6-22 22:21 | 只看该作者
感谢分享,有个彩屏也想玩玩,RGB的可以吗?

使用特权

评论回复
评论
小时代的我们 2018-6-23 08:11 回复TA
可以 
14
stm32jy| | 2018-6-24 18:25 | 只看该作者
小时代的我们 发表于 2018-6-22 21:29
这种东西没有好与不好,看你使用的环境了,适合你项目实际情况的就是好的(波音747的发动机是装不到拖拉 ...

RGB的可能需要F4的芯片才能驱动F1的驱动不了。

使用特权

评论回复
15
Garen2| | 2018-6-26 21:40 | 只看该作者
软件就叫UGUI?

使用特权

评论回复
16
大豆子| | 2018-10-6 16:48 | 只看该作者
今天看了一下源码。请问push_pixel=((void*(*)(UG_S16,UG_S16,UG_S16,UG_S16)) gui->driver[DRIVER_FILL_AREA].driver) (x,y,x+actual_char_width-1,y+font->char_height-1);
这个什么意思呢
void(*push_pixel)(UG_COLOR);这样的

使用特权

评论回复
17
qcmc| | 2022-9-18 18:54 | 只看该作者
大豆子 发表于 2018-10-6 16:48
今天看了一下源码。请问push_pixel=((void*(*)(UG_S16,UG_S16,UG_S16,UG_S16)) gui->driver[DRIVER_FILL_AR ...

把gui->driver[DRIVER_FILL_AREA].driver强制转换为函数指针,这个函数指针类型为(void*(*)(UG_S16,UG_S16,UG_S16,UG_S16),然后调用这个函数,返回值赋值给push_pixel(返回值的类型为void*)

使用特权

评论回复
18
wooda| | 2022-12-30 09:56 | 只看该作者
本帖最后由 wooda 于 2022-12-30 11:43 编辑

ugui有个fork,用户名是0x3333的,做了很多控件,可以看看的
常用的控件都有另外,git上的uGUI是0.31版本了,增加了一些控件,做了一些修补什么的。。。

使用特权

评论回复
19
Bowclad| | 2023-1-1 16:47 | 只看该作者
这个主要是看使用环境,用哪个gui都差不多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

24

帖子

1

粉丝