refactor: add website code
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* theme.hpp
|
||||
* Montauk Toolkit theme tokens and color helpers
|
||||
* Copyright (c) 2026 Daniel Hammer
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "gui/gui.hpp"
|
||||
|
||||
namespace gui::mtk {
|
||||
|
||||
inline Color mix(Color base, Color tint, uint8_t tint_alpha) {
|
||||
auto blend = [tint_alpha](uint8_t a, uint8_t b) -> uint8_t {
|
||||
return (uint8_t)((((uint16_t)a * (255 - tint_alpha)) +
|
||||
((uint16_t)b * tint_alpha) + 127) / 255);
|
||||
};
|
||||
return Color::from_rgb(blend(base.r, tint.r),
|
||||
blend(base.g, tint.g),
|
||||
blend(base.b, tint.b));
|
||||
}
|
||||
|
||||
inline Color lighten(Color c, uint8_t amount) {
|
||||
return mix(c, colors::WHITE, amount);
|
||||
}
|
||||
|
||||
inline Color darken(Color c, uint8_t amount) {
|
||||
return mix(c, colors::BLACK, amount);
|
||||
}
|
||||
|
||||
struct Theme {
|
||||
Color window_bg;
|
||||
Color surface;
|
||||
Color surface_alt;
|
||||
Color surface_hover;
|
||||
Color border;
|
||||
Color text;
|
||||
Color text_muted;
|
||||
Color text_subtle;
|
||||
Color text_inverse;
|
||||
|
||||
Color accent;
|
||||
Color accent_hover;
|
||||
Color accent_soft;
|
||||
Color accent_fg;
|
||||
Color selection;
|
||||
|
||||
Color danger;
|
||||
Color danger_hover;
|
||||
Color danger_soft;
|
||||
Color danger_fg;
|
||||
|
||||
Color disabled_bg;
|
||||
Color disabled_fg;
|
||||
|
||||
Color badge_admin_bg;
|
||||
Color badge_admin_fg;
|
||||
Color badge_user_bg;
|
||||
Color badge_user_fg;
|
||||
|
||||
int radius_sm;
|
||||
int radius_md;
|
||||
int control_h;
|
||||
int tab_h;
|
||||
int gap_xs;
|
||||
int gap_sm;
|
||||
int gap_md;
|
||||
int gap_lg;
|
||||
};
|
||||
|
||||
inline Theme make_theme(Color accent = colors::ACCENT) {
|
||||
Theme theme {};
|
||||
theme.window_bg = colors::WINDOW_BG;
|
||||
theme.surface = Color::from_rgb(0xF5, 0xF5, 0xF5);
|
||||
theme.surface_alt = Color::from_rgb(0xF8, 0xF8, 0xF8);
|
||||
theme.surface_hover = mix(theme.surface, accent, 18);
|
||||
theme.border = colors::BORDER;
|
||||
theme.text = colors::TEXT_COLOR;
|
||||
theme.text_muted = Color::from_rgb(0x88, 0x88, 0x88);
|
||||
theme.text_subtle = Color::from_rgb(0x66, 0x66, 0x66);
|
||||
theme.text_inverse = colors::WHITE;
|
||||
|
||||
theme.accent = accent;
|
||||
theme.accent_hover = darken(accent, 32);
|
||||
theme.accent_soft = lighten(accent, 214);
|
||||
theme.accent_fg = colors::WHITE;
|
||||
theme.selection = accent;
|
||||
|
||||
theme.danger = Color::from_rgb(0xD0, 0x3E, 0x3E);
|
||||
theme.danger_hover = Color::from_rgb(0xDD, 0x44, 0x44);
|
||||
theme.danger_soft = Color::from_rgb(0xF7, 0xDF, 0xDF);
|
||||
theme.danger_fg = colors::WHITE;
|
||||
|
||||
theme.disabled_bg = Color::from_rgb(0xCC, 0xCC, 0xCC);
|
||||
theme.disabled_fg = colors::WHITE;
|
||||
|
||||
theme.badge_admin_bg = Color::from_rgb(0xE8, 0xD8, 0xF0);
|
||||
theme.badge_admin_fg = Color::from_rgb(0x7B, 0x3E, 0xB8);
|
||||
theme.badge_user_bg = Color::from_rgb(0xE0, 0xE8, 0xF0);
|
||||
theme.badge_user_fg = Color::from_rgb(0x36, 0x7B, 0xF0);
|
||||
|
||||
theme.radius_sm = 3;
|
||||
theme.radius_md = 4;
|
||||
theme.control_h = 30;
|
||||
theme.tab_h = 36;
|
||||
theme.gap_xs = 2;
|
||||
theme.gap_sm = 6;
|
||||
theme.gap_md = 10;
|
||||
theme.gap_lg = 16;
|
||||
return theme;
|
||||
}
|
||||
|
||||
} // namespace gui::mtk
|
||||
Reference in New Issue
Block a user