Mos - 一个平滑鼠标滚轮效果的小工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cbais7890
V2EX    分享创造

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

  •  3
     
  •   cbais7890 2017-01-27 20:55:09 +08:00 11021 次点击
    这是一个创建于 3260 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前情提要

    上次的帖子: 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

    52 条回复    2018-07-14 16:57:06 +08:00
    Yien
        1
    Yien  
       2017-01-27 21:12:36 +08:00 via iPhone
    厉害!感谢!请问对一般 USB 鼠标有效果吗?
    cbais7890
        2
    cbais7890  
    OP
       2017-01-27 21:21:56 +08:00   1
    @Yien 理论上是都有效果的...
    不排除部分鼠标会有问题, 不过我手上就几个罗技鼠标测过了都没啥问题
    ifoolish
        3
    ifoolish  
       2017-01-27 21:35:10 +08:00 via iPhone
    请问这玩意费不费 CPU ?
    cbais7890
        4
    cbais7890  
    OP
       2017-01-27 21:47:54 +08:00   1
    @ifoolish 基本不费, 我自己测试比 Smoothscroll 占用要低
    cctrv
        5
    cctrv  
       2017-01-27 22:24:07 +08:00 via iPhone
    看很害的子!回去下一下。
    Jface
        6
    Jface  
       2017-01-27 22:31:25 +08:00 via iPhone
    正需要呢 回头试试! 新年快乐!
    fqxufo
        7
    fqxufo  
       2017-01-28 00:20:47 +08:00
    效果非常好,如果加入分应用禁用和开机自启功能就更好了
    cbais7890
        8
    cbais7890  
    OP
       2017-01-28 01:05:00 +08:00 via iPhone
    @fqxufo 开机自启目前可以手动在系统设置里自己加一下就好,以后加上

    分应用启用的功能还得有空研究下,目前没找到啥好方法
    uzumaki
        9
    uzumaki  
       2017-01-28 02:22:01 +08:00 via Android
    挺好的 谢谢老板
    PoloLee
        10
    PoloLee  
       2017-01-28 04:27:14 +08:00
    用了下,超赞!已卸载 scroll reverser
    dreammes
        11
    dreammes  
       2017-01-28 09:21:12 +08:00 via iPhone
    美工不错
    maplerecall
        12
    maplerecall  
       2017-01-28 10:05:32 +08:00 via Android
    还是 mx master 滚动网页的感觉好,像素基本的精确滚动,和 magic mouse 的感觉差不多
    cbais7890
        13
    cbais7890  
    OP
       2017-01-28 10:42:59 +08:00 via iPad
    @maplerecall 我自己就用的 MM ,我感觉他驱动自带那个效果…怪怪的
    dcalsky
        14
    dcalsky  
       2017-01-28 11:15:29 +08:00
    昨天玩 mc ,滚轮会有抽搐的问题,望修复
    cbais7890
        15
    cbais7890  
    OP
       2017-01-28 11:25:44 +08:00
    @dcalsky 如何个抽搐法?
    Tneciv
        16
    Tneciv  
       2017-01-28 12:24:36 +08:00
    不错 谢谢老板
    dcalsky
        17
    dcalsky  
       2017-01-28 14:09:07 +08:00
    @cbais7890 滚一下,变成滚 N 下
    cbais7890
        18
    cbais7890  
    OP
       2017-01-28 14:33:43 +08:00
    @dcalsky #17 你试试用触控板滚动一下会不会触发同样的效果?
    dcalsky
        19
    dcalsky  
       2017-01-29 10:44:18 +08:00 via Android
    @cbais7890 不会啊,我没那么不严谨。把你当的软件关了就可以了。
    Balthild
        20
    Balthild  
       2017-01-30 02:19:24 +08:00
    很棒!不过有一些不足,一是不能针对某些应用禁用;二是滚动加速度仍然存在,导致滚起来感觉很怪。
    cbais7890
        21
    cbais7890  
    OP
       2017-01-30 22:14:33 +08:00
    @Balthild 加速度算是特性之一吧...主要就是来模拟触控板的手感
    以后有空会做个可以调节加速度曲线的 GUI, 这样就可以随意调节了
    tiancool
        22
    tiancool  
       2017-01-31 10:04:04 +08:00
    影响了触控板的滑动,不知道是什么问题
    cbais7890
        23
    cbais7890  
    OP
       2017-01-31 20:58:17 +08:00
    @tiancool 有一部分人反应会误判触控板, 应该是部分机型 /系统的 CGEvent 拿来的数据有些差异, 这个如果我如果没机器没数据测试也不太好解决...
    cbais7890
        24
    cbais7890  
    OP
       2017-02-01 23:20:28 +08:00
    @fqxufo
    加了分应用禁用的功能, 有心情的话可以试试效果
    hackpro
        25
    hackpro  
       2017-02-03 00:20:43 +08:00
    太好啦 加到 homebrew 里面去吧
    whitegerry
        26
    whitegerry  
       2017-02-03 10:51:28 +08:00
    如果鼠标滚轮滚动速度比较慢的话不管滚多少下,页面都不会滚动,什么原因?
    aksoft
        27
    aksoft  
       2017-02-04 19:56:57 +08:00 via iPhone
    不错 建议你联系一下鼠标手势那个作者 可以放一起....
    cbais7890
        28
    cbais7890  
    OP
       2017-02-05 22:11:07 +08:00
    @whitegerry 这个不太清楚, 得拿到数据才能判断
    @aksoft 感觉还是有难度的
    cbais7890
        29
    cbais7890  
    OP
       2017-02-05 22:12:32 +08:00
    @hackpro 我个人理解 homebrew 貌似都是发布 Terminal 上的应用, 这类应用也能往上发吗?
    hackpro
        30
    hackpro  
       2017-02-05 23:19:47 +08:00
    r#29 @cbais7890 brew vs brew cask
    whitegerry
        31
    whitegerry  
       2017-02-06 14:37:19 +08:00
    @cbais7890 需要什么数据?我是逻辑鼠标,滚轮滚动是一格一格那种
    otakustay
        32
    otakustay  
       2017-02-06 15:58:42 +08:00
    @cbais7890 放 brew cask 上就行
    aksoft
        33
    aksoft  
       2017-02-06 17:35:08 +08:00
    @cbais7890 可以提一下啊,这可是造福人类
    otakustay
        34
    otakustay  
       2017-02-08 13:23:41 +08:00
    @cbais7890 我看了一下你的安装包,建议做一些修改以便和 brew cask 整合:

    1. 安装包下载 URL 中去掉 build.xxxx 这部分,这样可以将 version 作为一个占位符生成 URL
    2. 安装包建议是个标准的 dmg ,内部包含 app

    提交到 brew cask 比较简单,我也可以帮你做了
    cbais7890
        35
    cbais7890  
    OP
       2017-02-08 18:50:43 +08:00
    @aksoft 好的, 我研究一下
    @otakustay 谢谢您的好意, 不过我想顺便学习一遍打包 DMG 和提交到 brewcask 的流程, 正好自己来试试.
    cbais7890
        36
    cbais7890  
    OP
       2017-02-08 18:52:45 +08:00
    @whitegerry 最简单其实就是关掉平滑滚动, 然后打开滚动监控的界面, 然后重复一下你滚动时候有问题的动作, 录个屏看看一下鼠标滚轮的事件是否有什么异常

    其实那个滚动监控的界面一开始我就是用来 debug 用的哈哈
    casioyan
        37
    casioyan  
       2017-02-08 23:31:16 +08:00
    非常版,感谢!!!
    lkytal
        38
    lkytal  
       2017-02-08 23:50:45 +08:00
    能否赐教用的是什么平滑滚动算法呢?
    xlvecle
        39
    xlvecle  
       2017-02-09 00:10:24 +08:00
    楼主。。。我的双飞燕装了之后没法滚动了。。
    cbais7890
        40
    cbais7890  
    OP
       2017-02-09 08:34:57 +08:00
    @xlvecle #39 系统版本如果不是 10.12 的话可能会有些兼容性问题
    xlvecle
        41
    xlvecle  
       2017-02-09 11:23:49 +08:00
    @cbais7890 可以考虑支持 10.11
    cbais7890
        42
    cbais7890  
    OP
       2017-02-09 12:47:30 +08:00
    @xlvecle #41 正在看呢, 之前没测试环境. 用 PD 装了个 10.11 还得下个 Xcode, 苦的我...
    cbais7890
        43
    cbais7890  
    OP
       2017-02-09 19:41:13 +08:00
    @lkytal 看代码吧...一句半句也讲不清楚
    whitegerry
        44
    whitegerry  
       2017-02-10 17:15:03 +08:00
    @cbais7890 ,滚动比较慢的时候纵坐标 0 附近大概±6 之间会有连续的点,但页面不会滚动,稍微滚快一点超过±6 左右页面开始正常滚动
    cbais7890
        45
    cbais7890  
    OP
       2017-02-11 12:58:43 +08:00 via iPhone
    @whitegerry 昨晚发了个新版本,你可以试试有没有解决你的问题
    Mashiro
        46
    Mashiro  
       2017-02-11 19:34:00 +08:00
    首先感谢楼主带来了这么优秀的一款应用!
    然后能否支持一下 10.10 ?
    whitegerry
        47
    whitegerry  
       2017-02-13 10:34:58 +08:00
    @cbais7890 很速度,这问题解决了,多谢。 cpu 占用观察下来看 windowserver 进程跟触摸板双指滚动和 smoothscroll 其实差不多。另外添加了 launchpad.app 到忽略列表里不起作用?
    cbais7890
        48
    cbais7890  
    OP
       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
        49
    whitegerry  
       2017-02-13 23:46:11 +08:00 via iPhone
    @cbais7890 mos 本身的 cpu 占用很低可以忽略,我指的是 windowserver 进程,触摸板或者 mos 或者 smoothscroll 还有个 smartscroll 滚动的时候 windowserver 的 cpu 占用差不多。 launchpad 翻页我平时也用的滚轮, smartscroll 里面添加排除是 ok 的,不过这也不算什么问题。
    cbais7890
        50
    cbais7890  
    OP
       2017-02-14 00:02:30 +08:00
    @whitegerry WindowServer 是 macOS 拿来绘制系统 GUI 的进程, 基本上这个跟用什么软件什么算法无关, 而只跟最后需要呈现在屏幕上的结果有关, 换句话说假定一个持续 3 秒的滚动事件触发的页面滚动, 你不管用什么方式触发, 经过什么软件处理, 最后的占用都是一样的.
    whitegerry
        51
    whitegerry  
       2017-02-14 09:53:42 +08:00
    @cbais7890 嗯,之前我没关注过软件本身的 cpu 占用,因为占用都不高,基本没在 istatmenus 的监控界面出现过,所以就只关心 WindowServer 了。刚测了下, smooth scroll 的 cpu 占用最高能是 mos 的 6 倍多。
    leyle
        52
    leyle  
       2018-07-14 16:57:06 +08:00
    感谢楼主,好用。

    但是冷启动,就是鼠标开始滚动时,页面的响应总感觉有一点点的延迟。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2336 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 10:38 PVG 18:38 LAX 02:38 JFK 05:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86