simvx.core.ui.theme¶
Shared application theme – single source of truth for colours and layout.
AppTheme extends the base Theme with named attributes covering
backgrounds, text, accents, semantic colours, buttons, editor viewports,
gizmos, IDE minimap, autocomplete, and scrollbar styling.
SyntaxTheme provides syntax highlighting colours for code editors.
Variants are driven by module-level palette dicts and StyleBoxConfig
strategies. Factory classmethods (dark(), light(), monokai(),
abyss(), midnight(), solarised_dark(), nord()) return
pre-configured instances. Module-level get_theme() / set_theme()
manage a runtime-swappable singleton.
This module is the public facade: the data types (StyleBox,
SyntaxTheme, StyleBoxConfig) live in the private _theme_types
leaf and the palette builders / per-variant configs in _theme_palettes;
both are re-exported / consumed here so consumers only import from
simvx.core.ui.theme (or simvx.core.ui).
Usage::
from simvx.core.ui.theme import AppTheme, get_theme, set_theme
theme = get_theme() # module-level singleton (dark by default)
bg = theme.bg # direct attribute access
set_theme(AppTheme.monokai()) # runtime theme switch
Module Contents¶
Classes¶
Full application theme with named colour and layout attributes. |
Functions¶
Return the current application theme singleton. |
|
Return the current theme generation counter. |
|
Swap the module-level theme singleton and bump the generation counter. |
|
Return multiple of the theme font size in logical pixels. |
Data¶
API¶
- simvx.core.ui.theme.log¶
‘getLogger(…)’
- simvx.core.ui.theme.__all__¶
[‘StyleBox’, ‘SyntaxTheme’, ‘StyleBoxConfig’, ‘AppTheme’, ‘get_theme’, ‘set_theme’, ‘theme_generatio…
- class simvx.core.ui.theme.AppTheme(palette: dict[str, Any] | None = None, stylebox_cfg: simvx.core.ui._theme_types.StyleBoxConfig | None = None)[source]¶
Bases:
simvx.core.ui.types.ThemeFull application theme with named colour and layout attributes.
Subclasses :class:
ThemesoControl.get_theme()still works. All attributes are also written intoself.colours/self.sizesso the dict-basedget_colour()/get_size()API stays valid.Initialization
- bg_black: simvx.core.ui._theme_types.Colour4¶
None
- bg_darkest: simvx.core.ui._theme_types.Colour4¶
None
- bg_darker: simvx.core.ui._theme_types.Colour4¶
None
- bg_dark: simvx.core.ui._theme_types.Colour4¶
None
- bg: simvx.core.ui._theme_types.Colour4¶
None
- bg_light: simvx.core.ui._theme_types.Colour4¶
None
- bg_lighter: simvx.core.ui._theme_types.Colour4¶
None
- bg_input: simvx.core.ui._theme_types.Colour4¶
None
- panel_bg: simvx.core.ui._theme_types.Colour4¶
None
- header_bg: simvx.core.ui._theme_types.Colour4¶
None
- toolbar_bg: simvx.core.ui._theme_types.Colour4¶
None
- status_bar_bg: simvx.core.ui._theme_types.Colour4¶
None
- section_bg: simvx.core.ui._theme_types.Colour4¶
None
- text: simvx.core.ui._theme_types.Colour4¶
None
- text_bright: simvx.core.ui._theme_types.Colour4¶
None
- text_label: simvx.core.ui._theme_types.Colour4¶
None
- text_dim: simvx.core.ui._theme_types.Colour4¶
None
- text_muted: simvx.core.ui._theme_types.Colour4¶
None
- text_faint: simvx.core.ui._theme_types.Colour4¶
None
- accent: simvx.core.ui._theme_types.Colour4¶
None
- error: simvx.core.ui._theme_types.Colour4¶
None
- warning: simvx.core.ui._theme_types.Colour4¶
None
- success: simvx.core.ui._theme_types.Colour4¶
None
- info: simvx.core.ui._theme_types.Colour4¶
None
- selection: simvx.core.ui._theme_types.Colour4¶
None
- selection_bg: simvx.core.ui._theme_types.Colour4¶
None
- hover_bg: simvx.core.ui._theme_types.Colour4¶
None
- highlight: simvx.core.ui._theme_types.Colour4¶
None
- border: simvx.core.ui._theme_types.Colour4¶
None
- border_light: simvx.core.ui._theme_types.Colour4¶
None
- btn_bg: simvx.core.ui._theme_types.Colour4¶
None
- btn_hover: simvx.core.ui._theme_types.Colour4¶
None
- btn_pressed: simvx.core.ui._theme_types.Colour4¶
None
- btn_border: simvx.core.ui._theme_types.Colour4¶
None
- btn_primary: simvx.core.ui._theme_types.Colour4¶
None
- btn_danger: simvx.core.ui._theme_types.Colour4¶
None
- input_border: simvx.core.ui._theme_types.Colour4¶
None
- input_focus: simvx.core.ui._theme_types.Colour4¶
None
- placeholder: simvx.core.ui._theme_types.Colour4¶
None
- scrollbar_hover: simvx.core.ui._theme_types.Colour4¶
None
- scrollbar_track: simvx.core.ui._theme_types.Colour4¶
None
- tab_bg: simvx.core.ui._theme_types.Colour4¶
None
- tab_active: simvx.core.ui._theme_types.Colour4¶
None
- tab_hover: simvx.core.ui._theme_types.Colour4¶
None
- tab_text: simvx.core.ui._theme_types.Colour4¶
None
- tab_active_text: simvx.core.ui._theme_types.Colour4¶
None
- tree_bg: simvx.core.ui._theme_types.Colour4¶
None
- tree_select: simvx.core.ui._theme_types.Colour4¶
None
- tree_hover: simvx.core.ui._theme_types.Colour4¶
None
- tree_arrow: simvx.core.ui._theme_types.Colour4¶
None
- check_colour: simvx.core.ui._theme_types.Colour4¶
None
- check_box: simvx.core.ui._theme_types.Colour4¶
None
- slider_fill: simvx.core.ui._theme_types.Colour4¶
None
- slider_handle: simvx.core.ui._theme_types.Colour4¶
None
- dock_title_bg: simvx.core.ui._theme_types.Colour4¶
None
- dock_title_text: simvx.core.ui._theme_types.Colour4¶
None
- popup_bg: simvx.core.ui._theme_types.Colour4¶
None
- popup_hover: simvx.core.ui._theme_types.Colour4¶
None
- popup_separator: simvx.core.ui._theme_types.Colour4¶
None
- divider: simvx.core.ui._theme_types.Colour4¶
None
- divider_hover: simvx.core.ui._theme_types.Colour4¶
None
- current_line: simvx.core.ui._theme_types.Colour4¶
None
- bracket_match: simvx.core.ui._theme_types.Colour4¶
None
- bracket_mismatch: simvx.core.ui._theme_types.Colour4¶
None
- line_number: simvx.core.ui._theme_types.Colour4¶
None
- gutter_bg: simvx.core.ui._theme_types.Colour4¶
None
- syntax: simvx.core.ui._theme_types.SyntaxTheme¶
None
- viewport_bg: simvx.core.ui._theme_types.Colour4¶
None
- gizmo_x: simvx.core.ui._theme_types.Colour4¶
None
- gizmo_y: simvx.core.ui._theme_types.Colour4¶
None
- gizmo_z: simvx.core.ui._theme_types.Colour4¶
None
- selection_outline: simvx.core.ui._theme_types.Colour4¶
None
- grid_major: simvx.core.ui._theme_types.Colour4¶
None
- grid_minor: simvx.core.ui._theme_types.Colour4¶
None
- minimap_text: simvx.core.ui._theme_types.Colour4¶
None
- minimap_keyword: simvx.core.ui._theme_types.Colour4¶
None
- minimap_string: simvx.core.ui._theme_types.Colour4¶
None
- minimap_comment: simvx.core.ui._theme_types.Colour4¶
None
- autocomplete_bg: simvx.core.ui._theme_types.Colour4¶
None
- autocomplete_selected: simvx.core.ui._theme_types.Colour4¶
None
- autocomplete_border: simvx.core.ui._theme_types.Colour4¶
None
- autocomplete_hover: simvx.core.ui._theme_types.Colour4¶
None
- autocomplete_dim: simvx.core.ui._theme_types.Colour4¶
None
- autocomplete_kind: simvx.core.ui._theme_types.Colour4¶
None
- scrollbar_bg: simvx.core.ui._theme_types.Colour4¶
None
- scrollbar_fg: simvx.core.ui._theme_types.Colour4¶
None
- header_h: float¶
None
- row_h: float¶
None
- tab_h: float¶
None
- font_size: float¶
None
- ui_scale: float¶
None
- scrollbar_width: float¶
None
- dock_title_h: float¶
None
- btn_style_normal: simvx.core.ui._theme_types.StyleBox¶
None
- btn_style_hover: simvx.core.ui._theme_types.StyleBox¶
None
- btn_style_pressed: simvx.core.ui._theme_types.StyleBox¶
None
- btn_style_disabled: simvx.core.ui._theme_types.StyleBox¶
None
- btn_style_focused: simvx.core.ui._theme_types.StyleBox¶
None
- panel_style: simvx.core.ui._theme_types.StyleBox¶
None
- input_style_normal: simvx.core.ui._theme_types.StyleBox¶
None
- input_style_focused: simvx.core.ui._theme_types.StyleBox¶
None
- input_style_disabled: simvx.core.ui._theme_types.StyleBox¶
None
- tab_style_normal: simvx.core.ui._theme_types.StyleBox¶
None
- tab_style_active: simvx.core.ui._theme_types.StyleBox¶
None
- tab_style_hover: simvx.core.ui._theme_types.StyleBox¶
None
- popup_style: simvx.core.ui._theme_types.StyleBox¶
None
- popup_style_hover: simvx.core.ui._theme_types.StyleBox¶
None
- dock_title_style: simvx.core.ui._theme_types.StyleBox¶
None
- classmethod dark() simvx.core.ui.theme.AppTheme[source]¶
Dark theme (default).
- classmethod abyss() simvx.core.ui.theme.AppTheme[source]¶
Abyss: near-black with a subtle cool-blue tint. OLED-friendly.
- classmethod midnight() simvx.core.ui.theme.AppTheme[source]¶
Midnight: near-black with a subtle warm-green tint. OLED-friendly.
- classmethod light() simvx.core.ui.theme.AppTheme[source]¶
Light theme with bright backgrounds and gradient buttons.
- classmethod monokai() simvx.core.ui.theme.AppTheme[source]¶
Monokai-inspired theme.
- classmethod solarised_dark() simvx.core.ui.theme.AppTheme[source]¶
Solarised Dark: Ethan Schoonover’s warm-tinted dark palette.
- classmethod nord() simvx.core.ui.theme.AppTheme[source]¶
Nord: Arctic, north-bluish palette by Arctic Ice Studio.
- get_colour(key: str, default=(1, 1, 1, 1)) tuple[float, float, float, float]¶
- get_size(key: str, default: float = 0) float¶
- simvx.core.ui.theme.get_theme() simvx.core.ui.theme.AppTheme[source]¶
Return the current application theme singleton.
- simvx.core.ui.theme.theme_generation() int[source]¶
Return the current theme generation counter.
Incremented by
set_theme(). Draw caches use this to detect global theme changes without walking the widget tree.
- simvx.core.ui.theme.set_theme(theme: simvx.core.ui.theme.AppTheme) None[source]¶
Swap the module-level theme singleton and bump the generation counter.
- simvx.core.ui.theme.em(multiple: float) float[source]¶
Return multiple of the theme font size in logical pixels.
Use for layout dimensions that should scale with the user’s font-size preference. Does NOT multiply by
ui_scale: UI layout works in logical (window) coordinates; the GPU rendering pipeline handles the logical-to-physical conversion separately via Draw2DPass.