zlgopen / awtk-linux-fb

awtk port for linux framebuffer
108 stars 49 forks source link

拖动鼠标,残留不刷新 #24

Open WeSrc-Yin opened 4 years ago

WeSrc-Yin commented 4 years ago

问题描述: ==>我的软件,界面大小1280*720。界面就一排按钮放在底部(0,660,1280,60),其他地方(0 , 0 , 1280 , 660)是完全透明的用于显示摄像头的视频。在这个区域(0 , 0 , 1280 , 660)上移动鼠标,鼠标图片不刷新,是怎么回事呢?在(0,660,1280,60)区域移动鼠标是会刷新的。如果将背景设置成不透明,那么整个界面移动鼠标不会残留(背景设置成不透明的话就无法显示摄像头送过来的video了)。(ARM-Linux平台)

xianjimli commented 4 years ago

不启用脏矩形试试。

WeSrc-Yin commented 4 years ago

怎么关闭脏矩形算法?

WeSrc-Yin commented 4 years ago

我把lcd->support_dirty_rect赋值的地方都改成了FALSE,但问题依然存在,应该不是这么关脏矩形的吧,还请指点,多谢! lcd->support_dirty_rect = FALSE;//TRUE;

xianjimli commented 4 years ago

是这样关闭的。贴个图片看看。

WeSrc-Yin commented 4 years ago

IMG_7017

鼠标的轨迹颜色还不一样,鼠标在不同的地方颜色也不一样

xianjimli commented 4 years ago

有点奇怪,看不出什么问题。

WeSrc-Yin commented 4 years ago

上面这张图片是跑的demo程序,你们那边应该也能复制到现象的,要移植在arm-linux平台上,显示的大小是1280 720,电脑上是没有这个问题的,把显示也修改成1280 720;因为电脑上这个图片周边没有透明,填充了白色,而上面我移植到linux平台,图片周边是透明的,还可以看到下面的的UI,我感觉是我们的透明在linux平台实现会有问题。

WeSrc-Yin commented 4 years ago

slide_left 这是电脑上的显示效果,冲锋舟图片周边是白色的,看不到父亲层UI

tangMans commented 4 years ago

(1)我这试了CleanAir-Demo正常的

(2)能否在你的开发板跑一下https://github.com/zlgopen/awtk-examples目录下其中一个示例,如CleanAir-Demo,需要做下面修改才能启动鼠标: 【1】在CleanAir-Demo\src\app_main.c文件的tk_run();之前添加 window_manager_set_cursor(window_manager(), "cursor");

【2】将awtk\demos\assets\raw\images\x1\cusor.png复制到awtk-examples/CleanAir-Demo/res_800_480/assets/raw/images/xx和awtk-examples/CleanAir-Demo/res_480_272/assets/raw/images/xx目录下

[3]然后重新生成资源:sh assets_gen.sh

[4]然后在重新编译代码:scons

WeSrc-Yin commented 4 years ago

@tangMans 多谢回复,将CleanAir-Demo的背景改成透明的就不正常了,即修改:/awtk-examples/CleanAir-Demo/res_800_480/assets/raw/styles/default.xml 为如下,然后生成新的default.bin :

. . .

效果如图,跑起demo后,点击“记录”,将鼠标移动到最上面,拖动鼠标,残留不刷新。也就是使用了背景透明的地方就会残留,其他地方因为贴了其他不透明图片或者填充了不透明颜色,就不会残留。(照片上传不了,我再另起一条回复上传照片)

WeSrc-Yin commented 4 years ago

IMG_7025

WeSrc-Yin commented 4 years ago

问题暂时解决了,是在sync时清一次,然后在native_window_end_frame后再paint_cursor,但可能因为又paint了一次,所以如果快速移动鼠标会有一点点拖影,不过不严重,暂时这么解。

pz642056885 commented 4 years ago

我也出现了这样的问题,问下是怎么解决的

sohide commented 4 years ago

这个问题应该是透明部分没有算入脏矩形刷新区域的问题,可以试试设置一个高亮背景色

pz642056885 commented 4 years ago

试过了,没有效果

chensheng-GitHub-2019 commented 4 years ago

我也碰到这个问题,试过很多方法,结论:脏矩形算法没有将透明区域计算在刷新区域内。导致透明区域无论是控件,输入法,还是箭头都无法被刷新,会一直残留,直到残留区域出现非透明rect才会刷新。下面上图

chensheng-GitHub-2019 commented 4 years ago

https://github.com/chensheng-GitHub-2019/desktop-tutorial/blob/master/20191206_162752.jpg

xianjimli commented 4 years ago

给window manager的style指定一个背景颜色。

duduathz commented 4 years ago

鼠标在UI上滑动时可以看到UI有响应,但鼠标看不见,请问可能是何原因引起? 谢谢!

WeSrc-Yin commented 4 years ago

鼠标在UI上滑动时可以看到UI有响应,但鼠标看不见,请问可能是何原因引起? 谢谢! 没有启用鼠标图片吧,启用鼠标图片试下

WeSrc-Yin commented 4 years ago

给window manager的style指定一个背景颜色。

给windo_manager的shyle指定一个背景色就看不到父控件了,只能看到window_manager指定的颜色,这跟设计初衷相背离了。

xianjimli commented 4 years ago

用mutable image 显示视频吧。