summaryrefslogtreecommitdiffstats
path: root/tui-react/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tui-react/src/lib.rs')
-rw-r--r--tui-react/src/lib.rs156
1 files changed, 0 insertions, 156 deletions
diff --git a/tui-react/src/lib.rs b/tui-react/src/lib.rs
deleted file mode 100644
index 9333fb5..0000000
--- a/tui-react/src/lib.rs
+++ /dev/null
@@ -1,156 +0,0 @@
-#![forbid(unsafe_code)]
-
-mod list;
-mod terminal;
-
-pub use list::*;
-pub use terminal::*;
-
-use std::iter::repeat;
-use tui::{self, buffer::Buffer, layout::Rect, style::Color, style::Style};
-use unicode_segmentation::UnicodeSegmentation;
-use unicode_width::UnicodeWidthStr;
-
-pub fn fill_background_to_right(mut s: String, entire_width: u16) -> String {
- match (s.len(), entire_width as usize) {
- (x, y) if x >= y => s,
- (x, y) => {
- s.extend(repeat(' ').take(y - x));
- s
- }
- }
-}
-
-/// Helper method to quickly set the background of all cells inside the specified area.
-pub fn fill_background(area: Rect, buf: &mut Buffer, color: Color) {
- for y in area.top()..area.bottom() {
- for x in area.left()..area.right() {
- buf.get_mut(x, y).set_bg(color);
- }
- }
-}
-
-pub fn draw_text_with_ellipsis_nowrap(
- bound: Rect,
- buf: &mut Buffer,
- text: impl AsRef<str>,
- style: impl Into<Option<Style>>,
-) -> u16 {
- let s = style.into();
- let t = text.as_ref();
- let mut graphemes = t.graphemes(true);
- let mut total_width = 0;
- {
- let mut ellipsis_candidate_x = None;
- let mut x_offset = 0;
- for (g, mut x) in graphemes.by_ref().zip(bound.left()..bound.right()) {
- let width = g.width();
- total_width += width;
-
- x += x_offset;
- let cell = buf.get_mut(x, bound.y);
- if x + 1 == bound.right() {
- ellipsis_candidate_x = Some(x);
- }
- cell.symbol = g.into();
- if let Some(s) = s {
- cell.set_style(s);
- }
-
- x_offset += width.saturating_sub(1) as u16;
- if x + x_offset >= bound.right() {
- break;
- }
- let x = x as usize;
- for x in x + 1..x + width {
- let i = buf.index_of(x as u16, bound.y);
- buf.content[i].reset();
- }
- }
- if let (Some(_), Some(x)) = (graphemes.next(), ellipsis_candidate_x) {
- buf.get_mut(x, bound.y).symbol = "…".into();
- }
- }
- total_width as u16
-}
-
-pub fn draw_text_nowrap_fn(
- bound: Rect,
- buf: &mut Buffer,
- t: impl AsRef<str>,
- mut s: impl FnMut(&str, u16, u16) -> Style,
-) {
- if bound.width == 0 {
- return;
- }
- for (g, x) in t.as_ref().graphemes(true).zip(bound.left()..bound.right()) {
- let cell = buf.get_mut(x, bound.y);
- cell.symbol = g.into();
- cell.set_style(s(&cell.symbol, x, bound.y));
- }
-}
-
-pub mod util {
- use unicode_segmentation::UnicodeSegmentation;
- use unicode_width::UnicodeWidthStr;
-
- pub fn sanitize_offset(offset: u16, num_items: usize, num_displayable_lines: u16) -> u16 {
- offset.min((num_items.saturating_sub(num_displayable_lines as usize)) as u16)
- }
-
- #[derive(Default)]
- pub struct GraphemeCountWriter(pub usize);
-
- impl std::io::Write for GraphemeCountWriter {
- fn write(&mut self, buf: &[u8]) -> Result<usize, std::io::Error> {
- self.0 += String::from_utf8_lossy(buf).graphemes(true).count();
- Ok(buf.len())
- }
-
- fn flush(&mut self) -> Result<(), std::io::Error> {
- Ok(())
- }
- }
-
- pub fn block_width(s: &str) -> u16 {
- s.width() as u16
- }
-
- pub mod rect {
- use tui::layout::Rect;
-
- /// A safe version of Rect::intersection that doesn't suffer from underflows
- pub fn intersect(lhs: Rect, rhs: Rect) -> Rect {
- let x1 = lhs.x.max(rhs.x);
- let y1 = lhs.y.max(rhs.y);
- let x2 = lhs.right().min(rhs.right());
- let y2 = lhs.bottom().min(rhs.bottom());
- Rect {
- x: x1,
- y: y1,
- width: x2.saturating_sub(x1),
- height: y2.saturating_sub(y1),
- }
- }
-
- pub fn offset_x(r: Rect, offset: u16) -> Rect {
- Rect {
- x: r.x + offset,
- width: r.width.saturating_sub(offset),
- ..r
- }
- }
-
- pub fn snap_to_right(bound: Rect, new_width: u16) -> Rect {
- offset_x(bound, bound.width.saturating_sub(new_width))
- }
-
- pub fn line_bound(bound: Rect, line: usize) -> Rect {
- Rect {
- y: bound.y + line as u16,
- height: 1,
- ..bound
- }
- }
- }
-}