Skip to content

Commit

Permalink
Fix plot formatter not taking closures (#3260)
Browse files Browse the repository at this point in the history
and fix their their comments
  • Loading branch information
Wumpf authored Aug 15, 2023
1 parent b896d64 commit b073577
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 15 deletions.
13 changes: 8 additions & 5 deletions crates/egui/src/widgets/plot/axis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use crate::{Response, Sense, TextStyle, Ui, WidgetText};

use super::{transform::PlotTransform, GridMark};

pub(super) type AxisFormatterFn = fn(f64, usize, &RangeInclusive<f64>) -> String;
pub(super) type AxisFormatterFn = dyn Fn(f64, usize, &RangeInclusive<f64>) -> String;

/// X or Y axis.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
Expand Down Expand Up @@ -81,7 +81,7 @@ impl From<VPlacement> for Placement {
#[derive(Clone)]
pub struct AxisHints {
pub(super) label: WidgetText,
pub(super) formatter: AxisFormatterFn,
pub(super) formatter: Arc<AxisFormatterFn>,
pub(super) digits: usize,
pub(super) placement: Placement,
}
Expand All @@ -98,7 +98,7 @@ impl Default for AxisHints {
fn default() -> Self {
Self {
label: Default::default(),
formatter: Self::default_formatter,
formatter: Arc::new(Self::default_formatter),
digits: 5,
placement: Placement::LeftBottom,
}
Expand All @@ -111,8 +111,11 @@ impl AxisHints {
/// The first parameter of `formatter` is the raw tick value as `f64`.
/// The second parameter is the maximum number of characters that fit into y-labels.
/// The second parameter of `formatter` is the currently shown range on this axis.
pub fn formatter(mut self, fmt: fn(f64, usize, &RangeInclusive<f64>) -> String) -> Self {
self.formatter = fmt;
pub fn formatter(
mut self,
fmt: impl Fn(f64, usize, &RangeInclusive<f64>) -> String + 'static,
) -> Self {
self.formatter = Arc::new(fmt);
self
}

Expand Down
28 changes: 18 additions & 10 deletions crates/egui/src/widgets/plot/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -613,24 +613,32 @@ impl Plot {

/// Specify custom formatter for ticks on the main X-axis.
///
/// The first parameter of `fmt` is the raw tick value as `f64`.
/// The second parameter is the maximum requested number of characters per tick label.
/// The second parameter of `fmt` is the currently shown range on this axis.
pub fn x_axis_formatter(mut self, fmt: fn(f64, usize, &RangeInclusive<f64>) -> String) -> Self {
/// Arguments of `fmt`:
/// * raw tick value as `f64`.
/// * maximum requested number of characters per tick label.
/// * currently shown range on this axis.
pub fn x_axis_formatter(
mut self,
fmt: impl Fn(f64, usize, &RangeInclusive<f64>) -> String + 'static,
) -> Self {
if let Some(main) = self.x_axes.first_mut() {
main.formatter = fmt;
main.formatter = Arc::new(fmt);
}
self
}

/// Specify custom formatter for ticks on the main Y-axis.
///
/// The first parameter of `formatter` is the raw tick value as `f64`.
/// The second parameter is the maximum requested number of characters per tick label.
/// The second parameter of `formatter` is the currently shown range on this axis.
pub fn y_axis_formatter(mut self, fmt: fn(f64, usize, &RangeInclusive<f64>) -> String) -> Self {
/// Arguments of `fmt`:
/// * raw tick value as `f64`.
/// * maximum requested number of characters per tick label.
/// * currently shown range on this axis.
pub fn y_axis_formatter(
mut self,
fmt: impl Fn(f64, usize, &RangeInclusive<f64>) -> String + 'static,
) -> Self {
if let Some(main) = self.y_axes.first_mut() {
main.formatter = fmt;
main.formatter = Arc::new(fmt);
}
self
}
Expand Down

0 comments on commit b073577

Please sign in to comment.