/
dgrigorev
/
veda
Обзор
Документация
Войти
/
dgrigorev
/
veda
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/input/mouse_processor.rs
43 строки
3 KB
Дмитрий Григорьев
Обновил иконки, добавил выделение и копирование+вставка
01 июн 2026, 21:54
01 июн 2026, 21:54
9b381a7
Код
Авторство
О чём код?
// ============================================================================ // input/mouse_processor.rs — обработка мыши: колесо, клики, выделение. // --------------------------------------------------------------------------- // Назначение модуля: // * перевести события мыши winit в действия терминала; // * прокрутка колесом -> сдвиг истории (scrollback); // * нажатие/протяжка/отпускание ЛКМ -> управление выделением текста. // // Сам модуль не знает о Terminal напрямую — он лишь вычисляет «намерение» // (MouseAction), а применяет его главный цикл. Это упрощает тестирование и // разделяет ответственность. // ============================================================================ use winit::event::MouseScrollDelta; /// Действие, к которому приводит событие мыши. #[derive(Debug, Clone, Copy)] pub enum MouseAction { /// Прокрутить историю на N строк (положительное — назад/вверх). Scroll(i32), // Примечание: выделение (нажатие/протяжка/отпускание ЛКМ) обрабатывается // напрямую в главном цикле (main.rs), т.к. требует геометрии панелей и // доступа к буферу обмена. Поэтому здесь остался только разбор колеса. } /// Сколько строк прокручивать за один «щелчок» колеса в строчном режиме. const LINE_SCROLL_STEP: i32 = 3; /// Преобразовать дельту колеса в число строк прокрутки. /// /// * `LineDelta` — «щелчки» колеса: умножаем на шаг; /// * `PixelDelta` — точная прокрутка (тачпад): делим на высоту ячейки. pub fn wheel_to_scroll(delta: MouseScrollDelta, cell_height: f32) -> MouseAction { let lines = match delta { MouseScrollDelta::LineDelta(_x, y) => (y * LINE_SCROLL_STEP as f32).round() as i32, MouseScrollDelta::PixelDelta(pos) => { let h = cell_height.max(1.0); (pos.y as f32 / h).round() as i32 } }; // Вверх (y > 0) — назад в историю (положительная дельта прокрутки). MouseAction::Scroll(lines) }