eliminate remaining usage code of old theme system; to not pay the cost of slower-path color lookups for every single syntax highlighted thing in the UI, just introduce 'code color slots', which are computed once per window per frame

This commit is contained in:
Ryan Fleury
2025-05-02 11:34:24 -07:00
parent 2b12239300
commit adf2eabba7
6 changed files with 106 additions and 2263 deletions
File diff suppressed because it is too large Load Diff
+18 -162
View File
@@ -366,155 +366,24 @@ RD_IconKind_Duplicate,
RD_IconKind_COUNT,
} RD_IconKind;
typedef enum RD_ThemeColor
typedef enum RD_CodeColorSlot
{
RD_ThemeColor_Null,
RD_ThemeColor_InactivePanelOverlay,
RD_ThemeColor_DropShadow,
RD_ThemeColor_BaseBackground,
RD_ThemeColor_BaseBackgroundAlt,
RD_ThemeColor_BaseBackgroundGood,
RD_ThemeColor_BaseBackgroundBad,
RD_ThemeColor_BaseBackgroundPop,
RD_ThemeColor_BaseBorder,
RD_ThemeColor_BaseText,
RD_ThemeColor_BaseTextWeak,
RD_ThemeColor_BaseHover,
RD_ThemeColor_BaseFocus,
RD_ThemeColor_BaseCursor,
RD_ThemeColor_BaseSelection,
RD_ThemeColor_MenuBarBackground,
RD_ThemeColor_MenuBarBackgroundAlt,
RD_ThemeColor_MenuBarBackgroundGood,
RD_ThemeColor_MenuBarBackgroundBad,
RD_ThemeColor_MenuBarBackgroundPop,
RD_ThemeColor_MenuBarBorder,
RD_ThemeColor_MenuBarText,
RD_ThemeColor_MenuBarTextWeak,
RD_ThemeColor_MenuBarHover,
RD_ThemeColor_MenuBarFocus,
RD_ThemeColor_MenuBarCursor,
RD_ThemeColor_MenuBarSelection,
RD_ThemeColor_GoodBackground,
RD_ThemeColor_GoodBackgroundAlt,
RD_ThemeColor_GoodBackgroundGood,
RD_ThemeColor_GoodBackgroundBad,
RD_ThemeColor_GoodBackgroundPop,
RD_ThemeColor_GoodBorder,
RD_ThemeColor_GoodText,
RD_ThemeColor_GoodTextWeak,
RD_ThemeColor_GoodHover,
RD_ThemeColor_GoodFocus,
RD_ThemeColor_GoodCursor,
RD_ThemeColor_GoodSelection,
RD_ThemeColor_BadBackground,
RD_ThemeColor_BadBackgroundAlt,
RD_ThemeColor_BadBackgroundGood,
RD_ThemeColor_BadBackgroundBad,
RD_ThemeColor_BadBackgroundPop,
RD_ThemeColor_BadBorder,
RD_ThemeColor_BadText,
RD_ThemeColor_BadTextWeak,
RD_ThemeColor_BadHover,
RD_ThemeColor_BadFocus,
RD_ThemeColor_BadCursor,
RD_ThemeColor_BadSelection,
RD_ThemeColor_PopBackground,
RD_ThemeColor_PopBackgroundAlt,
RD_ThemeColor_PopBackgroundGood,
RD_ThemeColor_PopBackgroundBad,
RD_ThemeColor_PopBackgroundPop,
RD_ThemeColor_PopBorder,
RD_ThemeColor_PopText,
RD_ThemeColor_PopTextWeak,
RD_ThemeColor_PopHover,
RD_ThemeColor_PopFocus,
RD_ThemeColor_PopCursor,
RD_ThemeColor_PopSelection,
RD_ThemeColor_ScrollBarBackground,
RD_ThemeColor_ScrollBarBackgroundAlt,
RD_ThemeColor_ScrollBarBackgroundGood,
RD_ThemeColor_ScrollBarBackgroundBad,
RD_ThemeColor_ScrollBarBackgroundPop,
RD_ThemeColor_ScrollBarBorder,
RD_ThemeColor_ScrollBarText,
RD_ThemeColor_ScrollBarTextWeak,
RD_ThemeColor_ScrollBarHover,
RD_ThemeColor_ScrollBarFocus,
RD_ThemeColor_ScrollBarCursor,
RD_ThemeColor_ScrollBarSelection,
RD_ThemeColor_TabBackground,
RD_ThemeColor_TabBackgroundAlt,
RD_ThemeColor_TabBackgroundGood,
RD_ThemeColor_TabBackgroundBad,
RD_ThemeColor_TabBackgroundPop,
RD_ThemeColor_TabBorder,
RD_ThemeColor_TabText,
RD_ThemeColor_TabTextWeak,
RD_ThemeColor_TabHover,
RD_ThemeColor_TabFocus,
RD_ThemeColor_TabCursor,
RD_ThemeColor_TabSelection,
RD_ThemeColor_TabInactiveBackground,
RD_ThemeColor_TabInactiveBackgroundAlt,
RD_ThemeColor_TabInactiveBackgroundGood,
RD_ThemeColor_TabInactiveBackgroundBad,
RD_ThemeColor_TabInactiveBackgroundPop,
RD_ThemeColor_TabInactiveBorder,
RD_ThemeColor_TabInactiveText,
RD_ThemeColor_TabInactiveTextWeak,
RD_ThemeColor_TabInactiveHover,
RD_ThemeColor_TabInactiveFocus,
RD_ThemeColor_TabInactiveCursor,
RD_ThemeColor_TabInactiveSelection,
RD_ThemeColor_DropSiteBackground,
RD_ThemeColor_DropSiteBackgroundAlt,
RD_ThemeColor_DropSiteBackgroundGood,
RD_ThemeColor_DropSiteBackgroundBad,
RD_ThemeColor_DropSiteBackgroundPop,
RD_ThemeColor_DropSiteBorder,
RD_ThemeColor_DropSiteText,
RD_ThemeColor_DropSiteTextWeak,
RD_ThemeColor_DropSiteHover,
RD_ThemeColor_DropSiteFocus,
RD_ThemeColor_DropSiteCursor,
RD_ThemeColor_DropSiteSelection,
RD_ThemeColor_CodeDefault,
RD_ThemeColor_CodeSymbol,
RD_ThemeColor_CodeType,
RD_ThemeColor_CodeLocal,
RD_ThemeColor_CodeRegister,
RD_ThemeColor_CodeKeyword,
RD_ThemeColor_CodeDelimiterOperator,
RD_ThemeColor_CodeNumeric,
RD_ThemeColor_CodeNumericAltDigitGroup,
RD_ThemeColor_CodeString,
RD_ThemeColor_CodeMeta,
RD_ThemeColor_CodeComment,
RD_ThemeColor_CodeLineNumbers,
RD_ThemeColor_CodeLineNumbersSelected,
RD_ThemeColor_LineInfoBackground0,
RD_ThemeColor_LineInfoBackground1,
RD_ThemeColor_LineInfoBackground2,
RD_ThemeColor_LineInfoBackground3,
RD_ThemeColor_LineInfoBackground4,
RD_ThemeColor_LineInfoBackground5,
RD_ThemeColor_LineInfoBackground6,
RD_ThemeColor_LineInfoBackground7,
RD_ThemeColor_Thread0,
RD_ThemeColor_Thread1,
RD_ThemeColor_Thread2,
RD_ThemeColor_Thread3,
RD_ThemeColor_Thread4,
RD_ThemeColor_Thread5,
RD_ThemeColor_Thread6,
RD_ThemeColor_Thread7,
RD_ThemeColor_ThreadUnwound,
RD_ThemeColor_ThreadError,
RD_ThemeColor_Breakpoint,
RD_ThemeColor_CacheLineBoundary,
RD_ThemeColor_COUNT,
} RD_ThemeColor;
RD_CodeColorSlot_CodeDefault,
RD_CodeColorSlot_CodeSymbol,
RD_CodeColorSlot_CodeType,
RD_CodeColorSlot_CodeLocal,
RD_CodeColorSlot_CodeRegister,
RD_CodeColorSlot_CodeKeyword,
RD_CodeColorSlot_CodeDelimiterOperator,
RD_CodeColorSlot_CodeNumeric,
RD_CodeColorSlot_CodeNumericAltDigitGroup,
RD_CodeColorSlot_CodeString,
RD_CodeColorSlot_CodeMeta,
RD_CodeColorSlot_CodeComment,
RD_CodeColorSlot_CodeLineNumbers,
RD_CodeColorSlot_CodeLineNumbersSelected,
RD_CodeColorSlot_COUNT,
} RD_CodeColorSlot;
typedef enum RD_ThemePreset
{
@@ -695,23 +564,10 @@ extern Rng1U64 rd_reg_slot_range_table[43];
extern String8 rd_binding_version_remap_old_name_table[8];
extern String8 rd_binding_version_remap_new_name_table[8];
extern String8 rd_icon_kind_text_table[75];
extern String8 rd_code_color_slot_name_table[14];
extern String8 rd_theme_preset_display_string_table[9];
extern String8 rd_theme_preset_code_string_table[9];
extern String8 rd_theme_preset_cfg_string_table[9];
extern String8 rd_theme_color_version_remap_old_name_table[22];
extern String8 rd_theme_color_version_remap_new_name_table[22];
extern Vec4F32 rd_theme_preset_colors__default_dark[145];
extern Vec4F32 rd_theme_preset_colors__default_light[145];
extern Vec4F32 rd_theme_preset_colors__vs_dark[145];
extern Vec4F32 rd_theme_preset_colors__vs_light[145];
extern Vec4F32 rd_theme_preset_colors__solarized_dark[145];
extern Vec4F32 rd_theme_preset_colors__solarized_light[145];
extern Vec4F32 rd_theme_preset_colors__handmade_hero[145];
extern Vec4F32 rd_theme_preset_colors__four_coder[145];
extern Vec4F32 rd_theme_preset_colors__far_manager[145];
extern Vec4F32* rd_theme_preset_colors_table[9];
extern String8 rd_theme_color_display_string_table[145];
extern String8 rd_theme_color_cfg_string_table[145];
read_only global U8 rd_icon_font_bytes__data[] =
{
0x00,0x01,0x00,0x00,0x00,0x0f,0x00,0x80,0x00,0x03,0x00,0x70,0x47,0x53,0x55,0x42,0x20,0x8b,0x25,0x7a,0x00,0x00,0x00,0xfc,0x00,0x00,0x00,0x54,0x4f,0x53,0x2f,0x32,0x56,0x43,0x62,0x25,0x00,0x00,0x01,0x50,0x00,0x00,0x00,0x60,0x63,0x6d,0x61,0x70,0xa3,0x60,0xa4,0x23,0x00,0x00,0x01,0xb0,0x00,0x00,0x06,0x12,0x63,0x76,0x74,0x20,
+21 -232
View File
@@ -1465,211 +1465,34 @@ RD_ThemePresetTable:
{ FarManager far_manager "Far Manager" }
}
@table(name display_name name_lower default_dark default_light vs_dark vs_light solarized_dark solarized_light handmade_hero four_coder far_manager desc)
RD_ThemeColorTable:
@table(name lower_name)
RD_CodeColorTable:
{
{Null "Null" null 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff ""}
//- rjf: global colors
{InactivePanelOverlay "Inactive Panel Overlay" inactive_panel_overlay 0x000000ff 0xa4a4a43f 0x0000003f 0xfefefe53 0x0000003f 0x0000001c 0x0000003f 0x0000003f 0x0000003f ""}
{DropShadow "Drop Shadow" drop_shadow 0x000000ff 0x0000004c 0x0000007f 0xa3a3a37e 0x0000007f 0xc9bfa394 0x0000007f 0x0000007f 0x0000007f ""}
//- rjf: base palette
{BaseBackground "Base Background" base_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{BaseBackgroundAlt "Base Background (Alternate)" base_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BaseBackgroundGood "Base Background (Good)" base_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BaseBackgroundBad "Base Background (Bad)" base_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BaseBackgroundPop "Base Background (Pop)" base_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BaseBorder "Base Border" base_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{BaseText "Base Text" base_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BaseTextWeak "Base Text (Weak)" base_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BaseHover "Base Hover" base_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BaseFocus "Base Focus" base_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BaseCursor "Base Cursor" base_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BaseSelection "Base Selection" base_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: menu bar palette
{MenuBarBackground "Menu Bar Background" menu_bar_background 0x2b3740ff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{MenuBarBackgroundAlt "Menu Bar Background (Alternate)" menu_bar_background_alt 0x2b3740ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{MenuBarBackgroundGood "Menu Bar Background (Good)" menu_bar_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{MenuBarBackgroundBad "Menu Bar Background (Bad)" menu_bar_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{MenuBarBackgroundPop "Menu Bar Background (Pop)" menu_bar_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{MenuBarBorder "Menu Bar Border" menu_bar_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{MenuBarText "Menu Bar Text" menu_bar_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{MenuBarTextWeak "Menu Bar Text (Weak)" menu_bar_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{MenuBarHover "Menu Bar Hover" menu_bar_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{MenuBarFocus "Menu Bar Focus" menu_bar_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{MenuBarCursor "Menu Bar Cursor" menu_bar_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{MenuBarSelection "Menu Bar Selection" menu_bar_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: good palette
{GoodBackground "Good Background" good_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{GoodBackgroundAlt "Good Background (Alternate)" good_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{GoodBackgroundGood "Good Background (Good)" good_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{GoodBackgroundBad "Good Background (Bad)" good_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{GoodBackgroundPop "Good Background (Pop)" good_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{GoodBorder "Good Border" good_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{GoodText "Good Text" good_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{GoodTextWeak "Good Text (Weak)" good_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{GoodHover "Good Hover" good_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{GoodFocus "Good Focus" good_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{GoodCursor "Good Cursor" good_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{GoodSelection "Good Selection" good_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: bad palette
{BadBackground "Bad Background" bad_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{BadBackgroundAlt "Bad Background (Alternate)" bad_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BadBackgroundGood "Bad Background (Good)" bad_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BadBackgroundBad "Bad Background (Bad)" bad_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BadBackgroundPop "Bad Background (Pop)" bad_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{BadBorder "Bad Border" bad_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{BadText "Bad Text" bad_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BadTextWeak "Bad Text (Weak)" bad_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BadHover "Bad Hover" bad_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BadFocus "Bad Focus" bad_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BadCursor "Bad Cursor" bad_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{BadSelection "Bad Selection" bad_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: pop palette
{PopBackground "Pop Background" pop_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{PopBackgroundAlt "Pop Background (Alternate)" pop_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{PopBackgroundGood "Pop Background (Good)" pop_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{PopBackgroundBad "Pop Background (Bad)" pop_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{PopBackgroundPop "Pop Background (Pop)" pop_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{PopBorder "Pop Border" pop_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{PopText "Pop Text" pop_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{PopTextWeak "Pop Text (Weak)" pop_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{PopHover "Pop Hover" pop_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{PopFocus "Pop Focus" pop_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{PopCursor "Pop Cursor" pop_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{PopSelection "Pop Selection" pop_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: scroll bar palette
{ScrollBarBackground "Scroll Bar Background" scroll_bar_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{ScrollBarBackgroundAlt "Scroll Bar Background (Alternate)" scroll_bar_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{ScrollBarBackgroundGood "Scroll Bar Background (Good)" scroll_bar_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{ScrollBarBackgroundBad "Scroll Bar Background (Bad)" scroll_bar_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{ScrollBarBackgroundPop "Scroll Bar Background (Pop)" scroll_bar_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{ScrollBarBorder "Scroll Bar Border" scroll_bar_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{ScrollBarText "Scroll Bar Text" scroll_bar_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{ScrollBarTextWeak "Scroll Bar Text (Weak)" scroll_bar_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{ScrollBarHover "Scroll Bar Hover" scroll_bar_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{ScrollBarFocus "Scroll Bar Focus" scroll_bar_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{ScrollBarCursor "Scroll Bar Cursor" scroll_bar_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{ScrollBarSelection "Scroll Bar Selection" scroll_bar_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: tab (active) palette
{TabBackground "Tab Background" tab_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{TabBackgroundAlt "Tab Background (Alternate)" tab_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabBackgroundGood "Tab Background (Good)" tab_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabBackgroundBad "Tab Background (Bad)" tab_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabBackgroundPop "Tab Background (Pop)" tab_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabBorder "Tab Border" tab_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{TabText "Tab Text" tab_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabTextWeak "Tab Text (Weak)" tab_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabHover "Tab Hover" tab_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabFocus "Tab Focus" tab_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabCursor "Tab Cursor" tab_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabSelection "Tab Selection" tab_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: tab (inactive) palette
{TabInactiveBackground "Tab (Inactive) Background" tab_inactive_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{TabInactiveBackgroundAlt "Tab (Inactive) Background (Alternate)" tab_inactive_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabInactiveBackgroundGood "Tab (Inactive) Background (Good)" tab_inactive_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabInactiveBackgroundBad "Tab (Inactive) Background (Bad)" tab_inactive_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabInactiveBackgroundPop "Tab (Inactive) Background (Pop)" tab_inactive_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{TabInactiveBorder "Tab (Inactive) Border" tab_inactive_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{TabInactiveText "Tab (Inactive) Text" tab_inactive_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabInactiveTextWeak "Tab (Inactive) Text (Weak)" tab_inactive_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabInactiveHover "Tab (Inactive) Hover" tab_inactive_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabInactiveFocus "Tab (Inactive) Focus" tab_inactive_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabInactiveCursor "Tab (Inactive) Cursor" tab_inactive_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{TabInactiveSelection "Tab (Inactive) Selection" tab_inactive_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: drop site palette
{DropSiteBackground "Drop Site Background" drop_site_background 0x1b1b1bff 0xccccccfe 0x1b1b1bfe 0xfefefefe 0x002a35fe 0xfcf5e2fe 0x0c0c0cfe 0x0c0c0cfe 0x000081fe ""}
{DropSiteBackgroundAlt "Drop Site Background (Alternate)" drop_site_background_alt 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{DropSiteBackgroundGood "Drop Site Background (Good)" drop_site_background_good 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{DropSiteBackgroundBad "Drop Site Background (Bad)" drop_site_background_bad 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{DropSiteBackgroundPop "Drop Site Background (Pop)" drop_site_background_pop 0x222222ff 0x2b2b2bfe 0x1b1b1bfe 0xe7e7e7fe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe 0x2b2b2bfe ""}
{DropSiteBorder "Drop Site Border" drop_site_border 0x404040ff 0xa4a4a4fe 0x3f3f3ffe 0xb6b6b6ff 0xfefefe3a 0xbebaabfe 0x423525fe 0x3f3f3ffe 0x0000fffe ""}
{DropSiteText "Drop Site Text" drop_site_text 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{DropSiteTextWeak "Drop Site Text (Weak)" drop_site_text_weak 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{DropSiteHover "Drop Site Hover" drop_site_hover 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{DropSiteFocus "Drop Site Focus" drop_site_focus 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{DropSiteCursor "Drop Site Cursor" drop_site_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{DropSiteSelection "Drop Site Selection" drop_site_cursor 0xe5e5e5ff 0x4c4c4cff 0xe5e5e5ff 0x000000ff 0x999999ff 0x333333ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
//- rjf: code colors (extra text colors which extend 'base')
{CodeDefault "Code (Default)" code_default 0xcbcbcbff 0x4d4d4dff 0xcbcbcbff 0x000000ff 0xcbcbcbff 0x657b83ff 0xa08462ff 0x90b080ff 0x00fefeff ""}
{CodeSymbol "Code (Symbol)" code_symbol 0x42a2cfff 0x205670fe 0xdcdcaaff 0x000000ff 0xcb4a15ff 0xcb4a15ff 0xcc5634ff 0x42a2cffe 0x65b1ffff ""}
{CodeType "Code (Type)" code_type 0xfec746ff 0x996b00ff 0x4ec9afff 0xa33700ff 0xcb4a15ff 0xcb4a15ff 0xd8a51bff 0xfd7c52ff 0xfec746ff ""}
{CodeLocal "Code (Local)" code_local 0x98bc80ff 0x446a2bff 0x9cdbfeff 0x007666ff 0x98bc80ff 0x258ad2ff 0xc04047ff 0x98bc80ff 0x00ff00ff ""}
{CodeRegister "Code (Register)" code_register 0xb7afd5ff 0x4c35a1ff 0xb7afd5ff 0xb7afd5ff 0xb7afd5ff 0x373345ff 0xb7afd5ff 0xb7afd5ff 0xb7afd5ff ""}
{CodeKeyword "Code (Keyword)" code_keyword 0xb38d4cff 0x573700ff 0x569cd6ff 0x0000ffff 0x849803ff 0x586e75ff 0xac7a09ff 0xd08f1eff 0x00ffffff ""}
{CodeDelimiterOperator "Code (Delimiters/Operators)" code_delimiter_operator 0x767676ff 0x767676ff 0x767676ff 0x767676ff 0x767676ff 0x767676ff 0xa08462ff 0x90b080ff 0xffffffff ""}
{CodeNumeric "Code (Numeric)" code_numeric 0x98abb1ff 0x3f6e7dff 0xb5cea8ff 0x088658ff 0xd33582ff 0xd33482ef 0x698e21ff 0x4fff2eff 0x00ff00ff ""}
{CodeNumericAltDigitGroup "Code (Numeric, Alt. Digit Group)" code_numeric_alt_digit_group 0x738287ff 0x1f4450ff 0x729360ff 0x0c3828ff 0x902559ff 0x8e2659ff 0x3a4e11ff 0x3ccd21ff 0x738287ff ""}
{CodeString "Code (String)" code_string 0x98abb1ff 0x3c606bff 0xd59b85ff 0xa31414ff 0x1f9d91ff 0x29a198ff 0x6a8e22ff 0x4fff2eff 0x98abb1ff ""}
{CodeMeta "Code (Meta)" code_meta 0xd96759ff 0xad3627ff 0xd59c85ff 0x0000ffff 0x839802ff 0xd96759ff 0xdab98fff 0xa0b8a0ff 0xff0000ff ""}
{CodeComment "Code (Comment)" code_comment 0x717171ff 0x4b4b4bff 0x57a54aff 0x008000ff 0x556a6fff 0x93a1a1ff 0x686868ff 0x1e8fefff 0xffffffff ""}
{CodeLineNumbers "Code Line Numbers" code_line_numbers 0x7f7f7fff 0x4b4b4bff 0x2a91afff 0x227893ff 0x566c73ff 0x227893ef 0xa08462ff 0x7e7e7ffe 0x007d7dff ""}
{CodeLineNumbersSelected "Code Line Numbers (Selected)" code_line_numbers_selected 0xbebebeff 0x000000ff 0x9ddaecff 0x123d4bfe 0xa2aaacff 0x111e22ef 0xc8b399ff 0xbebebeff 0x00fefeff ""}
//- rjf: debugging colors (extra text/element colors which extend 'base')
{LineInfoBackground0 "Line Info Background 0" line_info_background_0 0x99503dff 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f ""}
{LineInfoBackground1 "Line Info Background 1" line_info_background_1 0xfe8249ff 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f ""}
{LineInfoBackground2 "Line Info Background 2" line_info_background_2 0xffba17ff 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f ""}
{LineInfoBackground3 "Line Info Background 3" line_info_background_3 0xcefd69ff 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f ""}
{LineInfoBackground4 "Line Info Background 4" line_info_background_4 0x99503dff 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f 0x99503d3f ""}
{LineInfoBackground5 "Line Info Background 5" line_info_background_5 0xfe8249ff 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f 0xfe82493f ""}
{LineInfoBackground6 "Line Info Background 6" line_info_background_6 0xffba17ff 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f 0xffba173f ""}
{LineInfoBackground7 "Line Info Background 7" line_info_background_7 0xcefd69ff 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f 0xcefd693f ""}
{Thread0 "Thread 0" thread_0 0xffcb7fff 0x945800ff 0xffcb7fff 0x945800ff 0xffcb7fff 0x945800ff 0xffcb7fff 0xffcb7fff 0xffcb7fff ""}
{Thread1 "Thread 1" thread_1 0xb2ff65ff 0x3f5b23ff 0xb2ff65ff 0x3f5b23ff 0xb2ff65ff 0x3f5b23ff 0xb2ff65ff 0xb2ff65ff 0xb2ff65ff ""}
{Thread2 "Thread 2" thread_2 0xff99e5ff 0x642a55ff 0xff99e5ff 0x642a55ff 0xff99e5ff 0x642a55ff 0xff99e5ff 0xff99e5ff 0xff99e5ff ""}
{Thread3 "Thread 3" thread_3 0x6598ffff 0x30456fff 0x6598ffff 0x30456fff 0x6598ffff 0x30456fff 0x6598ffff 0x6598ffff 0x6598ffff ""}
{Thread4 "Thread 4" thread_4 0x65ffcbff 0x264f41ff 0x65ffcbff 0x264f41ff 0x65ffcbff 0x264f41ff 0x65ffcbff 0x65ffcbff 0x65ffcbff ""}
{Thread5 "Thread 5" thread_5 0xff9819ff 0x736a5fff 0xff9819ff 0x736a5fff 0xff9819ff 0x736a5fff 0xff9819ff 0xff9819ff 0xff9819ff ""}
{Thread6 "Thread 6" thread_6 0x9932ffff 0x472f5eff 0x9932ffff 0x472f5eff 0x9932ffff 0x472f5eff 0x9932ffff 0x9932ffff 0x9932ffff ""}
{Thread7 "Thread 7" thread_7 0x65ff4cff 0x405d3bff 0x65ff4cff 0x405d3bff 0x65ff4cff 0x405d3bff 0x65ff4cff 0x65ff4cff 0x65ff4cff ""}
{ThreadUnwound "Thread (Unwound)" thread_unwound 0xb2ccd8ff 0x49606aff 0xb2ccd8ff 0x49606aff 0xb2ccd8ff 0x49606aff 0xb2ccd8ff 0xb2ccd8ff 0xb2ccd8ff ""}
{ThreadError "Thread (Error)" thread_error 0xb23219ff 0xb23219ff 0xb23219ff 0xb23219ff 0xb23219ff 0xb23218ff 0xb23219ff 0xb23219ff 0xb23219ff ""}
{Breakpoint "Breakpoint" breakpoint 0xa72911ff 0xff2800ff 0xa72911ff 0xa72911ff 0xa72911ff 0xff684bff 0xa72911ff 0xa72911ff 0xff2800ff ""}
{CacheLineBoundary "Cache Line Boundary" cache_line_boundary 0x355b6eff 0xa6becaff 0x355b6eff 0x6e9db5ff 0x355b6eff 0xb2d3e3ff 0x15445cff 0x1b323eff 0x933100ff ""}
{CodeDefault "code_default"}
{CodeSymbol "code_symbol"}
{CodeType "code_type"}
{CodeLocal "code_local"}
{CodeRegister "code_register"}
{CodeKeyword "code_keyword"}
{CodeDelimiterOperator "code_delimiter_or_operator"}
{CodeNumeric "code_numeric"}
{CodeNumericAltDigitGroup "code_numeric_alt_digit_group"}
{CodeString "code_string"}
{CodeMeta "code_meta"}
{CodeComment "code_comment"}
{CodeLineNumbers "code_line_numbers"}
{CodeLineNumbersSelected "code_line_numbers_selected"}
}
@table(old_name new_name)
RD_ThemeColorVersionRemapTable:
@enum RD_CodeColorSlot:
{
{plain_text text}
{plain_background base_background}
{plain_border base_border}
{plain_overlay drop_site_overlay}
{code_function code_symbol}
{code_symbol code_delimiter_operator}
{code_numeric code_numeric_alt_digit_group}
{line_info_0 line_info_background_0}
{line_info_1 line_info_background_1}
{line_info_2 line_info_background_2}
{line_info_3 line_info_background_3}
{alt_background menu_bar_background}
{alt_border menu_bar_border}
{tab_inactive tab_background_inactive}
{tab_active tab_background}
{weak_text text_weak}
{text_selection selection}
{cursor cursor}
{highlight_0 focus}
{success_background positive_pop_button_background}
{failure_background negative_pop_button_background}
{action_background neutral_pop_button_background}
@expand(RD_CodeColorTable a) `$(a.name)`,
COUNT
}
@enum RD_ThemeColor:
@data(String8) rd_code_color_slot_name_table:
{
@expand(RD_ThemeColorTable a) `$(a.name)`,
COUNT,
@expand(RD_CodeColorTable a) `str8_lit_comp("$(a.lower_name)")`
}
@enum RD_ThemePreset:
@@ -1693,40 +1516,6 @@ RD_ThemeColorVersionRemapTable:
@expand(RD_ThemePresetTable a) `str8_lit_comp("$(a.cfg)")`,
}
@data(String8) rd_theme_color_version_remap_old_name_table:
{
@expand(RD_ThemeColorVersionRemapTable a) `str8_lit_comp("$(a.old_name)")`
}
@data(String8) rd_theme_color_version_remap_new_name_table:
{
@expand(RD_ThemeColorVersionRemapTable a) `str8_lit_comp("$(a.new_name)")`
}
@data(Vec4F32) rd_theme_preset_colors__default_dark: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.default_dark))`}
@data(Vec4F32) rd_theme_preset_colors__default_light: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.default_light))`}
@data(Vec4F32) rd_theme_preset_colors__vs_dark: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.vs_dark))`}
@data(Vec4F32) rd_theme_preset_colors__vs_light: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.vs_light))`}
@data(Vec4F32) rd_theme_preset_colors__solarized_dark: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.solarized_dark))`,}
@data(Vec4F32) rd_theme_preset_colors__solarized_light:{@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.solarized_light))`,}
@data(Vec4F32) rd_theme_preset_colors__handmade_hero: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.handmade_hero))`,}
@data(Vec4F32) rd_theme_preset_colors__four_coder: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.four_coder))`,}
@data(Vec4F32) rd_theme_preset_colors__far_manager: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.far_manager))`;}
@data(`Vec4F32*`) rd_theme_preset_colors_table:
{
@expand(RD_ThemePresetTable a) `rd_theme_preset_colors__$(a.name_lower)`,
}
@data(String8) rd_theme_color_display_string_table:
{
@expand(RD_ThemeColorTable a) `str8_lit_comp("$(a.display_name)")`
}
@data(String8) rd_theme_color_cfg_string_table:
{
@expand(RD_ThemeColorTable a) `str8_lit_comp("$(a.name_lower)")`
}
////////////////////////////////
//~ rjf: Help/Docs/README
+30 -137
View File
@@ -6062,6 +6062,14 @@ rd_window_frame(void)
ui_push_text_raster_flags(text_raster_flags);
}
////////////////////////////
//- rjf: @window_ui_part calculate code color slot RGBAs
//
for EachEnumVal(RD_CodeColorSlot, s)
{
ws->theme_code_colors[s] = ui_color_from_name(rd_code_color_slot_name_table[s]);
}
////////////////////////////
//- rjf: @window_ui_part calculate top-level rectangles/sizes
//
@@ -9685,32 +9693,34 @@ rd_set_autocomp_regs_(RD_Regs *regs)
//- rjf: colors
internal Vec4F32
rd_rgba_from_theme_color(RD_ThemeColor color)
rd_rgba_from_code_color_slot(RD_CodeColorSlot slot)
{
return rd_state->theme->colors[color];
RD_WindowState *ws = rd_window_state_from_cfg(rd_cfg_from_id(rd_regs()->window));
Vec4F32 result = ws->theme_code_colors[slot];
return result;
}
internal RD_ThemeColor
rd_theme_color_from_txt_token_kind(TXT_TokenKind kind)
internal RD_CodeColorSlot
rd_code_color_slot_from_txt_token_kind(TXT_TokenKind kind)
{
RD_ThemeColor color = RD_ThemeColor_CodeDefault;
RD_CodeColorSlot color = RD_CodeColorSlot_CodeDefault;
switch(kind)
{
default:break;
case TXT_TokenKind_Keyword:{color = RD_ThemeColor_CodeKeyword;}break;
case TXT_TokenKind_Numeric:{color = RD_ThemeColor_CodeNumeric;}break;
case TXT_TokenKind_String: {color = RD_ThemeColor_CodeString;}break;
case TXT_TokenKind_Meta: {color = RD_ThemeColor_CodeMeta;}break;
case TXT_TokenKind_Comment:{color = RD_ThemeColor_CodeComment;}break;
case TXT_TokenKind_Symbol: {color = RD_ThemeColor_CodeDelimiterOperator;}break;
case TXT_TokenKind_Keyword:{color = RD_CodeColorSlot_CodeKeyword;}break;
case TXT_TokenKind_Numeric:{color = RD_CodeColorSlot_CodeNumeric;}break;
case TXT_TokenKind_String: {color = RD_CodeColorSlot_CodeString;}break;
case TXT_TokenKind_Meta: {color = RD_CodeColorSlot_CodeMeta;}break;
case TXT_TokenKind_Comment:{color = RD_CodeColorSlot_CodeComment;}break;
case TXT_TokenKind_Symbol: {color = RD_CodeColorSlot_CodeDelimiterOperator;}break;
}
return color;
}
internal RD_ThemeColor
rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string)
internal RD_CodeColorSlot
rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string)
{
RD_ThemeColor color = RD_ThemeColor_CodeDefault;
RD_CodeColorSlot color = RD_CodeColorSlot_CodeDefault;
if(kind == TXT_TokenKind_Identifier || kind == TXT_TokenKind_Keyword)
{
CTRL_Entity *module = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->module);
@@ -9724,7 +9734,7 @@ rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 str
if(local_num != 0)
{
mapped = 1;
color = RD_ThemeColor_CodeLocal;
color = RD_CodeColorSlot_CodeLocal;
}
}
@@ -9735,7 +9745,7 @@ rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 str
if(member_num != 0)
{
mapped = 1;
color = RD_ThemeColor_CodeLocal;
color = RD_CodeColorSlot_CodeLocal;
}
}
@@ -9746,7 +9756,7 @@ rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 str
if(reg_num != 0)
{
mapped = 1;
color = RD_ThemeColor_CodeRegister;
color = RD_CodeColorSlot_CodeRegister;
}
}
@@ -9757,7 +9767,7 @@ rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 str
if(alias_num != 0)
{
mapped = 1;
color = RD_ThemeColor_CodeRegister;
color = RD_CodeColorSlot_CodeRegister;
}
}
@@ -9773,11 +9783,11 @@ rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 str
case RDI_SectionKind_GlobalVariables:
case RDI_SectionKind_ThreadVariables:
{
color = RD_ThemeColor_CodeSymbol;
color = RD_CodeColorSlot_CodeSymbol;
}break;
case RDI_SectionKind_TypeNodes:
{
color = RD_ThemeColor_CodeType;
color = RD_CodeColorSlot_CodeType;
}break;
}
}
@@ -11000,123 +11010,6 @@ rd_frame(void)
rd_state->font_slot_table[RD_FontSlot_Icons] = fnt_tag_from_static_data_string(&rd_icon_font_bytes);
}
//////////////////////////////
//- rjf: build theme from config
//
ProfScope("build theme from config")
{
RD_Theme *theme_srgba = push_array(scratch.arena, RD_Theme, 1);
//- rjf: gather globally-applying config options
RD_CfgList preset_roots = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("theme_preset"));
RD_CfgList colors_roots = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("theme_colors"));
//- rjf: assume default-dark
MemoryCopy(theme_srgba->colors, rd_theme_preset_colors_table[RD_ThemePreset_DefaultDark], sizeof(rd_theme_preset_colors__default_dark));
//- rjf: apply explicitly-specified presets
for(RD_CfgNode *n = preset_roots.first; n != 0; n = n->next)
{
RD_Cfg *preset = n->v;
String8 preset_name = preset->first->string;
RD_ThemePreset preset_kind = (RD_ThemePreset)0;
B32 found_preset_kind = 0;
for(RD_ThemePreset p = (RD_ThemePreset)0; p < RD_ThemePreset_COUNT; p = (RD_ThemePreset)(p+1))
{
if(str8_match(preset_name, rd_theme_preset_code_string_table[p], StringMatchFlag_CaseInsensitive))
{
found_preset_kind = 1;
preset_kind = p;
break;
}
}
if(found_preset_kind)
{
MemoryCopy(theme_srgba->colors, rd_theme_preset_colors_table[preset_kind], sizeof(rd_theme_preset_colors__default_dark));
}
}
//- rjf: apply explicitly-specified color codes
for(RD_CfgNode *n = colors_roots.first; n != 0; n = n->next)
{
RD_Cfg *colors = n->v;
for(RD_Cfg *color = colors->first; color != &rd_nil_cfg; color = color->next)
{
String8 name = color->string;
RD_ThemeColor color_code = RD_ThemeColor_Null;
for(RD_ThemeColor c = RD_ThemeColor_Null; c < RD_ThemeColor_COUNT; c = (RD_ThemeColor)(c+1))
{
if(str8_match(rd_theme_color_cfg_string_table[c], name, StringMatchFlag_CaseInsensitive))
{
color_code = c;
break;
}
}
if(color_code != RD_ThemeColor_Null)
{
U64 color_val = 0;
if(try_u64_from_str8_c_rules(color->first->string, &color_val))
{
Vec4F32 color_rgba = rgba_from_u32((U32)color_val);
theme_srgba->colors[color_code] = color_rgba;
}
}
}
}
//- rjf: srgba -> linear, compute final theme
rd_state->theme_target = push_array(rd_frame_arena(), RD_Theme, 1);
RD_Theme *theme = rd_state->theme_target;
for EachEnumVal(RD_ThemeColor, c)
{
theme->colors[c] = linear_from_srgba(theme_srgba->colors[c]);
}
}
//////////////////////////////
//- rjf: animate theme
//
{
Temp scratch = scratch_begin(0, 0);
RD_Theme *last = push_array(scratch.arena, RD_Theme, 1);
if(rd_state->theme != 0)
{
MemoryCopyStruct(last, rd_state->theme);
}
rd_state->theme = push_array(rd_frame_arena(), RD_Theme, 1);
RD_Theme *current = rd_state->theme;
RD_Theme *target = rd_state->theme_target;
if(last)
{
MemoryCopyStruct(current, last);
}
if(rd_state->frame_index <= 2)
{
MemoryCopyStruct(current, target);
}
else
{
F32 rate = 1 - pow_f32(2, (-50.f * rd_state->frame_dt));
for(RD_ThemeColor color = RD_ThemeColor_Null;
color < RD_ThemeColor_COUNT;
color = (RD_ThemeColor)(color+1))
{
if(abs_f32(target->colors[color].x - current->colors[color].x) > 0.01f ||
abs_f32(target->colors[color].y - current->colors[color].y) > 0.01f ||
abs_f32(target->colors[color].z - current->colors[color].z) > 0.01f ||
abs_f32(target->colors[color].w - current->colors[color].w) > 0.01f)
{
rd_request_frame();
}
current->colors[color].x += (target->colors[color].x - current->colors[color].x) * rate;
current->colors[color].y += (target->colors[color].y - current->colors[color].y) * rate;
current->colors[color].z += (target->colors[color].z - current->colors[color].z) * rate;
current->colors[color].w += (target->colors[color].w - current->colors[color].w) * rate;
}
}
scratch_end(scratch);
}
//////////////////////////////
//- rjf: consume events
//
+6 -15
View File
@@ -409,12 +409,6 @@ struct RD_RegsNode
////////////////////////////////
//~ rjf: Structured Theme Types, Parsed From Config
typedef struct RD_Theme RD_Theme;
struct RD_Theme
{
Vec4F32 colors[RD_ThemeColor_COUNT];
};
typedef enum RD_FontSlot
{
RD_FontSlot_Main,
@@ -450,7 +444,8 @@ struct RD_WindowState
Rng2F32 last_window_rect;
// rjf: theme (recomputed each frame)
UI_Theme *theme;
UI_Theme *theme;
Vec4F32 theme_code_colors[RD_CodeColorSlot_COUNT];
// rjf: font raster flags (recomputed each frame)
FNT_RasterFlags font_slot_raster_flags[RD_FontSlot_COUNT];
@@ -603,10 +598,6 @@ struct RD_State
// rjf: slot -> font tag map (constructed from-scratch each frame)
FNT_Tag font_slot_table[RD_FontSlot_COUNT];
// rjf: theme target (constructed from-scratch each frame)
RD_Theme *theme;
RD_Theme *theme_target;
// rjf: meta name -> eval type key map (constructed from-scratch each frame)
E_String2TypeKeyMap *meta_name2type_map;
@@ -969,10 +960,10 @@ internal void rd_set_autocomp_regs_(RD_Regs *regs);
////////////////////////////////
//~ rjf: Colors, Fonts, Config
//- rjf: colors
internal Vec4F32 rd_rgba_from_theme_color(RD_ThemeColor color);
internal RD_ThemeColor rd_theme_color_from_txt_token_kind(TXT_TokenKind kind);
internal RD_ThemeColor rd_theme_color_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string);
//- rjf: colors
internal Vec4F32 rd_rgba_from_code_color_slot(RD_CodeColorSlot slot);
internal RD_CodeColorSlot rd_code_color_slot_from_txt_token_kind(TXT_TokenKind kind);
internal RD_CodeColorSlot rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string);
//- rjf: fonts
internal FNT_Tag rd_font_from_slot(RD_FontSlot slot);
+13 -13
View File
@@ -2467,7 +2467,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
{
params->font,
ui_top_text_raster_flags(),
rd_rgba_from_theme_color(RD_ThemeColor_CodeDefault),
rd_rgba_from_code_color_slot(RD_CodeColorSlot_CodeDefault),
params->font_size,
};
dr_fstrs_push_new(scratch.arena, &line_fstrs, &fstr_params, line_string);
@@ -2494,12 +2494,12 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
}
// rjf: token -> token color
RD_ThemeColor token_theme_color = rd_theme_color_from_txt_token_kind(token->kind);
RD_ThemeColor lookup_theme_color = rd_theme_color_from_txt_token_kind_lookup_string(token->kind, token_string);
Vec4F32 token_color = rd_rgba_from_theme_color(token_theme_color);
if(lookup_theme_color != RD_ThemeColor_CodeDefault)
RD_CodeColorSlot token_color_slot = rd_code_color_slot_from_txt_token_kind(token->kind);
RD_CodeColorSlot lookup_color_slot = rd_code_color_slot_from_txt_token_kind_lookup_string(token->kind, token_string);
Vec4F32 token_color = rd_rgba_from_code_color_slot(token_color_slot);
if(lookup_color_slot != RD_CodeColorSlot_CodeDefault)
{
Vec4F32 lookup_color = rd_rgba_from_theme_color(lookup_theme_color);
Vec4F32 lookup_color = rd_rgba_from_code_color_slot(lookup_color_slot);
F32 lookup_color_mix_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "%S_lookup", token_string), 1.f);
token_color = mix_4f32(token_color, lookup_color, lookup_color_mix_t);
}
@@ -2921,7 +2921,7 @@ rd_fstrs_from_rich_string(Arena *arena, String8 string)
{
fstr.params.font = rd_font_from_slot(RD_FontSlot_Code);
fstr.params.raster_flags = rd_raster_flags_from_slot(RD_FontSlot_Code);
fstr.params.color = rd_rgba_from_theme_color(RD_ThemeColor_CodeDefault);
fstr.params.color = rd_rgba_from_code_color_slot(RD_CodeColorSlot_CodeDefault);
}
}
dr_fstrs_push(arena, &fstrs, &fstr);
@@ -2996,8 +2996,8 @@ rd_fstrs_from_code_string(Arena *arena, F32 alpha, B32 indirection_size_change,
indirection_size_change = 0;
for(TXT_Token *token = tokens.v; token < tokens_opl; token += 1)
{
RD_ThemeColor token_color = rd_theme_color_from_txt_token_kind(token->kind);
Vec4F32 token_color_rgba = rd_rgba_from_theme_color(token_color);
RD_CodeColorSlot token_color_slot = rd_code_color_slot_from_txt_token_kind(token->kind);
Vec4F32 token_color_rgba = rd_rgba_from_code_color_slot(token_color_slot);
token_color_rgba.w *= alpha;
String8 token_string = str8_substr(string, token->range);
if(str8_match(token_string, str8_lit("{"), 0)) { indirection_counter += 1; }
@@ -3022,10 +3022,10 @@ rd_fstrs_from_code_string(Arena *arena, F32 alpha, B32 indirection_size_change,
case TXT_TokenKind_Identifier:
case TXT_TokenKind_Keyword:
{
RD_ThemeColor lookup_theme_color = rd_theme_color_from_txt_token_kind_lookup_string(token->kind, token_string);
if(lookup_theme_color != RD_ThemeColor_CodeDefault)
RD_CodeColorSlot lookup_theme_color_slot = rd_code_color_slot_from_txt_token_kind_lookup_string(token->kind, token_string);
if(lookup_theme_color_slot != RD_CodeColorSlot_CodeDefault)
{
Vec4F32 lookup_color = rd_rgba_from_theme_color(lookup_theme_color);
Vec4F32 lookup_color = rd_rgba_from_code_color_slot(lookup_theme_color_slot);
F32 lookup_color_mix_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "%S_lookup", token_string), 1.f);
token_color_rgba = mix_4f32(token_color_rgba, lookup_color, lookup_color_mix_t);
}
@@ -3043,7 +3043,7 @@ rd_fstrs_from_code_string(Arena *arena, F32 alpha, B32 indirection_size_change,
}break;
case TXT_TokenKind_Numeric:
{
Vec4F32 token_color_rgba_alt = rd_rgba_from_theme_color(RD_ThemeColor_CodeNumericAltDigitGroup);
Vec4F32 token_color_rgba_alt = rd_rgba_from_code_color_slot(RD_CodeColorSlot_CodeNumericAltDigitGroup);
token_color_rgba_alt.w *= alpha;
F32 font_size = ui_top_font_size() * (1.f - !!indirection_size_change*(indirection_counter/10.f));