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
54KB
909 行代码(不含注释)
libscroll [WIP]
为任何视图添加平滑、响应式滚动的即插即用解决方案。接受单个输入事件,输出简单的平移量。
主库接口在 src/lib.rs 中实现
使用方法
- 使用 Scrollview::new() 分配滚动视图,返回的滚动视图是应用所有后续方向的对象(通过方法调用)
- 使用 set_geometry 设置滚动视图内容和视口当前时间的尺寸
- 根据当前的 FPS 或其他指标使用 set_avg_frametime 允许位置预测。如果此信息不可用,则默认为 0ms,但将引入额外的可感知延迟
- 如果渲染和事件循环是分开的,在这里分割它们。将滚动视图放在 Arc<Mutex<>> 中以确保原子访问。注意:滚动视图可能在将来变得原子和内部可变。此更改不应改变向后兼容性,但应提高此用例的可用性
在事件循环中
- 从平台驱动程序/提供程序(SDL、Libinput、Wayland 事件提供程序)获取任何挂起的事件,并使用 push_event() 将它们添加到内部队列。
- 返回到 1
在渲染循环中
- 调用 set_next_frame_predict() 来设置从现在起内容渲染到屏幕的大致时间,或者 0 如果不确定(以增加延迟为代价)
- 调用 step_frame() 来处理任何新放置的事件,并推进任何正在进行的动画一个时间步长
- 如果 animating() 为 true,则使用 get_position_absolute() 或 get_position_relative() 来查看视口的位置,或者移动多少。这些调用是幂等的和非破坏性的。在 step_frame() 后的任何时候都可以方便地调用它们
这就是全部!其他所有事情都在幕后处理
依赖关系
~2MB
~32K SLoC