tui_lipan/widgets/text_area/
metrics.rs1use crate::core::component::ScrollbarVisibility;
2use crate::style::{Rect, Span};
3use crate::text::line_index::TextPosition;
4
5use super::virtual_text;
6
7#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
9pub enum TextAreaLineNumberMode {
10 #[default]
12 Absolute,
13 Relative,
16}
17
18#[allow(missing_docs)]
20#[derive(Clone, Debug, PartialEq, Eq)]
21pub struct TextAreaMetrics {
22 pub rect: Rect,
23 pub inner_rect: Rect,
24 pub content_rect: Rect,
25 pub gutter_width: u16,
26 pub scroll_offset: usize,
27 pub h_scroll_offset: usize,
28 pub visible_logical_lines: std::ops::Range<usize>,
29 pub visible_visual_rows: std::ops::Range<usize>,
30 pub total_logical_lines: usize,
31 pub total_visual_lines: usize,
32 pub scrollbars: ScrollbarVisibility,
33 pub cursor: Option<TextAreaCursorMetrics>,
34 pub editor_cursor: Option<TextAreaCursorMetrics>,
35}
36
37#[allow(missing_docs)]
39#[derive(Clone, Debug, PartialEq, Eq)]
40pub struct TextAreaCursorMetrics {
41 pub byte_offset: usize,
42 pub position: TextPosition,
45 pub rect: Rect,
46 pub visible: bool,
47}
48
49#[allow(missing_docs)]
55#[derive(Clone, Debug, PartialEq, Eq, Hash)]
56pub struct TextAreaVirtualText {
57 pub anchor: usize,
58 pub content: Vec<Span>,
59 pub placement: VirtualTextPlacement,
60 pub priority: u16,
61}
62
63impl TextAreaVirtualText {
64 pub fn new(
66 anchor: usize,
67 content: impl Into<Vec<Span>>,
68 placement: VirtualTextPlacement,
69 ) -> Self {
70 Self {
71 anchor,
72 content: virtual_text::sanitize_virtual_text_spans(content.into()),
73 placement,
74 priority: 0,
75 }
76 }
77
78 pub fn inline(anchor: usize, content: impl Into<Vec<Span>>) -> Self {
80 Self::new(anchor, content, VirtualTextPlacement::Inline)
81 }
82
83 pub fn eol(anchor: usize, content: impl Into<Vec<Span>>) -> Self {
85 Self::new(anchor, content, VirtualTextPlacement::Eol)
86 }
87
88 pub fn priority(mut self, priority: u16) -> Self {
90 self.priority = priority;
91 self
92 }
93}
94
95#[allow(missing_docs)]
97#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
98pub enum VirtualTextPlacement {
99 Inline,
100 Eol,
101}