#![doc = include_str!("../README.md")]
#![allow(clippy::needless_doctest_main)]
use fltk::{app, enums::Color};
pub mod color_themes;
pub mod colors;
pub mod widget_schemes;
pub mod widget_themes;
#[derive(Default, Clone, Debug)]
pub struct ColorMap {
pub index: u8,
pub r: u8,
pub g: u8,
pub b: u8,
}
#[macro_export]
macro_rules! cmap {
($i:tt, $r:tt, $g:tt, $b:tt) => {
ColorMap {
index: $i,
r: $r,
g: $g,
b: $b,
}
};
}
#[derive(Debug, Clone)]
pub struct ColorTheme(pub Vec<ColorMap>);
impl ColorTheme {
pub fn from_colormap(map: &[ColorMap]) -> ColorTheme {
ColorTheme(map.to_vec())
}
pub fn new(map: &[ColorMap]) -> ColorTheme {
ColorTheme(map.to_vec())
}
pub fn apply(&self) {
for elem in &self.0 {
app::set_color(Color::by_index(elem.index), elem.r, elem.g, elem.b);
}
app::redraw();
}
}
pub(crate) fn activated_color(c: Color) -> Color {
if fltk::app::draw_frame_active() {
c
} else {
c.inactive()
}
}
#[derive(Debug, Clone, Copy)]
pub enum ThemeType {
Classic,
Aero,
Metro,
AquaClassic,
Greybird,
Blue,
Dark,
HighContrast,
}
#[derive(Debug, Clone, Copy)]
pub struct WidgetTheme {
theme: ThemeType,
}
impl WidgetTheme {
pub fn new(theme: ThemeType) -> Self {
Self { theme }
}
pub fn apply(&self) {
match self.theme {
ThemeType::Classic => widget_themes::classic::use_classic_theme(),
ThemeType::Aero => widget_themes::aero::use_aero_theme(),
ThemeType::AquaClassic => widget_themes::aqua_classic::use_aqua_classic_theme(),
ThemeType::Dark => widget_themes::dark::use_dark_theme(),
ThemeType::HighContrast => widget_themes::high_contrast::use_high_contrast_theme(),
ThemeType::Blue => widget_themes::blue::use_blue_theme(),
ThemeType::Metro => widget_themes::metro::use_metro_theme(),
ThemeType::Greybird => widget_themes::greybird::use_greybird_theme(),
}
}
}
#[derive(Debug, Clone, Copy)]
pub enum SchemeType {
Aqua,
Clean,
Crystal,
Fluent,
Gleam,
SvgBased,
}
#[derive(Debug, Clone, Copy)]
pub struct WidgetScheme {
scheme: SchemeType,
}
impl WidgetScheme {
pub fn new(scheme: SchemeType) -> Self {
Self { scheme }
}
pub fn apply(&self) {
match self.scheme {
SchemeType::Aqua => widget_schemes::aqua::use_aqua_scheme(),
SchemeType::Clean => widget_schemes::clean::use_clean_scheme(),
SchemeType::Crystal => widget_schemes::crystal::use_crystal_scheme(),
SchemeType::Fluent => widget_schemes::fluent::use_fluent_scheme(),
SchemeType::Gleam => widget_schemes::gleam::use_gleam_scheme(),
SchemeType::SvgBased => widget_schemes::svg_based::use_svg_based_scheme(),
}
}
}