Mos - 一个平滑鼠标滚轮效果的小工具

2017-01-27 20:55:09 +08:00
 cbais7890

前情提要

上次的帖子: https://www.v2ex.com/t/335738

因为嫌 Smoothscroll 收费贵, 所以就自己学着写了一个...

目前效果比 LogitechOption 自带的平滑效果好的多, 不过与 LogitechOption 里面的平滑效果一起开的话会有冲突, 罗技用户记得把 LogitechOptions 里面的那个平滑效果关掉.

目前仅在 10.12.2 和 10.12.3 上测试过. 对, 就是这两周的版本...

说实话调界面花的时间比调算法多, 因为我数学实在是渣, 想不出啥好的平滑算法, 个人感觉这个实现的方法很蠢, 但是出来的效果还算能接受 ...

基本思路

  1. 从系统的 CGEvent 截取鼠标滚轮事件
  2. 滚轮事件触发 CVDisplayLink 定时器, 然后在一定的时间内连续发送插值后的鼠标滚动事件
  3. 到事件后把 CVDisplayLink 停掉, 等下次滚轮事件继续触发

GIthub 地址

https://github.com/Caldis/Mos

界面截图

之前的录屏

https://www.youtube.com/watch?v=oJQLkr2-MQ0

10216 次点击
所在节点    分享创造
52 条回复
xlvecle
2017-02-09 11:23:49 +08:00
@cbais7890 可以考虑支持 10.11
cbais7890
2017-02-09 12:47:30 +08:00
@xlvecle #41 正在看呢, 之前没测试环境. 用 PD 装了个 10.11 还得下个 Xcode, 苦的我...
cbais7890
2017-02-09 19:41:13 +08:00
@lkytal 看代码吧...一句半句也讲不清楚
whitegerry
2017-02-10 17:15:03 +08:00
@cbais7890 ,滚动比较慢的时候纵坐标 0 附近大概±6 之间会有连续的点,但页面不会滚动,稍微滚快一点超过±6 左右页面开始正常滚动
cbais7890
2017-02-11 12:58:43 +08:00
@whitegerry 昨晚发了个新版本,你可以试试有没有解决你的问题
Mashiro
2017-02-11 19:34:00 +08:00
首先感谢楼主带来了这么优秀的一款应用!
然后能否支持一下 10.10 ?😂
whitegerry
2017-02-13 10:34:58 +08:00
@cbais7890 很速度,这问题解决了,多谢。 cpu 占用观察下来看 windowserver 进程跟触摸板双指滚动和 smoothscroll 其实差不多。另外添加了 launchpad.app 到忽略列表里不起作用?
cbais7890
2017-02-13 23:09:19 +08:00
@whitegerry
双指触摸时候的系统占用是和 SmoothScroll 差不多, 都是在 1-2%之间, 因为有一个基本的判断逻辑在那里, 目的是为了要区分触摸板事件还是鼠标滚轮事件, 如果是滚轮事件, 才要做插值的特殊处理
SmoothScroll 对应鼠标滚轮的处理算法对资源占用是比较高的, 视滚动速度不同系统占用大概会在 5-10%左右波动, Mos 在插值运算的时候对于资源的占用在我的机器上基本不会超过 2%. 这点各有千秋吧, 他的算法响应性比较好, 但是占用也高.
launchpad.app 是一个特殊的应用, 只是用于触发系统的一个 launchpad 的服务, 你用四指抓合同样也能触发 launchpad, 换句话说 launchpad.app 本身就只是个快捷方式罢了, 对于截获 launchpad 的事件应该需要特殊处理. 不过为什么你需要忽略 launchpad 的事件呢, 我感觉在 launchpad 里面一般用不到鼠标滚轮呀?
whitegerry
2017-02-13 23:46:11 +08:00
@cbais7890 mos 本身的 cpu 占用很低可以忽略,我指的是 windowserver 进程,触摸板或者 mos 或者 smoothscroll 还有个 smartscroll 滚动的时候 windowserver 的 cpu 占用差不多。 launchpad 翻页我平时也用的滚轮, smartscroll 里面添加排除是 ok 的,不过这也不算什么问题。
cbais7890
2017-02-14 00:02:30 +08:00
@whitegerry WindowServer 是 macOS 拿来绘制系统 GUI 的进程, 基本上这个跟用什么软件什么算法无关, 而只跟最后需要呈现在屏幕上的结果有关, 换句话说假定一个持续 3 秒的滚动事件触发的页面滚动, 你不管用什么方式触发, 经过什么软件处理, 最后的占用都是一样的.
whitegerry
2017-02-14 09:53:42 +08:00
@cbais7890 嗯,之前我没关注过软件本身的 cpu 占用,因为占用都不高,基本没在 istatmenus 的监控界面出现过,所以就只关心 WindowServer 了。刚测了下, smooth scroll 的 cpu 占用最高能是 mos 的 6 倍多。
leyle
2018-07-14 16:57:06 +08:00
感谢楼主,好用。

但是冷启动,就是鼠标开始滚动时,页面的响应总感觉有一点点的延迟。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/337190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX