本帖最后由 superleo_2020 于 2023-7-7 16:59 编辑
与其他GUI一样,GUIX获得输入焦点后光标需要重绘反显,在LINUX下开发过程中发现光标反显出现花屏。
光标切换
控件持续光标时为:蓝色控,现需要切换到红色所在控件,正常情况下应该被重绘为蓝色,表示获取了光标。但实际上重绘花屏,如下图:
光标重绘区域花屏。
笔者在进一步调试发现,但凡涉及重绘都会花屏。
参考研究发现自STM32F429开始,一个类似GPU的外设开始加入到STM32的单片机中,ST称之为Chrom-ART Accelerator,也叫DMA2D(本文将使用此名称)。DMA2D可以在很多2D绘图的场合提供加速,完美嵌合了现代显卡中“GPU”的功能。STM32F429 DMA2D模块具有“行偏移功能”,该功能是因为矩形在内存中的地址不连续,所以在驱动中在填充完一行的数据后,需要跳过多少个像素(即图中黄色区域的长度)。
计算跳过的像素数量有一个简单的方法,即显示区域的宽度减去矩形的宽度即可。 绘图驱动内,需要跳过相关的像素,具体如下: 计算行偏移参数:
每复制一行需要偏移的像素内存。
进行了上述操作后,光标切换正常,整屏刷也正常了。
|