mdview2: вынести md_key() в mdview2_md.c (симметрия с raw_key)
MD-навигация после загрузки (стрелки/PgUp/PgDn/Home/End/←/→) вынесена из switch в main() в md_key(scan) — peer к raw_key(): возвращает 1/0, сама перерисовывает область+статус. main() теперь симметричен для обоих видов: F-клавиши (F1/F8/F10, для RAW ещё F2/F3) разбираются в цикле, навигация делегируется md_key()/raw_key(). HPAN_STEP вынесен в mdview2.h (был продублирован в ядре и raw). load_key() (навигация во время прогрессивной загрузки, bounded по drawable_lines) остаётся в ядре — у неё нет RAW-аналога. Поведение сохранено (F1 теперь без лишнего render_updated_status — show_help и так перерисовывает всё). Размер: exe 28115→28173 (+58 Б — стоимость границы функции, как у raw_key). Сборка чистая. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -246,3 +246,28 @@ void scroll_h(int8_t delta)
|
||||
if (new_vx != old_vx)
|
||||
draw_viewport_from_cache();
|
||||
}
|
||||
|
||||
/* ---- навигация MD после загрузки (peer к raw_key) ---------------- */
|
||||
|
||||
/* Обрабатывает навигационную клавишу в MD-режиме (вызывается из главного
|
||||
* цикла). Сама перерисовывает область/статус. Возврат: 1 — обработано,
|
||||
* 0 — не наша клавиша (F1/F8/F10 разбирает main). */
|
||||
uint8_t md_key(uint8_t scan)
|
||||
{
|
||||
switch (scan) {
|
||||
case KEY_UP: scroll_up(1); break;
|
||||
case KEY_DOWN: scroll_down(1); break;
|
||||
case KEY_LEFT: scroll_h(-(int8_t)HPAN_STEP); break;
|
||||
case KEY_RIGHT: scroll_h(+(int8_t)HPAN_STEP); break;
|
||||
case KEY_PGUP: scroll_up(VIEW_H); break;
|
||||
case KEY_PGDN: scroll_down(VIEW_H); break;
|
||||
case KEY_HOME: top_line = 0; viewport_x = 0;
|
||||
draw_viewport_from_cache(); break;
|
||||
case KEY_END: top_line = (n_lines > VIEW_H) ? (uint16_t)(n_lines - VIEW_H) : 0;
|
||||
viewport_x = 0;
|
||||
draw_viewport_from_cache(); break;
|
||||
default: return 0; /* не наша клавиша */
|
||||
}
|
||||
render_updated_status();
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user