What problem does this solve or what need does it fill?
This allows using percentage with an offset in one dimension.
What solution would you like?
/// A unit of linear measurement
///
/// This is commonly combined with [`Rect`], [`Point`](crate::geometry::Point) and [`Size<T>`].
/// The default value is [`Dimension::Undefined`].
#[derive(Copy, Clone, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum Dimension {
/// The dimension is not given
Undefined,
/// The dimension should be automatically computed
Auto,
/// The dimension is stored in [points](https://en.wikipedia.org/wiki/Point_(typography))
///
/// Each point is about 0.353 mm in size.
Points(f32),
/// The dimension is stored in percentage relative to the parent item.
Percent(f32),
/// The dimension is stored as the sum of percentage relative to the parent item and point.
PercentPoints(f32, f32),
}
impl Dimension {
/// Is this value defined?
pub(crate) fn is_defined(self) -> bool {
matches!(self, Dimension::Points(_) | Dimension::Percent(_) | Dimension::PercentPoints(_, _))
}
}
impl MaybeResolve<Option<f32>> for Dimension {
/// Converts the given [`Dimension`] into a concrete value of points
///
/// Can return `None`
fn maybe_resolve(self, context: Option<f32>) -> Option<f32> {
match self {
Dimension::Points(points) => Some(points),
// parent_dim * percent
Dimension::Percent(percent) => context.map(|dim| dim * percent),
Dimension::PercentPoints(percent, points) => Some(context.map_or(points, |dim| dim * percent + points)),
_ => None,
}
}
}
What alternative(s) have you considered?
I've considered something similar to #225 but thought this was a better option.
What problem does this solve or what need does it fill?
This allows using percentage with an offset in one dimension.
What solution would you like?
What alternative(s) have you considered?
I've considered something similar to #225 but thought this was a better option.