内容简介:本次更新,解决了:定制多样化问题,并优化了软件启动速度。 定制需求: 随着开发群的日益壮大,有想法的开发者层出不穷;倒是群主太过正常,显得跟大家有点格格不入了。大家需求是这样的: 我的硬件,没有frame...
本次更新,解决了:定制多样化问题,并优化了软件启动速度。
定制需求:
随着开发群的日益壮大,有想法的开发者层出不穷;倒是群主太过正常,显得跟大家有点格格不入了。大家需求是这样的:
- 我的硬件,没有framebuffer(这种情况在内存较小的单片机平台很常见),但我也想用GuiLite画出漂亮流畅的效果
- 我需要一个可以滚动的UI效果,界面上的所有元素(窗口)可以一起上下左右滑动(例如:手机通信录)
- 我需要一个半透明的窗口,其中窗口的背景是半透明的,文字则是不透明的
- 我的硬件有2D加速功能,需要GuiLite给与支持
软件方案:
以上任何一个要求都足以推倒原有框架,因为太过底层,一旦修改就是对基础关键部分的手术。如何用最少的代码简单粗暴的解决问题,不伤执行效率,又不伤结构,是对软件架构的一个重大考验。我们的方案如下:
- 对于有经验的开发者来说,这已经是旧闻了,不仅被解决了,而且已经广泛应用在单片机方案中了;为什么旧事重提,就是因为它与需求2、3、4有很大的相似性,有必要一起做个总结:从c_surface派生一个类c_surface_no_fb,主要的绘制(渲染)接口没有变,只是重新实现draw_pixel, fill_rect(重载虚函数),让其通过条用外部的画点驱动函数,进行具体画点工作,具体见display.cpp::c_surface_no_fb
- 从c_surface派生一个类c_surface_scroll,扩大surface的高度,宽度,使其能够绘制所有的窗口元素;混动显示的过程,就是设置x,y坐标偏移量的过程,具体见:HelloScroll/UICode/scroll.h
- 从c_surface派生一个类c_surface_transparent,主要的绘制(渲染)接口没有变,但实现绘制过程中,分析颜色的alpha值,从而达到透明效果(重载虚函数),具体见:HelloTransparent/UICode/surface_transparent.h
- 从c_surface派生一个类c_surface_2d_acc,重新实现一下draw_pixel,fill_rect接口,在该接口里面使能硬件2D加速功能
优化需求:
- Linux版本的实例,看到界面的时间较慢,需要优化
- STM32版本,由于有调用malloc的地方,所以,在heap size不够的时候会死机,需要手动设置heap size;该操作有些麻烦,影响移植体验,建议优化
优化方案:
- 去掉一些不必要的同步操作,改为异步执行,保证界面第一时间呈现出来
- 对实例代码进行几行代码调整,用静态变量代替动态分配
开发者优秀作品展示:
(硬件配置:ESP32 + ST7789 + SPI屏幕),由于GIF的原因,画面不能像真实视频那么流畅,更好的效果,可以参看qq群文件。
感谢GuiLite开发群“李子木”同学的分享!虽然这个作品中能看到GuiLite实例的影子,但视觉效果和艺术设计上面,已经完全是暴捶原作的水准了。特别是对SPI屏幕的DMA优化,让画面超出想象的流畅,绝对是SPI屏幕的优化典范。
最后,希望能看到更多优秀的作品,我们会尽力为大家提供一些技术建议,为您的超神之路贡献绵薄之力。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 走向多云 关键还要看管理工具的
- 有了 HBase 为什么还要 Kudu?
- “无代码”来了,还要程序员干嘛?
- 转任管理岗位后,还要不要从事编码工作?
- MySQL不香吗,为什么还要有noSQL?
- 因为违法使用开源资源,他们不仅要道歉还要赔钱
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。