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.
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¶
Themed background with optional gradient and per-side embossed borders. |
|
Syntax highlighting colour set for code editors. |
|
Strategy for building the per-state StyleBoxes from a colour palette. |
|
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.Colour4¶
None
- class simvx.core.ui.theme.StyleBox(bg_colour: simvx.core.ui.theme.Colour4 = (0.2, 0.2, 0.2, 1.0), bg_gradient: tuple[simvx.core.ui.theme.Colour4, simvx.core.ui.theme.Colour4] | None = None, border_colour: simvx.core.ui.theme.Colour4 = (0.3, 0.3, 0.3, 1.0), border_top: simvx.core.ui.theme.Colour4 | None = None, border_bottom: simvx.core.ui.theme.Colour4 | None = None, border_left: simvx.core.ui.theme.Colour4 | None = None, border_right: simvx.core.ui.theme.Colour4 | None = None, border_width: float = 1.0, content_margin: float = 2.0)[source]¶
Themed background with optional gradient and per-side embossed borders.
Use
draw()to render the background and borders. Useinsetto offset child content past the border + content margin.Initialization
- __slots__¶
(‘bg_colour’, ‘bg_gradient’, ‘border_colour’, ‘border_top’, ‘border_bottom’, ‘border_left’, ‘border_…
- class simvx.core.ui.theme.SyntaxTheme(keyword: simvx.core.ui.theme.Colour4 = (0.4, 0.6, 1.0, 1.0), string: simvx.core.ui.theme.Colour4 = (0.5, 0.9, 0.5, 1.0), comment: simvx.core.ui.theme.Colour4 = (0.5, 0.5, 0.5, 1.0), number: simvx.core.ui.theme.Colour4 = (1.0, 0.7, 0.3, 1.0), decorator: simvx.core.ui.theme.Colour4 = (1.0, 0.9, 0.4, 1.0), builtin: simvx.core.ui.theme.Colour4 = (0.4, 0.9, 0.9, 1.0), normal: simvx.core.ui.theme.Colour4 = (0.9, 0.9, 0.9, 1.0))[source]¶
Syntax highlighting colour set for code editors.
Initialization
- __slots__¶
(‘keyword’, ‘string’, ‘comment’, ‘number’, ‘decorator’, ‘builtin’, ‘normal’)
- class simvx.core.ui.theme.StyleBoxConfig[source]¶
Strategy for building the per-state StyleBoxes from a colour palette.
Defaults match the dark theme (classic emboss, tight margins). Variants override only the knobs that differ.
- button_style: str¶
‘embossed_classic’
- emboss_light: float¶
0.08
- emboss_dark: float¶
0.06
- gradient_amount: float¶
0.0
- hover_uses_accent: bool¶
False
- pressed_uses_accent: bool¶
False
- disabled_bg_darken: float¶
0.04
- disabled_border_darken: float¶
0.08
- input_disabled_darken: float¶
0.02
- flat_content_margin: float¶
0.0
- popup_border_attr: str¶
‘border_light’
- class simvx.core.ui.theme.AppTheme(palette: dict[str, Any] | None = None, stylebox_cfg: simvx.core.ui.theme.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.Colour4¶
None
- bg_darkest: simvx.core.ui.theme.Colour4¶
None
- bg_darker: simvx.core.ui.theme.Colour4¶
None
- bg_dark: simvx.core.ui.theme.Colour4¶
None
- bg: simvx.core.ui.theme.Colour4¶
None
- bg_light: simvx.core.ui.theme.Colour4¶
None
- bg_lighter: simvx.core.ui.theme.Colour4¶
None
- bg_input: simvx.core.ui.theme.Colour4¶
None
- panel_bg: simvx.core.ui.theme.Colour4¶
None
- header_bg: simvx.core.ui.theme.Colour4¶
None
- toolbar_bg: simvx.core.ui.theme.Colour4¶
None
- status_bar_bg: simvx.core.ui.theme.Colour4¶
None
- section_bg: simvx.core.ui.theme.Colour4¶
None
- text: simvx.core.ui.theme.Colour4¶
None
- text_bright: simvx.core.ui.theme.Colour4¶
None
- text_label: simvx.core.ui.theme.Colour4¶
None
- text_dim: simvx.core.ui.theme.Colour4¶
None
- text_muted: simvx.core.ui.theme.Colour4¶
None
- text_faint: simvx.core.ui.theme.Colour4¶
None
- accent: simvx.core.ui.theme.Colour4¶
None
- error: simvx.core.ui.theme.Colour4¶
None
- warning: simvx.core.ui.theme.Colour4¶
None
- success: simvx.core.ui.theme.Colour4¶
None
- info: simvx.core.ui.theme.Colour4¶
None
- selection: simvx.core.ui.theme.Colour4¶
None
- selection_bg: simvx.core.ui.theme.Colour4¶
None
- hover_bg: simvx.core.ui.theme.Colour4¶
None
- highlight: simvx.core.ui.theme.Colour4¶
None
- border: simvx.core.ui.theme.Colour4¶
None
- border_light: simvx.core.ui.theme.Colour4¶
None
- btn_bg: simvx.core.ui.theme.Colour4¶
None
- btn_hover: simvx.core.ui.theme.Colour4¶
None
- btn_pressed: simvx.core.ui.theme.Colour4¶
None
- btn_border: simvx.core.ui.theme.Colour4¶
None
- btn_primary: simvx.core.ui.theme.Colour4¶
None
- btn_danger: simvx.core.ui.theme.Colour4¶
None
- input_border: simvx.core.ui.theme.Colour4¶
None
- input_focus: simvx.core.ui.theme.Colour4¶
None
- placeholder: simvx.core.ui.theme.Colour4¶
None
- scrollbar_hover: simvx.core.ui.theme.Colour4¶
None
- scrollbar_track: simvx.core.ui.theme.Colour4¶
None
- tab_bg: simvx.core.ui.theme.Colour4¶
None
- tab_active: simvx.core.ui.theme.Colour4¶
None
- tab_hover: simvx.core.ui.theme.Colour4¶
None
- tab_text: simvx.core.ui.theme.Colour4¶
None
- tab_active_text: simvx.core.ui.theme.Colour4¶
None
- tree_bg: simvx.core.ui.theme.Colour4¶
None
- tree_select: simvx.core.ui.theme.Colour4¶
None
- tree_hover: simvx.core.ui.theme.Colour4¶
None
- tree_arrow: simvx.core.ui.theme.Colour4¶
None
- check_colour: simvx.core.ui.theme.Colour4¶
None
- check_box: simvx.core.ui.theme.Colour4¶
None
- slider_fill: simvx.core.ui.theme.Colour4¶
None
- slider_handle: simvx.core.ui.theme.Colour4¶
None
- dock_title_bg: simvx.core.ui.theme.Colour4¶
None
- dock_title_text: simvx.core.ui.theme.Colour4¶
None
- popup_bg: simvx.core.ui.theme.Colour4¶
None
- popup_hover: simvx.core.ui.theme.Colour4¶
None
- popup_separator: simvx.core.ui.theme.Colour4¶
None
- divider: simvx.core.ui.theme.Colour4¶
None
- divider_hover: simvx.core.ui.theme.Colour4¶
None
- current_line: simvx.core.ui.theme.Colour4¶
None
- bracket_match: simvx.core.ui.theme.Colour4¶
None
- bracket_mismatch: simvx.core.ui.theme.Colour4¶
None
- line_number: simvx.core.ui.theme.Colour4¶
None
- gutter_bg: simvx.core.ui.theme.Colour4¶
None
- syntax: simvx.core.ui.theme.SyntaxTheme¶
None
- viewport_bg: simvx.core.ui.theme.Colour4¶
None
- gizmo_x: simvx.core.ui.theme.Colour4¶
None
- gizmo_y: simvx.core.ui.theme.Colour4¶
None
- gizmo_z: simvx.core.ui.theme.Colour4¶
None
- selection_outline: simvx.core.ui.theme.Colour4¶
None
- grid_major: simvx.core.ui.theme.Colour4¶
None
- grid_minor: simvx.core.ui.theme.Colour4¶
None
- minimap_text: simvx.core.ui.theme.Colour4¶
None
- minimap_keyword: simvx.core.ui.theme.Colour4¶
None
- minimap_string: simvx.core.ui.theme.Colour4¶
None
- minimap_comment: simvx.core.ui.theme.Colour4¶
None
- autocomplete_bg: simvx.core.ui.theme.Colour4¶
None
- autocomplete_selected: simvx.core.ui.theme.Colour4¶
None
- autocomplete_border: simvx.core.ui.theme.Colour4¶
None
- autocomplete_hover: simvx.core.ui.theme.Colour4¶
None
- autocomplete_dim: simvx.core.ui.theme.Colour4¶
None
- autocomplete_kind: simvx.core.ui.theme.Colour4¶
None
- scrollbar_bg: simvx.core.ui.theme.Colour4¶
None
- scrollbar_fg: simvx.core.ui.theme.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.StyleBox¶
None
- btn_style_hover: simvx.core.ui.theme.StyleBox¶
None
- btn_style_pressed: simvx.core.ui.theme.StyleBox¶
None
- btn_style_disabled: simvx.core.ui.theme.StyleBox¶
None
- btn_style_focused: simvx.core.ui.theme.StyleBox¶
None
- panel_style: simvx.core.ui.theme.StyleBox¶
None
- input_style_normal: simvx.core.ui.theme.StyleBox¶
None
- input_style_focused: simvx.core.ui.theme.StyleBox¶
None
- input_style_disabled: simvx.core.ui.theme.StyleBox¶
None
- tab_style_normal: simvx.core.ui.theme.StyleBox¶
None
- tab_style_active: simvx.core.ui.theme.StyleBox¶
None
- tab_style_hover: simvx.core.ui.theme.StyleBox¶
None
- popup_style: simvx.core.ui.theme.StyleBox¶
None
- popup_style_hover: simvx.core.ui.theme.StyleBox¶
None
- dock_title_style: simvx.core.ui.theme.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.