#events #scroll #pan #responsive #amount #scrollview

nightly libscroll

滚动视图事件处理库

12 个版本

0.2.4 2020年4月27日
0.2.3 2020年4月27日
0.1.6 2020年2月13日
0.1.4 2020年1月27日
0.1.0 2019年12月30日

#5 in #responsive

每月 50 次下载
用于 libscroll-re

MIT 许可证

54KB
909 行代码(不含注释)

libscroll [WIP]

为任何视图添加平滑、响应式滚动的即插即用解决方案。接受单个输入事件,输出简单的平移量。

主库接口在 src/lib.rs 中实现

使用方法

  1. 使用 Scrollview::new() 分配滚动视图,返回的滚动视图是应用所有后续方向的对象(通过方法调用)
  2. 使用 set_geometry 设置滚动视图内容和视口当前时间的尺寸
  3. 根据当前的 FPS 或其他指标使用 set_avg_frametime 允许位置预测。如果此信息不可用,则默认为 0ms,但将引入额外的可感知延迟
  4. 如果渲染和事件循环是分开的,在这里分割它们。将滚动视图放在 Arc<Mutex<>> 中以确保原子访问。注意:滚动视图可能在将来变得原子和内部可变。此更改不应改变向后兼容性,但应提高此用例的可用性

在事件循环中

  1. 从平台驱动程序/提供程序(SDL、Libinput、Wayland 事件提供程序)获取任何挂起的事件,并使用 push_event() 将它们添加到内部队列。
  2. 返回到 1

在渲染循环中

  1. 调用 set_next_frame_predict() 来设置从现在起内容渲染到屏幕的大致时间,或者 0 如果不确定(以增加延迟为代价)
  2. 调用 step_frame() 来处理任何新放置的事件,并推进任何正在进行的动画一个时间步长
  3. 如果 animating() 为 true,则使用 get_position_absolute() 或 get_position_relative() 来查看视口的位置,或者移动多少。这些调用是幂等的和非破坏性的。在 step_frame() 后的任何时候都可以方便地调用它们

这就是全部!其他所有事情都在幕后处理

依赖关系

~2MB
~32K SLoC