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),
X,
}
#[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, Default, PartialEq, Eq, Ord, PartialOrd, Hash)]
pub enum FrameStyle {
#[default]
None,
Frame,
Popup,
MenuEntry,
NavFocus,
Button,
Tab,
EditBox,
Window,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
pub enum SelectionStyle {
Highlight,
Frame,
Both,
}
impl SelectionStyle {
pub fn is_external(self) -> bool {
matches!(self, SelectionStyle::Frame | SelectionStyle::Both)
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord, PartialOrd, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum TextClass {
Label(bool),
LabelScroll,
AccessLabel(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 | AccessLabel(true) | Edit(true)
)
}
#[inline]
pub fn is_access_key(self) -> bool {
use TextClass::*;
matches!(self, AccessLabel(_) | Button | MenuLabel)
}
}