mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 06:40:06 -04:00
Plot widget - allow disabling zoom and drag for x and y separately (#2901)
* Set whether zooming allowed for x and y separately * Set whether dragging allowed for x and y separately * Add disclaimers about interaction with data_aspect * Show zoom & drag behavior in plot demo/charts instead of context menu demo * Code review suggestions - use AxisBools::any() Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com> * Simplify allow_drag and allow_zoom APIs to take in Into<AxisBools> * Remove unnecessary using... * Remove unrelated change --------- Co-authored-by: Emil Ernerfeldt <emil.ernerfeldt@gmail.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use std::f64::consts::TAU;
|
||||
use std::ops::RangeInclusive;
|
||||
|
||||
use egui::plot::{GridInput, GridMark};
|
||||
use egui::plot::{AxisBools, GridInput, GridMark};
|
||||
use egui::*;
|
||||
use plot::{
|
||||
Arrows, Bar, BarChart, BoxElem, BoxPlot, BoxSpread, CoordinatesFormatter, Corner, HLine,
|
||||
@@ -812,6 +812,8 @@ impl Default for Chart {
|
||||
struct ChartsDemo {
|
||||
chart: Chart,
|
||||
vertical: bool,
|
||||
allow_zoom: AxisBools,
|
||||
allow_drag: AxisBools,
|
||||
}
|
||||
|
||||
impl Default for ChartsDemo {
|
||||
@@ -819,22 +821,44 @@ impl Default for ChartsDemo {
|
||||
Self {
|
||||
vertical: true,
|
||||
chart: Chart::default(),
|
||||
allow_zoom: true.into(),
|
||||
allow_drag: true.into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ChartsDemo {
|
||||
fn ui(&mut self, ui: &mut Ui) -> Response {
|
||||
ui.label("Type:");
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut self.chart, Chart::GaussBars, "Histogram");
|
||||
ui.selectable_value(&mut self.chart, Chart::StackedBars, "Stacked Bar Chart");
|
||||
ui.selectable_value(&mut self.chart, Chart::BoxPlot, "Box Plot");
|
||||
});
|
||||
ui.label("Orientation:");
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut self.vertical, true, "Vertical");
|
||||
ui.selectable_value(&mut self.vertical, false, "Horizontal");
|
||||
ui.vertical(|ui| {
|
||||
ui.label("Type:");
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut self.chart, Chart::GaussBars, "Histogram");
|
||||
ui.selectable_value(&mut self.chart, Chart::StackedBars, "Stacked Bar Chart");
|
||||
ui.selectable_value(&mut self.chart, Chart::BoxPlot, "Box Plot");
|
||||
});
|
||||
ui.label("Orientation:");
|
||||
ui.horizontal(|ui| {
|
||||
ui.selectable_value(&mut self.vertical, true, "Vertical");
|
||||
ui.selectable_value(&mut self.vertical, false, "Horizontal");
|
||||
});
|
||||
});
|
||||
ui.vertical(|ui| {
|
||||
ui.group(|ui| {
|
||||
ui.add_enabled_ui(self.chart != Chart::StackedBars, |ui| {
|
||||
ui.horizontal(|ui| {
|
||||
ui.label("Allow zoom:");
|
||||
ui.checkbox(&mut self.allow_zoom.x, "X");
|
||||
ui.checkbox(&mut self.allow_zoom.y, "Y");
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.label("Allow drag:");
|
||||
ui.checkbox(&mut self.allow_drag.x, "X");
|
||||
ui.checkbox(&mut self.allow_drag.y, "Y");
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
match self.chart {
|
||||
Chart::GaussBars => self.bar_gauss(ui),
|
||||
@@ -867,6 +891,8 @@ impl ChartsDemo {
|
||||
Plot::new("Normal Distribution Demo")
|
||||
.legend(Legend::default())
|
||||
.clamp_grid(true)
|
||||
.allow_zoom(self.allow_zoom)
|
||||
.allow_drag(self.allow_drag)
|
||||
.show(ui, |plot_ui| plot_ui.bar_chart(chart))
|
||||
.response
|
||||
}
|
||||
@@ -925,6 +951,7 @@ impl ChartsDemo {
|
||||
Plot::new("Stacked Bar Chart Demo")
|
||||
.legend(Legend::default())
|
||||
.data_aspect(1.0)
|
||||
.allow_drag(self.allow_drag)
|
||||
.show(ui, |plot_ui| {
|
||||
plot_ui.bar_chart(chart1);
|
||||
plot_ui.bar_chart(chart2);
|
||||
@@ -968,6 +995,8 @@ impl ChartsDemo {
|
||||
|
||||
Plot::new("Box Plot Demo")
|
||||
.legend(Legend::default())
|
||||
.allow_zoom(self.allow_zoom)
|
||||
.allow_drag(self.allow_drag)
|
||||
.show(ui, |plot_ui| {
|
||||
plot_ui.box_plot(box1);
|
||||
plot_ui.box_plot(box2);
|
||||
|
||||
Reference in New Issue
Block a user