From d9d0fea9712ac1fcb66abc59677191097047b844 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Thu, 4 Jun 2026 23:24:19 -0400 Subject: [PATCH] refactor(themes): remove hardcoded _PALETTES from theme_2.py --- src/theme_2.py | 207 ++----------------------------------------------- 1 file changed, 6 insertions(+), 201 deletions(-) diff --git a/src/theme_2.py b/src/theme_2.py index b465ffc5..5a71c26b 100644 --- a/src/theme_2.py +++ b/src/theme_2.py @@ -25,216 +25,21 @@ from src.theme_models import ThemeFile, load_themes_from_dir, load_themes_from_t def _c(r: int, g: int, b: int, a: int = 255) -> tuple[float, float, float, float]: """ - Convert 0-255 RGBA to 0.0-1.0 floats. [C: src/theme_nerv.py:module] """ return (r / 255.0, g / 255.0, b / 255.0, a / 255.0) -_PALETTES: dict[str, dict[int, tuple]] = { +_BUILTIN_PALETTES: dict[str, dict[int, tuple]] = { "ImGui Dark": {}, # empty = use imgui dark defaults "NERV": {}, - "10x Dark": { - imgui.Col_.window_bg: _c( 34, 32, 28), - imgui.Col_.child_bg: _c( 30, 28, 24), - imgui.Col_.popup_bg: _c( 35, 30, 20), - imgui.Col_.border: _c( 60, 55, 50), - imgui.Col_.border_shadow: _c( 0, 0, 0, 0), - imgui.Col_.frame_bg: _c( 45, 42, 38), - imgui.Col_.frame_bg_hovered: _c( 60, 56, 50), - imgui.Col_.frame_bg_active: _c( 75, 70, 62), - imgui.Col_.title_bg: _c( 40, 35, 25), - imgui.Col_.title_bg_active: _c( 60, 45, 15), - imgui.Col_.title_bg_collapsed: _c( 30, 27, 20), - imgui.Col_.menu_bar_bg: _c( 35, 30, 20), - imgui.Col_.scrollbar_bg: _c( 30, 28, 24), - imgui.Col_.scrollbar_grab: _c( 80, 78, 72), - imgui.Col_.scrollbar_grab_hovered: _c(100, 100, 92), - imgui.Col_.scrollbar_grab_active: _c(120, 118, 110), - imgui.Col_.check_mark: _c(194, 164, 74), - imgui.Col_.slider_grab: _c(126, 78, 14), - imgui.Col_.slider_grab_active: _c(194, 140, 30), - imgui.Col_.button: _c( 83, 76, 60), - imgui.Col_.button_hovered: _c(126, 78, 14), - imgui.Col_.button_active: _c(115, 90, 70), - imgui.Col_.header: _c( 83, 76, 60), - imgui.Col_.header_hovered: _c(126, 78, 14), - imgui.Col_.header_active: _c(115, 90, 70), - imgui.Col_.separator: _c( 70, 65, 55), - imgui.Col_.separator_hovered: _c(126, 78, 14), - imgui.Col_.separator_active: _c(194, 164, 74), - imgui.Col_.resize_grip: _c( 60, 55, 44), - imgui.Col_.resize_grip_hovered: _c(126, 78, 14), - imgui.Col_.resize_grip_active: _c(194, 164, 74), - imgui.Col_.tab: _c( 83, 83, 70), - imgui.Col_.tab_hovered: _c(126, 77, 25), - imgui.Col_.tab_selected: _c(126, 77, 25), - imgui.Col_.tab_dimmed: _c( 60, 58, 50), - imgui.Col_.tab_dimmed_selected: _c( 90, 80, 55), - imgui.Col_.docking_preview: _c(126, 78, 14, 180), - imgui.Col_.docking_empty_bg: _c( 20, 20, 20), - imgui.Col_.text: _c(200, 200, 200), - imgui.Col_.text_disabled: _c(130, 130, 120), - imgui.Col_.text_selected_bg: _c( 59, 86, 142, 180), - imgui.Col_.table_header_bg: _c( 55, 50, 38), - imgui.Col_.table_border_strong: _c( 70, 65, 55), - imgui.Col_.table_border_light: _c( 50, 47, 42), - imgui.Col_.table_row_bg: _c( 0, 0, 0, 0), - imgui.Col_.table_row_bg_alt: _c( 40, 38, 34, 40), - imgui.Col_.nav_cursor: _c(126, 78, 14), - imgui.Col_.nav_windowing_highlight: _c(194, 164, 74, 180), - imgui.Col_.nav_windowing_dim_bg: _c( 20, 20, 20, 80), - imgui.Col_.modal_window_dim_bg: _c( 10, 10, 10, 100), - }, - "Nord Dark": { - imgui.Col_.window_bg: _c( 36, 41, 49), - imgui.Col_.child_bg: _c( 30, 34, 42), - imgui.Col_.popup_bg: _c( 36, 41, 49), - imgui.Col_.border: _c( 59, 66, 82), - imgui.Col_.border_shadow: _c( 0, 0, 0, 0), - imgui.Col_.frame_bg: _c( 46, 52, 64), - imgui.Col_.frame_bg_hovered: _c( 59, 66, 82), - imgui.Col_.frame_bg_active: _c( 67, 76, 94), - imgui.Col_.title_bg: _c( 36, 41, 49), - imgui.Col_.title_bg_active: _c( 59, 66, 82), - imgui.Col_.title_bg_collapsed: _c( 30, 34, 42), - imgui.Col_.menu_bar_bg: _c( 46, 52, 64), - imgui.Col_.scrollbar_bg: _c( 30, 34, 42), - imgui.Col_.scrollbar_grab: _c( 76, 86, 106), - imgui.Col_.scrollbar_grab_hovered: _c( 94, 129, 172), - imgui.Col_.scrollbar_grab_active: _c(129, 161, 193), - imgui.Col_.check_mark: _c(136, 192, 208), - imgui.Col_.slider_grab: _c( 94, 129, 172), - imgui.Col_.slider_grab_active: _c(129, 161, 193), - imgui.Col_.button: _c( 59, 66, 82), - imgui.Col_.button_hovered: _c( 94, 129, 172), - imgui.Col_.button_active: _c(129, 161, 193), - imgui.Col_.header: _c( 59, 66, 82), - imgui.Col_.header_hovered: _c( 94, 129, 172), - imgui.Col_.header_active: _c(129, 161, 193), - imgui.Col_.separator: _c( 59, 66, 82), - imgui.Col_.separator_hovered: _c( 94, 129, 172), - imgui.Col_.separator_active: _c(136, 192, 208), - imgui.Col_.resize_grip: _c( 59, 66, 82), - imgui.Col_.resize_grip_hovered: _c( 94, 129, 172), - imgui.Col_.resize_grip_active: _c(136, 192, 208), - imgui.Col_.tab: _c( 46, 52, 64), - imgui.Col_.tab_hovered: _c( 94, 129, 172), - imgui.Col_.tab_selected: _c( 76, 86, 106), - imgui.Col_.tab_dimmed: _c( 36, 41, 49), - imgui.Col_.tab_dimmed_selected: _c( 59, 66, 82), - imgui.Col_.docking_preview: _c( 94, 129, 172, 180), - imgui.Col_.docking_empty_bg: _c( 20, 22, 28), - imgui.Col_.text: _c(216, 222, 233), - imgui.Col_.text_disabled: _c(116, 128, 150), - imgui.Col_.text_selected_bg: _c( 94, 129, 172, 180), - imgui.Col_.table_header_bg: _c( 59, 66, 82), - imgui.Col_.table_border_strong: _c( 76, 86, 106), - imgui.Col_.table_border_light: _c( 59, 66, 82), - imgui.Col_.table_row_bg: _c( 0, 0, 0, 0), - imgui.Col_.table_row_bg_alt: _c( 46, 52, 64, 40), - imgui.Col_.nav_cursor: _c(136, 192, 208), - imgui.Col_.modal_window_dim_bg: _c( 10, 12, 16, 100), - }, - "Monokai": { - imgui.Col_.window_bg: _c( 39, 40, 34), - imgui.Col_.child_bg: _c( 34, 35, 29), - imgui.Col_.popup_bg: _c( 39, 40, 34), - imgui.Col_.border: _c( 60, 61, 52), - imgui.Col_.border_shadow: _c( 0, 0, 0, 0), - imgui.Col_.frame_bg: _c( 50, 51, 44), - imgui.Col_.frame_bg_hovered: _c( 65, 67, 56), - imgui.Col_.frame_bg_active: _c( 80, 82, 68), - imgui.Col_.title_bg: _c( 39, 40, 34), - imgui.Col_.title_bg_active: _c( 73, 72, 62), - imgui.Col_.title_bg_collapsed: _c( 30, 31, 26), - imgui.Col_.menu_bar_bg: _c( 50, 51, 44), - imgui.Col_.scrollbar_bg: _c( 34, 35, 29), - imgui.Col_.scrollbar_grab: _c( 80, 80, 72), - imgui.Col_.scrollbar_grab_hovered: _c(102, 217, 39), - imgui.Col_.scrollbar_grab_active: _c(166, 226, 46), - imgui.Col_.check_mark: _c(166, 226, 46), - imgui.Col_.slider_grab: _c(102, 217, 39), - imgui.Col_.slider_grab_active: _c(166, 226, 46), - imgui.Col_.button: _c( 73, 72, 62), - imgui.Col_.button_hovered: _c(249, 38, 114), - imgui.Col_.button_active: _c(198, 30, 92), - imgui.Col_.header: _c( 73, 72, 62), - imgui.Col_.header_hovered: _c(249, 38, 114), - imgui.Col_.header_active: _c(198, 30, 92), - imgui.Col_.separator: _c( 60, 61, 52), - imgui.Col_.separator_hovered: _c(249, 38, 114), - imgui.Col_.separator_active: _c(166, 226, 46), - imgui.Col_.resize_grip: _c( 73, 72, 62), - imgui.Col_.resize_grip_hovered: _c(249, 38, 114), - imgui.Col_.resize_grip_active: _c(166, 226, 46), - imgui.Col_.tab: _c( 73, 72, 62), - imgui.Col_.tab_hovered: _c(249, 38, 114), - imgui.Col_.tab_selected: _c(249, 38, 114), - imgui.Col_.tab_dimmed: _c( 50, 51, 44), - imgui.Col_.tab_dimmed_selected: _c( 90, 88, 76), - imgui.Col_.docking_preview: _c(249, 38, 114, 180), - imgui.Col_.docking_empty_bg: _c( 20, 20, 18), - imgui.Col_.text: _c(248, 248, 242), - imgui.Col_.text_disabled: _c(117, 113, 94), - imgui.Col_.text_selected_bg: _c(249, 38, 114, 150), - imgui.Col_.table_header_bg: _c( 60, 61, 52), - imgui.Col_.table_border_strong: _c( 73, 72, 62), - imgui.Col_.table_border_light: _c( 55, 56, 48), - imgui.Col_.table_row_bg: _c( 0, 0, 0, 0), - imgui.Col_.table_row_bg_alt: _c( 50, 51, 44, 40), - imgui.Col_.nav_cursor: _c(166, 226, 46), - imgui.Col_.modal_window_dim_bg: _c( 10, 10, 8, 100), - }, - "Binks": { - imgui.Col_.text: _c( 0, 0, 0, 255), - imgui.Col_.text_disabled: _c(153, 153, 153, 255), - imgui.Col_.window_bg: _c(240, 240, 240, 240), - imgui.Col_.child_bg: _c( 0, 0, 0, 0), - imgui.Col_.popup_bg: _c(255, 255, 255, 240), - imgui.Col_.border: _c( 0, 0, 0, 99), - imgui.Col_.border_shadow: _c(255, 255, 255, 25), - imgui.Col_.frame_bg: _c(255, 255, 255, 240), - imgui.Col_.frame_bg_hovered: _c( 66, 150, 250, 102), - imgui.Col_.frame_bg_active: _c( 66, 150, 250, 171), - imgui.Col_.title_bg: _c(245, 245, 245, 255), - imgui.Col_.title_bg_collapsed: _c(255, 255, 255, 130), - imgui.Col_.title_bg_active: _c(209, 209, 209, 255), - imgui.Col_.menu_bar_bg: _c(219, 219, 219, 255), - imgui.Col_.scrollbar_bg: _c(250, 250, 250, 135), - imgui.Col_.scrollbar_grab: _c(176, 176, 176, 255), - imgui.Col_.scrollbar_grab_hovered: _c(150, 150, 150, 255), - imgui.Col_.scrollbar_grab_active: _c(125, 125, 125, 255), - imgui.Col_.check_mark: _c( 66, 150, 250, 255), - imgui.Col_.slider_grab: _c( 61, 133, 224, 255), - imgui.Col_.slider_grab_active: _c( 66, 150, 250, 255), - imgui.Col_.button: _c( 66, 150, 250, 102), - imgui.Col_.button_hovered: _c( 66, 150, 250, 255), - imgui.Col_.button_active: _c( 15, 135, 250, 255), - imgui.Col_.header: _c( 66, 150, 250, 79), - imgui.Col_.header_hovered: _c( 66, 150, 250, 204), - imgui.Col_.header_active: _c( 66, 150, 250, 255), - imgui.Col_.separator: _c(100, 100, 100, 255), - imgui.Col_.resize_grip: _c(255, 255, 255, 127), - imgui.Col_.resize_grip_hovered: _c( 66, 150, 250, 171), - imgui.Col_.resize_grip_active: _c( 66, 150, 250, 242), - imgui.Col_.plot_lines: _c( 99, 99, 99, 255), - imgui.Col_.plot_lines_hovered: _c(255, 110, 89, 255), - imgui.Col_.plot_histogram: _c(230, 178, 0, 255), - imgui.Col_.plot_histogram_hovered: _c(255, 153, 0, 255), - imgui.Col_.text_selected_bg: _c( 66, 150, 250, 89), - imgui.Col_.modal_window_dim_bg: _c( 51, 51, 51, 89), - }, } - -def _hex(rgb: tuple[int, int, int]) -> tuple[float, float, float, float]: - return (rgb[0] / 255.0, rgb[1] / 255.0, rgb[2] / 255.0, 1.0) - - _TOML_PALETTES: dict[str, ThemeFile] = {} _TOML_COLOUR_CACHE: dict[str, dict[int, tuple[float, float, float, float]]] = {} +def _hex(rgb: tuple[int, int, int]) -> tuple[float, float, float, float]: + return (rgb[0] / 255.0, rgb[1] / 255.0, rgb[2] / 255.0, 1.0) def _build_imgui_colour_dict(theme: ThemeFile) -> dict[int, tuple[float, float, float, float]]: from imgui_bundle import imgui @@ -251,7 +56,7 @@ def _build_imgui_colour_dict(theme: ThemeFile) -> dict[int, tuple[float, float, def get_palette_names() -> list[str]: """Returns a list of all available palettes, including hello_imgui built-ins and TOML-loaded themes.""" - names = list(_PALETTES.keys()) + names = list(_BUILTIN_PALETTES.keys()) names.extend(sorted(_TOML_PALETTES.keys())) hi_themes = [name for name in dir(hello_imgui.ImGuiTheme_) if not name.startswith('_') and name != 'count'] hi_themes = [n for n in hi_themes if not hasattr(int, n)] @@ -319,8 +124,8 @@ def apply(palette_name: str) -> None: return # 1. Apply base colors - if palette_name in _PALETTES: - colours = _PALETTES[palette_name] + if palette_name in _BUILTIN_PALETTES: + colours = _BUILTIN_PALETTES[palette_name] imgui.style_colors_dark() style = imgui.get_style() for col_enum, rgba in colours.items():