pub struct DragValue<'a> { /* private fields */ }
Expand description
A numeric value that you can change by dragging the number. More compact than a Slider
.
ui.add(egui::DragValue::new(&mut my_f32).speed(0.1));
Implementations§
Source§impl<'a> DragValue<'a>
impl<'a> DragValue<'a>
pub fn new<Num>(value: &'a mut Num) -> DragValue<'a>where
Num: Numeric,
pub fn from_get_set( get_set_value: impl FnMut(Option<f64>) -> f64 + 'a, ) -> DragValue<'a>
Sourcepub fn speed(self, speed: impl Into<f64>) -> DragValue<'a>
pub fn speed(self, speed: impl Into<f64>) -> DragValue<'a>
How much the value changes when dragged one point (logical pixel).
Sourcepub fn clamp_range<Num>(self, clamp_range: RangeInclusive<Num>) -> DragValue<'a>where
Num: Numeric,
pub fn clamp_range<Num>(self, clamp_range: RangeInclusive<Num>) -> DragValue<'a>where
Num: Numeric,
Clamp incoming and outgoing values to this range.
Sourcepub fn prefix(self, prefix: impl ToString) -> DragValue<'a>
pub fn prefix(self, prefix: impl ToString) -> DragValue<'a>
Show a prefix before the number, e.g. “x: “
Sourcepub fn suffix(self, suffix: impl ToString) -> DragValue<'a>
pub fn suffix(self, suffix: impl ToString) -> DragValue<'a>
Add a suffix to the number, this can be e.g. a unit (“°” or “ m“)
Sourcepub fn min_decimals(self, min_decimals: usize) -> DragValue<'a>
pub fn min_decimals(self, min_decimals: usize) -> DragValue<'a>
Set a minimum number of decimals to display. Normally you don’t need to pick a precision, as the slider will intelligently pick a precision for you. Regardless of precision the slider will use “smart aim” to help the user select nice, round values.
Sourcepub fn max_decimals(self, max_decimals: usize) -> DragValue<'a>
pub fn max_decimals(self, max_decimals: usize) -> DragValue<'a>
Set a maximum number of decimals to display. Values will also be rounded to this number of decimals. Normally you don’t need to pick a precision, as the slider will intelligently pick a precision for you. Regardless of precision the slider will use “smart aim” to help the user select nice, round values.
pub fn max_decimals_opt(self, max_decimals: Option<usize>) -> DragValue<'a>
Sourcepub fn fixed_decimals(self, num_decimals: usize) -> DragValue<'a>
pub fn fixed_decimals(self, num_decimals: usize) -> DragValue<'a>
Set an exact number of decimals to display. Values will also be rounded to this number of decimals. Normally you don’t need to pick a precision, as the slider will intelligently pick a precision for you. Regardless of precision the slider will use “smart aim” to help the user select nice, round values.
Sourcepub fn custom_formatter(
self,
formatter: impl Fn(f64, RangeInclusive<usize>) -> String + 'a,
) -> DragValue<'a>
pub fn custom_formatter( self, formatter: impl Fn(f64, RangeInclusive<usize>) -> String + 'a, ) -> DragValue<'a>
Set custom formatter defining how numbers are converted into text.
A custom formatter takes a f64
for the numeric value and a RangeInclusive<usize>
representing
the decimal range i.e. minimum and maximum number of decimal places shown.
See also: DragValue::custom_parser
ui.add(egui::DragValue::new(&mut my_i32)
.clamp_range(0..=((60 * 60 * 24) - 1))
.custom_formatter(|n, _| {
let n = n as i32;
let hours = n / (60 * 60);
let mins = (n / 60) % 60;
let secs = n % 60;
format!("{hours:02}:{mins:02}:{secs:02}")
})
.custom_parser(|s| {
let parts: Vec<&str> = s.split(':').collect();
if parts.len() == 3 {
parts[0].parse::<i32>().and_then(|h| {
parts[1].parse::<i32>().and_then(|m| {
parts[2].parse::<i32>().map(|s| {
((h * 60 * 60) + (m * 60) + s) as f64
})
})
})
.ok()
} else {
None
}
}));
Sourcepub fn custom_parser(
self,
parser: impl Fn(&str) -> Option<f64> + 'a,
) -> DragValue<'a>
pub fn custom_parser( self, parser: impl Fn(&str) -> Option<f64> + 'a, ) -> DragValue<'a>
Set custom parser defining how the text input is parsed into a number.
A custom parser takes an &str
to parse into a number and returns a f64
if it was successfully parsed
or None
otherwise.
See also: DragValue::custom_formatter
ui.add(egui::DragValue::new(&mut my_i32)
.clamp_range(0..=((60 * 60 * 24) - 1))
.custom_formatter(|n, _| {
let n = n as i32;
let hours = n / (60 * 60);
let mins = (n / 60) % 60;
let secs = n % 60;
format!("{hours:02}:{mins:02}:{secs:02}")
})
.custom_parser(|s| {
let parts: Vec<&str> = s.split(':').collect();
if parts.len() == 3 {
parts[0].parse::<i32>().and_then(|h| {
parts[1].parse::<i32>().and_then(|m| {
parts[2].parse::<i32>().map(|s| {
((h * 60 * 60) + (m * 60) + s) as f64
})
})
})
.ok()
} else {
None
}
}));
Sourcepub fn binary(self, min_width: usize, twos_complement: bool) -> DragValue<'a>
pub fn binary(self, min_width: usize, twos_complement: bool) -> DragValue<'a>
Set custom_formatter
and custom_parser
to display and parse numbers as binary integers. Floating point
numbers are not supported.
min_width
specifies the minimum number of displayed digits; if the number is shorter than this, it will be
prefixed with additional 0s to match min_width
.
If twos_complement
is true, negative values will be displayed as the 2’s complement representation. Otherwise
they will be prefixed with a ‘-’ sign.
§Panics
Panics if min_width
is 0.
ui.add(egui::DragValue::new(&mut my_i32).binary(64, false));
Sourcepub fn octal(self, min_width: usize, twos_complement: bool) -> DragValue<'a>
pub fn octal(self, min_width: usize, twos_complement: bool) -> DragValue<'a>
Set custom_formatter
and custom_parser
to display and parse numbers as octal integers. Floating point
numbers are not supported.
min_width
specifies the minimum number of displayed digits; if the number is shorter than this, it will be
prefixed with additional 0s to match min_width
.
If twos_complement
is true, negative values will be displayed as the 2’s complement representation. Otherwise
they will be prefixed with a ‘-’ sign.
§Panics
Panics if min_width
is 0.
ui.add(egui::DragValue::new(&mut my_i32).octal(22, false));
Sourcepub fn hexadecimal(
self,
min_width: usize,
twos_complement: bool,
upper: bool,
) -> DragValue<'a>
pub fn hexadecimal( self, min_width: usize, twos_complement: bool, upper: bool, ) -> DragValue<'a>
Set custom_formatter
and custom_parser
to display and parse numbers as hexadecimal integers. Floating point
numbers are not supported.
min_width
specifies the minimum number of displayed digits; if the number is shorter than this, it will be
prefixed with additional 0s to match min_width
.
If twos_complement
is true, negative values will be displayed as the 2’s complement representation. Otherwise
they will be prefixed with a ‘-’ sign.
§Panics
Panics if min_width
is 0.
ui.add(egui::DragValue::new(&mut my_i32).hexadecimal(16, false, true));
Sourcepub fn update_while_editing(self, update: bool) -> DragValue<'a>
pub fn update_while_editing(self, update: bool) -> DragValue<'a>
Update the value on each key press when text-editing the value.
Default: true
.
If false
, the value will only be updated when user presses enter or deselects the value.
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for DragValue<'a>
impl<'a> !RefUnwindSafe for DragValue<'a>
impl<'a> !Send for DragValue<'a>
impl<'a> !Sync for DragValue<'a>
impl<'a> Unpin for DragValue<'a>
impl<'a> !UnwindSafe for DragValue<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.