libsurfer/
item_drawing_info.rs1use crate::{
2 displayed_item::DisplayedFieldRef, displayed_item_tree::VisibleItemIndex,
3 transaction_container::TransactionStreamRef, wave_container::FieldRef,
4};
5
6#[derive(Debug)]
7pub struct VariableDrawingInfo {
8 pub field_ref: FieldRef,
9 pub displayed_field_ref: DisplayedFieldRef,
10 pub vidx: VisibleItemIndex,
11 pub top: f32,
12 pub bottom: f32,
13}
14
15#[derive(Debug)]
16pub struct DividerDrawingInfo {
17 pub vidx: VisibleItemIndex,
18 pub top: f32,
19 pub bottom: f32,
20}
21
22#[derive(Debug)]
23pub struct MarkerDrawingInfo {
24 pub vidx: VisibleItemIndex,
25 pub top: f32,
26 pub bottom: f32,
27 pub idx: u8,
28}
29
30#[derive(Debug)]
31pub struct TimeLineDrawingInfo {
32 pub vidx: VisibleItemIndex,
33 pub top: f32,
34 pub bottom: f32,
35}
36
37#[derive(Debug)]
38pub struct StreamDrawingInfo {
39 pub transaction_stream_ref: TransactionStreamRef,
40 pub vidx: VisibleItemIndex,
41 pub top: f32,
42 pub bottom: f32,
43}
44
45#[derive(Debug)]
46pub struct GroupDrawingInfo {
47 pub vidx: VisibleItemIndex,
48 pub top: f32,
49 pub bottom: f32,
50}
51
52#[derive(Debug)]
53pub struct PlaceholderDrawingInfo {
54 pub vidx: VisibleItemIndex,
55 pub top: f32,
56 pub bottom: f32,
57}
58
59pub enum ItemDrawingInfo {
60 Variable(VariableDrawingInfo),
61 Divider(DividerDrawingInfo),
62 Marker(MarkerDrawingInfo),
63 TimeLine(TimeLineDrawingInfo),
64 Stream(StreamDrawingInfo),
65 Group(GroupDrawingInfo),
66 Placeholder(PlaceholderDrawingInfo),
67}
68
69impl ItemDrawingInfo {
70 #[must_use]
71 pub fn top(&self) -> f32 {
72 match self {
73 ItemDrawingInfo::Variable(drawing_info) => drawing_info.top,
74 ItemDrawingInfo::Divider(drawing_info) => drawing_info.top,
75 ItemDrawingInfo::Marker(drawing_info) => drawing_info.top,
76 ItemDrawingInfo::TimeLine(drawing_info) => drawing_info.top,
77 ItemDrawingInfo::Stream(drawing_info) => drawing_info.top,
78 ItemDrawingInfo::Group(drawing_info) => drawing_info.top,
79 ItemDrawingInfo::Placeholder(drawing_info) => drawing_info.top,
80 }
81 }
82 #[must_use]
83 pub fn bottom(&self) -> f32 {
84 match self {
85 ItemDrawingInfo::Variable(drawing_info) => drawing_info.bottom,
86 ItemDrawingInfo::Divider(drawing_info) => drawing_info.bottom,
87 ItemDrawingInfo::Marker(drawing_info) => drawing_info.bottom,
88 ItemDrawingInfo::TimeLine(drawing_info) => drawing_info.bottom,
89 ItemDrawingInfo::Stream(drawing_info) => drawing_info.bottom,
90 ItemDrawingInfo::Group(drawing_info) => drawing_info.bottom,
91 ItemDrawingInfo::Placeholder(drawing_info) => drawing_info.bottom,
92 }
93 }
94 #[must_use]
95 pub fn vidx(&self) -> VisibleItemIndex {
96 match self {
97 ItemDrawingInfo::Variable(drawing_info) => drawing_info.vidx,
98 ItemDrawingInfo::Divider(drawing_info) => drawing_info.vidx,
99 ItemDrawingInfo::Marker(drawing_info) => drawing_info.vidx,
100 ItemDrawingInfo::TimeLine(drawing_info) => drawing_info.vidx,
101 ItemDrawingInfo::Stream(drawing_info) => drawing_info.vidx,
102 ItemDrawingInfo::Group(drawing_info) => drawing_info.vidx,
103 ItemDrawingInfo::Placeholder(drawing_info) => drawing_info.vidx,
104 }
105 }
106
107 pub(crate) fn get_y_from_anchor(&self, anchor: &crate::graphics::Anchor) -> f32 {
108 match anchor {
109 crate::graphics::Anchor::Top => self.top(),
110 crate::graphics::Anchor::Center => self.center(),
111 crate::graphics::Anchor::Percentual(p) => self.top() + p * (self.height()),
112 crate::graphics::Anchor::Bottom => self.bottom(),
113 }
114 }
115
116 pub(crate) fn center(&self) -> f32 {
117 self.top().midpoint(self.bottom())
118 }
119
120 pub(crate) fn height(&self) -> f32 {
121 self.bottom() - self.top()
122 }
123}