V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cbais7890
V2EX  ›  分享创造

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

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

    前情提要

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

    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   ·   实用小工具   ·   5179 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:47 · PVG 11:47 · LAX 19:47 · JFK 22:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.