爱意满满的作品展示区。
cbais7890

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

  •  3
     
  •   cbais7890 · Jan 27, 2017 · 11908 views
    This topic created in 3570 days ago, the information mentioned may be changed or developed.

    前情提要

    上次的帖子: 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 replies  •  2018-07-14 16:57:06 +08:00
    Yien
    Yien
    Jan 27, 2017 via iPhone
    1
    厉害!感谢!请问对一般 USB 鼠标有效果吗?
    cbais7890
    cbais7890
    OP
    Jan 27, 2017❤️1
    2
    @Yien 理论上是都有效果的...
    不排除部分鼠标会有问题, 不过我手上就几个罗技鼠标测过了都没啥问题
    ifoolish
    ifoolish
    Jan 27, 2017 via iPhone
    3
    请问这玩意费不费 CPU ?
    cbais7890
    cbais7890
    OP
    Jan 27, 2017❤️1
    4
    @ifoolish 基本不费, 我自己测试比 Smoothscroll 占用要低
    cctrv
    cctrv
    Jan 27, 2017 via iPhone
    5
    看視頻很厲害的樣子!回去下載體驗一下。
    Jface
    Jface
    Jan 27, 2017 via iPhone
    6
    正需要呢 回头试试! 新年快乐!
    fqxufo
    fqxufo
    Jan 28, 2017
    7
    效果非常好,如果加入分应用禁用和开机自启功能就更好了
    cbais7890
    cbais7890
    OP
    Jan 28, 2017 via iPhone
    8
    @fqxufo 开机自启目前可以手动在系统设置里自己加一下就好,以后加上

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

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

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

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

    但是冷启动,就是鼠标开始滚动时,页面的响应总感觉有一点点的延迟。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2071 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 170ms · UTC 14:46 · PVG 22:46 · LAX 06:46 · JFK 09:46
    ♥ Do have faith in what you're doing.