mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 14:50:03 -04:00
plot-axis: Use 'into impl<WidgetText>' as axis label formatter
This commit is contained in:
@@ -1,7 +1,4 @@
|
|||||||
use std::{
|
use std::{fmt::Debug, ops::RangeInclusive};
|
||||||
fmt::{Debug, Formatter},
|
|
||||||
ops::RangeInclusive,
|
|
||||||
};
|
|
||||||
|
|
||||||
use epaint::{
|
use epaint::{
|
||||||
emath::{lerp, remap_clamp, round_to_decimals},
|
emath::{lerp, remap_clamp, round_to_decimals},
|
||||||
@@ -41,29 +38,15 @@ pub(super) type YAxisWidget = AxisWidget<Y_AXIS>;
|
|||||||
/// Axis configuration.
|
/// Axis configuration.
|
||||||
///
|
///
|
||||||
/// Used to configure axis label and ticks.
|
/// Used to configure axis label and ticks.
|
||||||
|
/// The AXIS argument must be either [`X_AXIS`] or [`Y_AXIS`]. Everything else is disallowed.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct AxisHints<const AXIS: usize> {
|
pub struct AxisHints<const AXIS: usize> {
|
||||||
pub(super) label: String,
|
pub(super) label: WidgetText,
|
||||||
pub(super) formatter: AxisFormatterFn,
|
pub(super) formatter: AxisFormatterFn,
|
||||||
digits: usize,
|
digits: usize,
|
||||||
pub(super) placement: Placement,
|
pub(super) placement: Placement,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<const AXIS: usize> Debug for AxisHints<AXIS> {
|
|
||||||
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
|
|
||||||
let axis_str = match AXIS {
|
|
||||||
X_AXIS => "x-axis",
|
|
||||||
Y_AXIS => "y-axis",
|
|
||||||
_ => unreachable!(),
|
|
||||||
};
|
|
||||||
write!(
|
|
||||||
fmt,
|
|
||||||
"Axis ( placement: {:?}, label: {}, formatter: ???, axis: {} )",
|
|
||||||
self.placement, self.label, axis_str
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: this just a guess. It might cease to work if a user changes font size.
|
// TODO: this just a guess. It might cease to work if a user changes font size.
|
||||||
const LINE_HEIGHT: f32 = 12.0;
|
const LINE_HEIGHT: f32 = 12.0;
|
||||||
|
|
||||||
@@ -75,8 +58,8 @@ impl<const AXIS: usize> Default for AxisHints<AXIS> {
|
|||||||
/// maximum `digits` on tick label is 5
|
/// maximum `digits` on tick label is 5
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
let label = match AXIS {
|
let label = match AXIS {
|
||||||
X_AXIS => "x".to_owned(),
|
X_AXIS => "x".into(),
|
||||||
Y_AXIS => "y".to_owned(),
|
Y_AXIS => "y".into(),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
Self {
|
Self {
|
||||||
@@ -114,8 +97,8 @@ impl<const AXIS: usize> AxisHints<AXIS> {
|
|||||||
/// Specify axis label.
|
/// Specify axis label.
|
||||||
///
|
///
|
||||||
/// The default is 'x' for x-axes and 'y' for y-axes.
|
/// The default is 'x' for x-axes and 'y' for y-axes.
|
||||||
pub fn label(mut self, label: String) -> Self {
|
pub fn label(mut self, label: impl Into<WidgetText>) -> Self {
|
||||||
self.label = label;
|
self.label = label.into();
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,7 +166,7 @@ impl<const AXIS: usize> Widget for AxisWidget<AXIS> {
|
|||||||
let response = ui.allocate_rect(self.rect, Sense::click_and_drag());
|
let response = ui.allocate_rect(self.rect, Sense::click_and_drag());
|
||||||
if ui.is_rect_visible(response.rect) {
|
if ui.is_rect_visible(response.rect) {
|
||||||
let visuals = ui.style().visuals.clone();
|
let visuals = ui.style().visuals.clone();
|
||||||
let text: WidgetText = self.hints.label.into();
|
let text = self.hints.label;
|
||||||
let galley = text.into_galley(ui, Some(false), f32::INFINITY, TextStyle::Body);
|
let galley = text.into_galley(ui, Some(false), f32::INFINITY, TextStyle::Body);
|
||||||
let text_color = visuals
|
let text_color = visuals
|
||||||
.override_text_color
|
.override_text_color
|
||||||
|
|||||||
@@ -566,16 +566,16 @@ impl Plot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Set the x axis label of the bottom x-axis
|
/// Set the x axis label of the bottom x-axis
|
||||||
pub fn x_axis_label(mut self, label: String) -> Self {
|
pub fn x_axis_label(mut self, label: impl Into<WidgetText>) -> Self {
|
||||||
if !self.x_axes.is_empty() {
|
if !self.x_axes.is_empty() {
|
||||||
self.x_axes[0].label = label;
|
self.x_axes[0].label = label.into();
|
||||||
}
|
}
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
/// Set the y axis label of the left y-axis
|
/// Set the y axis label of the left y-axis
|
||||||
pub fn y_axis_label(mut self, label: String) -> Self {
|
pub fn y_axis_label(mut self, label: impl Into<WidgetText>) -> Self {
|
||||||
if !self.y_axes.is_empty() {
|
if !self.y_axes.is_empty() {
|
||||||
self.y_axes[0].label = label;
|
self.y_axes[0].label = label.into();
|
||||||
}
|
}
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user