arcdps_imgui/
plotlines.rs

1use std::os::raw::c_float;
2use std::{f32, mem};
3
4use super::Ui;
5
6#[must_use]
7pub struct PlotLines<'ui, 'p, Label, Overlay = &'static str> {
8    label: Label,
9    values: &'p [f32],
10    values_offset: usize,
11    overlay_text: Option<Overlay>,
12    scale_min: f32,
13    scale_max: f32,
14    graph_size: [f32; 2],
15    ui: &'ui Ui<'ui>,
16}
17
18impl<'ui, 'p, Label: AsRef<str>> PlotLines<'ui, 'p, Label> {
19    pub fn new(ui: &'ui Ui<'ui>, label: Label, values: &'p [f32]) -> Self {
20        PlotLines {
21            label,
22            values,
23            values_offset: 0usize,
24            overlay_text: None,
25            scale_min: f32::MAX,
26            scale_max: f32::MAX,
27            graph_size: [0.0, 0.0],
28            ui,
29        }
30    }
31}
32
33impl<'ui, 'p, Label: AsRef<str>, Overlay: AsRef<str>> PlotLines<'ui, 'p, Label, Overlay> {
34    pub fn values_offset(mut self, values_offset: usize) -> Self {
35        self.values_offset = values_offset;
36        self
37    }
38
39    pub fn overlay_text<Overlay2: AsRef<str>>(
40        self,
41        overlay_text: Overlay2,
42    ) -> PlotLines<'ui, 'p, Label, Overlay2> {
43        PlotLines {
44            label: self.label,
45            values: self.values,
46            values_offset: self.values_offset,
47            overlay_text: Some(overlay_text),
48            scale_min: self.scale_min,
49            scale_max: self.scale_max,
50            graph_size: self.graph_size,
51            ui: self.ui,
52        }
53    }
54
55    pub fn scale_min(mut self, scale_min: f32) -> Self {
56        self.scale_min = scale_min;
57        self
58    }
59
60    pub fn scale_max(mut self, scale_max: f32) -> Self {
61        self.scale_max = scale_max;
62        self
63    }
64
65    pub fn graph_size(mut self, graph_size: [f32; 2]) -> Self {
66        self.graph_size = graph_size;
67        self
68    }
69
70    pub fn build(self) {
71        unsafe {
72            let (label, overlay) = self.ui.scratch_txt_with_opt(self.label, self.overlay_text);
73
74            sys::igPlotLines_FloatPtr(
75                label,
76                self.values.as_ptr() as *const c_float,
77                self.values.len() as i32,
78                self.values_offset as i32,
79                overlay,
80                self.scale_min,
81                self.scale_max,
82                self.graph_size.into(),
83                mem::size_of::<f32>() as i32,
84            );
85        }
86    }
87}