package sectr UI_ThemePtr :: struct { layout : ^UI_LayoutCombo, style : ^UI_StyleCombo, } UI_Theme :: struct { layout : UI_LayoutCombo, style : UI_StyleCombo, } ui_theme_pop :: #force_inline proc() { ui_layout_pop() ui_style_pop() } @(deferred_none = ui_theme_pop) ui_theme_via_layout_style :: #force_inline proc( layout : UI_Layout, style : UI_Style ) { using ui := get_state().ui_context ui_layout_push( layout ) ui_style_push( style ) } @(deferred_none = ui_theme_pop) ui_theme_via_combos :: #force_inline proc( layout : UI_LayoutCombo, style : UI_StyleCombo ) { using ui := get_state().ui_context ui_layout_push( layout ) ui_style_push( style ) } @(deferred_none = ui_theme_pop) ui_theme_via_theme :: #force_inline proc( theme : UI_Theme ) { using ui := get_state().ui_context ui_layout_push( theme.layout ) ui_style_push( theme.style ) } /* UI Themes: Comprise of UI_Box's layout & style Provides presets for themes and their interface for manipulating the combo stacks in UI_State in pairs */ // TODO(Ed): Eventually this will have a configuration wizard, and we'll save the presets /* UI_Theme_Template :: UI_Theme { UI_Layout { flags = {}, anchor = Range2{{},{}}, alignment = {}, text_alignment = {}, font_size = {}, margins = {}, padding = {}, border_width = {}, pos = {}, size = Range2{{},{}} }, UI_Style { bg_color = {}, corner_radii = {}, blur_size = 0, font = {}, text_color = {}, cursor = 0, } } */ @(deferred_none = ui_theme_pop) ui_theme_app_menu_bar_default :: proc() { @static theme : UI_Theme // @static loaded : b32 = false // if true && ! loaded // { layout := UI_Layout { flags = {}, anchor = range2({},{}), alignment = {0.5, 0.5}, text_alignment = {0.0, 1.5}, font_size = 12, margins = {0, 0, 0, 0}, padding = {0, 0, 0, 0}, border_width = 0.6, pos = {0, 0}, size = range2({},{}) } style := UI_Style { bg_color = Color_ThmDark_BG, border_color = Color_ThmDark_Border_Default, corner_radii = {}, blur_size = 0, font = get_state().default_font, text_color = Color_ThmDark_Text_Default, cursor = {}, } // loaded = true layout_combo := to_ui_layout_combo(layout) style_combo := to_ui_style_combo(style) { using layout_combo.hot using style_combo.hot bg_color = Color_ThmDark_Btn_BG_Hot text_color = Color_ThmDark_Text_Hot } { using layout_combo.active using style_combo.active bg_color = Color_ThmDark_Btn_BG_Active text_color = Color_ThmDark_Text_Active } theme = UI_Theme { layout_combo, style_combo } // } ui_layout_push(theme.layout) ui_style_push(theme.style) } @(deferred_none = ui_theme_pop) ui_theme_btn_default :: proc() { @static theme : UI_Theme // @static loaded : b32 = false // if true && ! loaded // { layout := UI_Layout { flags = {}, anchor = range2({},{}), alignment = {0, 0}, text_alignment = {0.5, 0.5}, font_size = 16, margins = {0, 0, 0, 0}, padding = {0, 0, 0, 0}, border_width = 1, pos = {0, 0}, size = range2({},{}) } style := UI_Style { bg_color = Color_ThmDark_Btn_BG_Default, border_color = Color_ThmDark_Border_Default, corner_radii = {}, blur_size = 0, font = get_state().default_font, text_color = Color_ThmDark_Text_Default, cursor = {}, } // loaded = true layout_combo := to_ui_layout_combo(layout) style_combo := to_ui_style_combo(style) { using layout_combo.hot using style_combo.hot bg_color = Color_ThmDark_Btn_BG_Hot text_color = Color_ThmDark_Text_Hot margins = {2, 2, 2, 2} } { using layout_combo.active using style_combo.active bg_color = Color_ThmDark_Btn_BG_Active text_color = Color_ThmDark_Text_Active margins = {2, 2, 2, 2} } theme = UI_Theme { layout_combo, style_combo } // } ui_layout_push(theme.layout) ui_style_push(theme.style) }