Este é um teleprompter implementado em Rust, usando a biblioteca ggez para renderização gráfica e entrada de eventos. Serve para quem precisa gravar vídeos e ler textos. É um trabalho em andamento, mas já funciona razoavelmente.
A rolagem é suave e contínua, linha a linha, com espaçamento configurável entre parágrafos e um lead-in inicial que mantém a tela vazia antes do início da fala. O layout do texto é prequebrado para caber na largura disponível, evitando reflow e “pulinhos” durante a leitura.
ggez
(no Linux, instale libasound2-dev libudev-dev pkg-config
).Clone o repositório e compile:
git clone https://github.com/cleuton/rustingcrab.git
cd code_samples/teleprompter
cargo build --release
O teleprompter lê um arquivo de texto e exibe cada parágrafo numerado.
cargo run --release -- --file "./soneto.txt" --lpm 40 --zoom 36
--file
(obrigatório): caminho para o arquivo .txt
contendo o texto.--lpm
: linhas por minuto (padrão: 60
).--zoom
: tamanho da fonte em pixels (padrão: 36
).Exemplo:
cargo run --release -- --file "soneto.txt" --lpm 40 --zoom 40
+
ou =
: Aumenta o zoom.-
: Diminui o zoom.R
: Reinicia.O código divide o texto em parágrafos, remove numeração pré-existente e re-numera.
Cada parágrafo é quebrado em linhas que cabem na largura da janela com base no tamanho da fonte e largura disponível.
Essas linhas são organizadas em um vetor único (stream_lines
) que inclui:
A rolagem é feita controlando o índice da linha corrente como um valor f32
, permitindo deslocamentos parciais e rolagem suave.