您现在的位置是:首页 > 文章详情

GuiLite 3.3 发布:要灵活扩展,还要简单粗暴

日期:2020-05-26点击:410

本次更新,解决了:定制多样化问题,并优化了软件启动速度。

定制需求:

随着开发群的日益壮大,有想法的开发者层出不穷;倒是群主太过正常,显得跟大家有点格格不入了。大家需求是这样的:

  1. 我的硬件,没有framebuffer(这种情况在内存较小的单片机平台很常见),但我也想用GuiLite画出漂亮流畅的效果
  2. 我需要一个可以滚动的UI效果,界面上的所有元素(窗口)可以一起上下左右滑动(例如:手机通信录)
  3. 我需要一个半透明的窗口,其中窗口的背景是半透明的,文字则是不透明的
  4. 我的硬件有2D加速功能,需要GuiLite给与支持

 软件方案:

以上任何一个要求都足以推倒原有框架,因为太过底层,一旦修改就是对基础关键部分的手术。如何用最少的代码简单粗暴的解决问题,不伤执行效率,又不伤结构,是对软件架构的一个重大考验。我们的方案如下:

  1. 对于有经验的开发者来说,这已经是旧闻了,不仅被解决了,而且已经广泛应用在单片机方案中了;为什么旧事重提,就是因为它与需求2、3、4有很大的相似性,有必要一起做个总结:从c_surface派生一个类c_surface_no_fb,主要的绘制(渲染)接口没有变,只是重新实现draw_pixel, fill_rect(重载虚函数),让其通过条用外部的画点驱动函数,进行具体画点工作,具体见display.cpp::c_surface_no_fb
  2. 从c_surface派生一个类c_surface_scroll,扩大surface的高度,宽度,使其能够绘制所有的窗口元素;混动显示的过程,就是设置x,y坐标偏移量的过程,具体见:HelloScroll/UICode/scroll.h 
  3. 从c_surface派生一个类c_surface_transparent,主要的绘制(渲染)接口没有变,但实现绘制过程中,分析颜色的alpha值,从而达到透明效果(重载虚函数),具体见:HelloTransparent/UICode/surface_transparent.h
  4. 从c_surface派生一个类c_surface_2d_acc,重新实现一下draw_pixel,fill_rect接口,在该接口里面使能硬件2D加速功能

优化需求:

  1. Linux版本的实例,看到界面的时间较慢,需要优化
  2. STM32版本,由于有调用malloc的地方,所以,在heap size不够的时候会死机,需要手动设置heap size;该操作有些麻烦,影响移植体验,建议优化

优化方案:

  1. 去掉一些不必要的同步操作,改为异步执行,保证界面第一时间呈现出来
  2. 对实例代码进行几行代码调整,用静态变量代替动态分配

开发者优秀作品展示:

 

(硬件配置:ESP32 + ST7789 + SPI屏幕),由于GIF的原因,画面不能像真实视频那么流畅,更好的效果,可以参看qq群文件。

感谢GuiLite开发群“李子木”同学的分享!虽然这个作品中能看到GuiLite实例的影子,但视觉效果和艺术设计上面,已经完全是暴捶原作的水准了。特别是对SPI屏幕的DMA优化,让画面超出想象的流畅,绝对是SPI屏幕的优化典范。

最后,希望能看到更多优秀的作品,我们会尽力为大家提供一些技术建议,为您的超神之路贡献绵薄之力。

原文链接:https://www.oschina.net/news/115945/guilite-3-3-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章