【需求要求】

为了增加指向遥控器的操作丰富化、所以适配不同操作的光标样式

1、默认光标

2、点击效果

3、触摸滑动效果

【问题现象】

遥控器在使用过程中,发现默认光标和点击光标显示光滑,但触摸滑动光标显示有锯齿

【分析问题】

1、怀疑光标图片资源问题【排除】

结论:图片资源使用的SVG图,无论缩小放大多少倍,边缘都保持绝对清晰,不会模糊或出现像素点

2、怀疑绘制光标样式时,未开启抗锯齿功能【排除】

结论:排查代码发现绘制时,已开启抗锯齿功能

3、由于触摸滑动光标是长方形,可能是因为绘制时宽高比不正确,图片被压缩,导致出现锯齿【问题所在】

结论:通过在代码中添加日志发现,绘制触摸滑动光标时,svg转为位图进行绘制时,宽和高为60*60,这和触摸滑动光标的宽高比肯定对不上

路径:/foundation/multimodalinput/input/service/window_manager/src/pointer_drawing_manager.cpp

【解决问题】

1、针对宽高比不正确的问题进行修改

原代码中的默认:SVG转化为位图后的宽和高是60*60

修改后的代码:

      (1)先读取原始SVG图的宽和高,并计算宽高比

      (2)如果宽高比 Ratio 大于1.0f,  高度保持:60,修改宽度为:60 * Ratio;【左右滑动光标】

               如果宽高比 Ratio 小于1.0f,  宽度保持:60,修改高度为:60 / Ratio;【上下滑动光标】

               如果宽高比 Ratio 等于1.0f,  宽度保持:60,高度为:60;【默认和点击图标】

2、宽高比修改完成后验证,锯齿已没有,但发现光标会出现显示不全的问题

分析为当前的画布尺寸太小,无法完整显示当前绘制的光标

原代码:默认的画布canvas的尺寸为64*64

修改后的代码:

(1)修改绘制的光标尺寸为48*48,48*63等,但是光标会变小一些【未采用】

(2)修改画布canvas的尺寸为128*128,最终问题解决。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐