tui_gradient_block/structs/
border_segment.rs1use crate::structs::border_symbols::SegmentSet;
2use ratatui::prelude::Alignment;
3use tui_rule::{
4 presets::borders::plain::*, Rule, Set, VerticalAlignment,
5};
6pub struct BorderSegment {
7 pub should_be_rendered: bool,
8 pub seg: Rule,
9}
10pub struct BorderSegments {
14 pub top: BorderSegment,
16 pub bottom: BorderSegment,
18 pub left: BorderSegment,
20 pub right: BorderSegment,
22}
23impl Default for BorderSegments {
24 fn default() -> Self {
25 Self::new()
26 }
27}
28
29impl BorderSegments {
30 pub fn new() -> Self {
34 let mut new_self = Self {
35 top: BorderSegment::new(false, TOP),
36 bottom: BorderSegment::new(false, BOTTOM),
37 left: BorderSegment::new(true, LEFT),
38 right: BorderSegment::new(true, RIGHT),
39 };
40 new_self.right.seg.horizontal_alignment = Alignment::Right;
41 new_self.left.seg.horizontal_alignment = Alignment::Left;
42 new_self.bottom.seg.vertical_alignment =
43 VerticalAlignment::Bottom;
44 new_self.top.seg.vertical_alignment = VerticalAlignment::Top;
45 new_self
46 }
47 pub fn from_segment_set(mut self, set: SegmentSet) -> Self {
48 self.right.seg = self.right.seg.with_set(set.right);
49 self.left.seg = self.left.seg.with_set(set.left);
50 self.top.seg = self.top.seg.with_set(set.top);
51 self.bottom.seg = self.bottom.seg.with_set(set.bottom);
52 self
53 }
54}
55impl BorderSegment {
56 pub fn new(is_vertical: bool, set: Set) -> Self {
61 Self {
62 should_be_rendered: true,
63 seg: match is_vertical {
64 true => Rule::from_set(set).vertical(),
65 false => Rule::from_set(set).horizontal(),
66 }
67 .area_margin(ratatui::layout::Margin::new(0, 0)),
68 }
69 }
70}