use crate::dir::Direction;
#[crate::impl_default(MarginStyle::Large)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum MarginStyle {
None,
Inner,
Tiny,
Small,
Large,
Text,
Px(f32),
Em(f32),
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
pub enum MarkStyle {
Point(Direction),
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
pub enum Feature {
Separator,
Mark(MarkStyle),
CheckBox,
RadioBox,
ScrollBar(Direction),
Slider(Direction),
ProgressBar(Direction),
}
impl From<MarkStyle> for Feature {
fn from(style: MarkStyle) -> Self {
Feature::Mark(style)
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
pub enum FrameStyle {
Frame,
Popup,
MenuEntry,
NavFocus,
Button,
EditBox,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TextClass {
Label(bool),
LabelScroll,
AccelLabel(bool),
Button,
MenuLabel,
Edit(bool),
}
impl TextClass {
#[inline]
pub fn single_line(self) -> bool {
!self.multi_line()
}
#[inline]
pub fn multi_line(self) -> bool {
use TextClass::*;
matches!(
self,
Label(true) | LabelScroll | AccelLabel(true) | Edit(true)
)
}
#[inline]
pub fn is_accel(self) -> bool {
use TextClass::*;
matches!(self, AccelLabel(_) | Button | MenuLabel)
}
}