From 2971d699423e2f28f2686b098cb5dbf9a705038e Mon Sep 17 00:00:00 2001 From: Richard Qin Date: Mon, 26 Oct 2026 20:38:32 +0800 Subject: feat(tui): add object focus traversal and link activation --- src/tui/layout.hh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/tui/layout.hh') diff --git a/src/tui/layout.hh b/src/tui/layout.hh index 7e02e76..f5db28c 100644 --- a/src/tui/layout.hh +++ b/src/tui/layout.hh @@ -48,6 +48,12 @@ struct LayoutHit std::optional target {}; }; +struct FocusStep +{ + DisplayPosition position {}; + bool wrapped { false }; +}; + struct ScrollWindow { BlockId block {}; @@ -118,6 +124,7 @@ public: DisplayPosition line_edge( const DisplayPosition& position, bool end ) const; DocumentRange unit( const DisplayPosition& position ) const; std::optional target( const DisplayPosition& position ) const; + std::optional focus( const DisplayPosition& position, bool backward ) const; std::optional cursor_cell( const DisplayPosition& position ) const; std::vector reveal( const DisplayPosition& position ) const; std::vector pan( const DisplayPosition& position, int direction ) const; @@ -141,9 +148,17 @@ private: const LayoutGlyph& cursor_glyph( const DisplayPosition& position ) const; DisplayPosition stop( std::size_t index ) const; + struct FocusEntry + { + HitTarget target {}; + std::size_t stop { 0 }; + }; + int columns_; LayoutData data_; std::vector stops_ {}; + // First reading stop per enabled object, independent of viewport clipping. + std::vector focus_ {}; }; } // namespace ricochet::tui::detail -- cgit v1.2.3