canary-rs/scripts/sao-ui/src/style.rs

174 lines
4.7 KiB
Rust

// Copyright (c) 2022 Marceline Crmaer
// SPDX-License-Identifier: AGPL-3.0-or-later
use canary_script::Color;
/// A reusable set of colors. Used by default widget styles.
pub struct Palette {
pub base: Color,
pub base_hover: Color,
pub base_active: Color,
pub surface: Color,
pub overlay: Color,
pub text: Color,
pub black: Color,
pub red: Color,
pub green: Color,
pub yellow: Color,
pub blue: Color,
pub magenta: Color,
pub cyan: Color,
pub white: Color,
}
impl Palette {
pub fn make_label_pairs(&self) -> Vec<(&'static str, Color)> {
vec![
("Base", self.base),
("Base Hover", self.base_hover),
("Base Active", self.base_active),
("Surface", self.surface),
("Overlay", self.overlay),
("Text", self.text),
("Black", self.black),
("Red", self.red),
("Green", self.green),
("Yellow", self.yellow),
("Blue", self.blue),
("Magenta", self.magenta),
("Cyan", self.cyan),
("White", self.white),
]
}
}
/// The common base color alpha shared between all themes.
pub const BASE_ALPHA: u8 = 230;
/// The common base_hover color alpha shared between all themes.
pub const BASE_HOVER_ALPHA: u8 = 242;
/// Converts 0xrrggbb hex to an opaque [Color].
pub const fn hex(rgb: u32) -> Color {
Color((rgb << 8) | 0xff)
}
/// Sword Art Online color palette.
pub const SAO_PALETTE: Palette = Palette {
base: Color::WHITE.with_alpha(BASE_ALPHA),
base_hover: Color::WHITE.with_alpha(BASE_HOVER_ALPHA),
base_active: Color::YELLOW,
surface: Color::WHITE,
overlay: Color::WHITE,
text: Color::BLACK,
black: Color::BLACK,
red: Color::RED,
green: Color::GREEN,
yellow: Color::YELLOW,
blue: Color::BLUE,
magenta: Color::MAGENTA,
cyan: Color::CYAN,
white: Color::WHITE,
};
/// Rose Pine color palette.
pub const ROSE_PINE_PALETTE: Palette = Palette {
base: hex(0x191724).with_alpha(BASE_ALPHA),
base_hover: hex(0x21202ee0).with_alpha(BASE_HOVER_ALPHA), // Highlight Low
base_active: hex(0x403d52), // Highlight Med
surface: hex(0x1f1d2e),
overlay: hex(0x26233a),
text: hex(0xe0def4),
black: hex(0x6e6a86), // Muted
red: hex(0xeb6f92), // Love
green: hex(0x7fb59f), // ??? (not in Rose Pine?)
yellow: hex(0xf6c177), // Gold
blue: hex(0x31748f), // Pine
magenta: hex(0xc4a7e7), // Iris
cyan: hex(0x9ccfd8), // Foam
white: hex(0xe0def4), // Text
};
/// Rose Pine Moon color palette.
pub const ROSE_PINE_MOON_PALETTE: Palette = Palette {
base: hex(0x232136).with_alpha(BASE_ALPHA),
base_hover: hex(0x2a283e).with_alpha(BASE_HOVER_ALPHA), // Highlight Low
base_active: hex(0x44415a), // Highlight Med
surface: hex(0x2a273f),
overlay: hex(0x393552),
text: hex(0xe0def4),
black: hex(0x6e6a86), // Muted
red: hex(0xeb6f92), // Love
green: hex(0x7fb59f), // ??? (not in Rose Pine?)
yellow: hex(0xf6c177), // Gold
blue: hex(0x3e8fb0), // Pine
magenta: hex(0xc4a7e7), // Iris
cyan: hex(0x9ccfd8), // Foam
white: hex(0xe0def4), // Text
};
/// [Arctica](https://github.com/sashakoshka/arctica) indexable color theme.
pub const ARCTICA: [Color; 24] = [
hex(0x242933),
hex(0x2e3440),
hex(0x3b4252),
hex(0x4c566a),
hex(0xeceff4),
hex(0xd8dee9),
hex(0xc2c9d6),
hex(0xaeb7c6),
hex(0xa8555d),
hex(0xb77763),
hex(0xcdb179),
hex(0x8ba277),
hex(0x769b9b),
hex(0x72a1ae),
hex(0x5e81ac),
hex(0x92738c),
hex(0xbf616a),
hex(0xd08770),
hex(0xebcb8b),
hex(0xa3be8c),
hex(0x8fbcbb),
hex(0x88c0d0),
hex(0x81a1c1),
hex(0xb48ead),
];
/// [Arctica](https://github.com/sashakoshka/arctica) color palette.
pub const ARCTICA_PALETTE: Palette = Palette {
base: ARCTICA[0].with_alpha(BASE_ALPHA),
base_hover: ARCTICA[1].with_alpha(BASE_HOVER_ALPHA),
base_active: ARCTICA[13],
surface: ARCTICA[2],
overlay: ARCTICA[3],
text: ARCTICA[5],
black: ARCTICA[3],
red: ARCTICA[8],
green: ARCTICA[11],
yellow: ARCTICA[10],
blue: ARCTICA[14],
magenta: ARCTICA[15],
cyan: ARCTICA[13],
white: ARCTICA[7],
};
/// Common measurements for widget shapes.
pub struct Metrics {
pub surface_rounding: f32,
}
/// Common default parameters for widget styles.
pub struct Theme {
pub palette: Palette,
pub metrics: Metrics,
}
/// The global theme.
pub const THEME: Theme = Theme {
palette: ARCTICA_PALETTE,
metrics: Metrics {
surface_rounding: 5.0,
},
};