1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
use crate::default::*; use crate::wrap::{self, Wrap}; use prototty_render::*; pub struct TextView<W: Wrap> { pub style: Style, wrap: W, } impl<W: Wrap> TextView<W> { pub fn new(style: Style, wrap: W) -> Self { Self { style, wrap } } pub fn new_default_style(wrap: W) -> Self { Self::new(DEFAULT_STYLE, wrap) } } impl<S, I, W> View<I> for TextView<W> where S: AsRef<str>, I: IntoIterator<Item = S>, W: Wrap, { fn view<G: ViewGrid, R: ViewTransformRgb24>( &mut self, parts: I, context: ViewContext<R>, grid: &mut G, ) { self.wrap.clear(); for part in parts { let part = part.as_ref(); for character in part.chars() { self.wrap .process_character(character, self.style, context, grid); } } self.wrap.flush(context, grid); } } pub struct StringView<W: Wrap> { pub style: Style, wrap: W, } impl<W: Wrap> StringView<W> { pub fn new(style: Style, wrap: W) -> Self { Self { style, wrap } } pub fn new_default_style(wrap: W) -> Self { Self::new(DEFAULT_STYLE, wrap) } } impl<'a, S, W> View<S> for StringView<W> where S: AsRef<str>, W: Wrap, { fn view<G: ViewGrid, R: ViewTransformRgb24>( &mut self, part: S, context: ViewContext<R>, grid: &mut G, ) { self.wrap.clear(); let part = part.as_ref(); for character in part.chars() { self.wrap .process_character(character, self.style, context, grid); } self.wrap.flush(context, grid); } } #[derive(Debug, Clone, Copy)] pub struct StringViewSingleLine { pub style: Style, } impl Default for StringViewSingleLine { fn default() -> Self { Self { style: DEFAULT_STYLE, } } } impl StringViewSingleLine { pub const fn new(style: Style) -> Self { Self { style } } } impl<'a, S> View<S> for StringViewSingleLine where S: AsRef<str>, { fn view<G: ViewGrid, R: ViewTransformRgb24>( &mut self, part: S, context: ViewContext<R>, grid: &mut G, ) { StringView::new(self.style, wrap::None::new()).view(part, context, grid); } fn visible_bounds<R: ViewTransformRgb24>( &mut self, part: S, _context: ViewContext<R>, ) -> Size { let part = part.as_ref(); let width = part.len() as u32; Size::new(width, 1) } }