diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-10-26 20:38:32 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-10-26 20:38:32 +0800 |
| commit | 2971d699423e2f28f2686b098cb5dbf9a705038e (patch) | |
| tree | 43abe71fbedd4a90527c26c68fcba73ab71f6519 /src/tui/layout.hh | |
| parent | cb1f404cc6b8b9dce135efd26fa32dc0d6fd79c4 (diff) | |
| download | rwebbrowser-2971d699423e2f28f2686b098cb5dbf9a705038e.tar.gz rwebbrowser-2971d699423e2f28f2686b098cb5dbf9a705038e.tar.xz | |
feat(tui): add object focus traversal and link activation
Diffstat (limited to 'src/tui/layout.hh')
| -rw-r--r-- | src/tui/layout.hh | 15 |
1 files changed, 15 insertions, 0 deletions
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<HitTarget> 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<HitTarget> target( const DisplayPosition& position ) const; + std::optional<FocusStep> focus( const DisplayPosition& position, bool backward ) const; std::optional<LayoutPoint> cursor_cell( const DisplayPosition& position ) const; std::vector<HorizontalScroll> reveal( const DisplayPosition& position ) const; std::vector<HorizontalScroll> 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<std::size_t> stops_ {}; + // First reading stop per enabled object, independent of viewport clipping. + std::vector<FocusEntry> focus_ {}; }; } // namespace ricochet::tui::detail |
