Merge remote-tracking branch 'a1ien/improove_api'
This commit is contained in:
commit
2cfd975250
9 changed files with 73 additions and 29 deletions
|
@ -10,7 +10,7 @@ pub fn show_basic_vertical_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Vertical bar plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
let axis_positions = vec![0.2, 0.4, 0.6, 0.8];
|
||||
|
@ -27,7 +27,7 @@ pub fn show_basic_horizontal_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Horizontal bar plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
let axis_positions = vec![0.2, 0.4, 0.6, 0.8];
|
||||
|
|
|
@ -10,7 +10,7 @@ pub fn show_basic_heatmap(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Heatmap plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
let values = (0..100).map(|x| 0.1 * x as f64).collect::<Vec<_>>();
|
||||
PlotHeatmap::new("my favourite heatmap")
|
||||
|
|
|
@ -19,7 +19,7 @@ pub fn show_basic_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Simple line plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
let x_positions = vec![0.1, 0.9];
|
||||
|
@ -36,7 +36,7 @@ pub fn show_two_yaxis_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Multiple Y axis plots")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.with_plot_flags(&(PlotFlags::NONE | PlotFlags::Y_AXIS_2))
|
||||
.y_limits(
|
||||
&ImPlotRange { Min: 0.0, Max: 1.0 },
|
||||
|
@ -68,7 +68,7 @@ pub fn show_axis_equal_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Axis equal line plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.with_plot_flags(&(PlotFlags::NONE | PlotFlags::AXIS_EQUAL))
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
|
@ -110,7 +110,7 @@ pub fn show_configurable_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
|
||||
// Axis labels
|
||||
Plot::new("Configured line plot")
|
||||
.size(x_size, y_size)
|
||||
.size([x_size, y_size])
|
||||
.x_label(&x_label)
|
||||
.y_label(&y_label)
|
||||
.x_limits(
|
||||
|
@ -161,7 +161,7 @@ pub fn show_query_features_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
|
||||
// Draw a plot
|
||||
Plot::new("Plot querying")
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.x_limits(&ImPlotRange { Min: 0.0, Max: 5.0 }, Condition::FirstUseEver)
|
||||
.y_limits(
|
||||
&ImPlotRange { Min: 0.0, Max: 5.0 },
|
||||
|
@ -246,7 +246,7 @@ pub fn show_style_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
// variables can be done outside of plot calls as well.
|
||||
let style = push_style_color(&PlotColorElement::PlotBg, 1.0, 1.0, 1.0, 0.2);
|
||||
Plot::new("Style demo plot")
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.x_limits(&ImPlotRange { Min: 0.0, Max: 6.0 }, Condition::Always)
|
||||
.y_limits(
|
||||
&ImPlotRange {
|
||||
|
@ -291,7 +291,7 @@ pub fn show_colormaps_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
set_colormap_from_preset(Colormap::Plasma, 1);
|
||||
|
||||
Plot::new("Colormap demo plot")
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
(1..10)
|
||||
.map(|x| x as f64 * 0.1)
|
||||
|
@ -318,7 +318,7 @@ pub fn show_colormaps_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
]);
|
||||
|
||||
Plot::new("Colormap demo plot #2")
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
(1..10)
|
||||
.map(|x| x as f64 * 0.1)
|
||||
|
|
|
@ -12,7 +12,7 @@ pub fn show_basic_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Simple scatter plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
let x_positions = vec![0.1, 0.2, 0.1, 0.5, 0.9];
|
||||
|
@ -29,7 +29,7 @@ pub fn show_custom_markers_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Multi-marker scatter plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// Change to cross marker for one scatter plot call
|
||||
let x_positions = vec![0.1, 0.2, 0.1, 0.5, 0.9];
|
||||
|
|
|
@ -12,7 +12,7 @@ pub fn show_basic_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Simple stairs plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
let x_positions = vec![0.1, 0.2, 0.5];
|
||||
|
|
|
@ -10,7 +10,7 @@ pub fn show_basic_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Stem plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// If this is called outside a plot build callback, the program will panic.
|
||||
let axis_positions = vec![0.2, 0.4, 0.6, 0.8, 0.9, 0.93];
|
||||
|
|
|
@ -12,7 +12,7 @@ pub fn show_basic_plot(ui: &Ui, plot_ui: &PlotUi) {
|
|||
Plot::new("Simple text plot")
|
||||
// The size call could also be omitted, though the defaults don't consider window
|
||||
// width, which is why we're not doing so here.
|
||||
.size(content_width, 300.0)
|
||||
.size([content_width, 300.0])
|
||||
.build(plot_ui, || {
|
||||
// The text passed to "new" is what gets displayed.
|
||||
let x_position: f64 = 0.5;
|
||||
|
|
|
@ -6,4 +6,55 @@
|
|||
#[cfg(test)]
|
||||
use imgui_sys as _;
|
||||
|
||||
use std::ops::Range;
|
||||
include!("bindings.rs");
|
||||
|
||||
impl From<Range<f64>> for ImPlotRange {
|
||||
fn from(from: Range<f64>) -> Self {
|
||||
ImPlotRange {
|
||||
Min: from.start,
|
||||
Max: from.end,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<[f64; 2]> for ImPlotRange {
|
||||
fn from(from: [f64; 2]) -> Self {
|
||||
ImPlotRange {
|
||||
Min: from[0],
|
||||
Max: from[1],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<(f64, f64)> for ImPlotRange {
|
||||
fn from(from: (f64, f64)) -> Self {
|
||||
ImPlotRange {
|
||||
Min: from.0,
|
||||
Max: from.1,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_plot_range_from_range() {
|
||||
let r = 5.0..7.0;
|
||||
let im_range: ImPlotRange = r.clone().into();
|
||||
assert_eq!(im_range.Min, r.start);
|
||||
assert_eq!(im_range.Max, r.end);
|
||||
|
||||
let arr = [7.0, 8.0];
|
||||
let im_range: ImPlotRange = arr.clone().into();
|
||||
assert_eq!(im_range.Min, arr[0]);
|
||||
assert_eq!(im_range.Max, arr[1]);
|
||||
|
||||
let tuple = (12.0, 19.0);
|
||||
let im_range: ImPlotRange = tuple.clone().into();
|
||||
assert_eq!(im_range.Min, tuple.0);
|
||||
assert_eq!(im_range.Max, tuple.1);
|
||||
}
|
||||
}
|
||||
|
|
19
src/plot.rs
19
src/plot.rs
|
@ -97,10 +97,8 @@ pub struct Plot {
|
|||
/// Title of the plot, shown on top. Stored as ImString because that's what we'll use
|
||||
/// afterwards, and this ensures the ImString itself will stay alive long enough for the plot.
|
||||
title: ImString,
|
||||
/// Size of the plot in x direction, in the same units imgui uses.
|
||||
size_x: f32,
|
||||
/// Size of the plot in y direction, in the same units imgui uses.
|
||||
size_y: f32,
|
||||
/// Size of the plot in [x, y] direction, in the same units imgui uses.
|
||||
size: [f32; 2],
|
||||
/// Label of the x axis, shown on the bottom. Stored as ImString because that's what we'll use
|
||||
/// afterwards, and this ensures the ImString itself will stay alive long enough for the plot.
|
||||
x_label: ImString,
|
||||
|
@ -162,8 +160,7 @@ impl Plot {
|
|||
// TODO(4bb4) question these defaults, maybe remove some of them
|
||||
Self {
|
||||
title: im_str!("{}", title),
|
||||
size_x: DEFAULT_PLOT_SIZE_X,
|
||||
size_y: DEFAULT_PLOT_SIZE_Y,
|
||||
size: [DEFAULT_PLOT_SIZE_X, DEFAULT_PLOT_SIZE_Y],
|
||||
x_label: im_str!("").into(),
|
||||
y_label: im_str!("").into(),
|
||||
x_limits: None,
|
||||
|
@ -186,9 +183,8 @@ impl Plot {
|
|||
/// Sets the plot size, given as [size_x, size_y]. Units are the same as
|
||||
/// what imgui uses. TODO(4b4) ... which is? I'm not sure it's pixels
|
||||
#[inline]
|
||||
pub fn size(mut self, size_x: f32, size_y: f32) -> Self {
|
||||
self.size_x = size_x;
|
||||
self.size_y = size_y;
|
||||
pub fn size(mut self, size: [f32; 2]) -> Self {
|
||||
self.size = size;
|
||||
self
|
||||
}
|
||||
|
||||
|
@ -427,10 +423,7 @@ impl Plot {
|
|||
self.title.as_ptr(),
|
||||
self.x_label.as_ptr(),
|
||||
self.y_label.as_ptr(),
|
||||
sys::ImVec2 {
|
||||
x: self.size_x as f32,
|
||||
y: self.size_y as f32,
|
||||
},
|
||||
self.size.into(),
|
||||
self.plot_flags,
|
||||
self.x_flags,
|
||||
self.y_flags[0],
|
||||
|
|
Loading…
Reference in a new issue