1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// SPDX-License-Identifier: MIT
//! Scrolling crawl engines built on the motion primitives.
//!
//! A [`Crawl`] advances its internal scroll state each frame and, on
//! demand, paints the current frame into an externally-supplied
//! [`rlvgl_platform::blit::Surface`]. Concrete variants compose the
//! shared [`crate::motion::Direction`], [`crate::motion::MotionRate`],
//! [`crate::motion::JumboBuffer`], and [`crate::motion::BackgroundPattern`]
//! primitives to avoid reinventing per-variant.
//!
//! The only variant implemented in this module today is
//! [`TextCrawl`] plus its [`StarCrawl`] preset, but the trait surface
//! is designed so tickers, parallax scrollers, and audio scopes can
//! slot in without changes to the hosting [`CrawlWindow`] widget.
pub use ;
pub use ;
pub use CrawlWindow;
use EffectSink;
use crateDirection;
/// Snapshot of a crawl's scroll state. Returned by [`Crawl::state`]
/// so hosts can observe progress without peeking at engine internals.
/// Base contract every scrolling crawl engine implements.
///
/// The engine owns no pixel memory of its own — jumbo background,
/// text source, and any scratch buffers all cross the API boundary as
/// borrowed slices in the concrete variant's constructor. The host is
/// free to allocate those buffers from whatever pool is appropriate
/// (`Vec<u8>` on the sim, fixed SDRAM addresses on the STM32H747I-DISCO
/// target, and so on).
///
/// Per-frame rendering goes through [`rlvgl_platform::effect::EffectSink`]
/// so the same engine drives a synchronous CPU blitter, a
/// future-batched DMA2D sink, or an instrumentation sink that records
/// the op stream without touching pixels. This matches the sink/
/// backend split used by the platform-level [`rlvgl_platform::effect::Effect`]
/// trait; any [`Crawl`] impl is automatically a CPU-paintable
/// [`rlvgl_platform::effect::Effect`] via the blanket impl in
/// [`crate::motion::crawl::text`].