diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c index 96c6733780c..f8a05d2f74c 100644 --- a/release/datafiles/userdef/userdef_default_theme.c +++ b/release/datafiles/userdef/userdef_default_theme.c @@ -206,6 +206,10 @@ const bTheme U_theme_default = { .roundness = 0.2f, }, .wcol_state = { + .error = RGBA(0x771111ff), + .warning = RGBA(0xac8737ff), + .info = RGBA(0x28487dff), + .success = RGBA(0x188625ff), .inner_anim = RGBA(0x53992eff), .inner_anim_sel = RGBA(0x38a600ff), .inner_key = RGBA(0xb3ae36ff), @@ -496,11 +500,8 @@ const bTheme U_theme_default = { .facedot_size = 4, .info_selected = RGBA(0x3b5689ff), .info_selected_text = RGBA(0xffffffff), - .info_error = RGBA(0xb34c34ff), .info_error_text = RGBA(0xffffffff), - .info_warning = RGBA(0xac8737ff), .info_warning_text = RGBA(0xffffffff), - .info_info = RGBA(0x1f3862ff), .info_info_text = RGBA(0xffffffff), .info_debug = RGBA(0x6b3293ff), .info_debug_text = RGBA(0xffffffff), diff --git a/scripts/startup/bl_ui/space_userpref.py b/scripts/startup/bl_ui/space_userpref.py index edf828b12bc..13088baa3b7 100644 --- a/scripts/startup/bl_ui/space_userpref.py +++ b/scripts/startup/bl_ui/space_userpref.py @@ -1119,6 +1119,13 @@ class USERPREF_PT_theme_interface_state(ThemePanel, CenterAlignMixIn, Panel): flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False) + col = flow.column(align=True) + + col.prop(ui_state, "error") + col.prop(ui_state, "warning") + col.prop(ui_state, "info") + col.prop(ui_state, "success") + col = flow.column(align=True) col.prop(ui_state, "inner_anim") col.prop(ui_state, "inner_anim_sel", text="Selected") diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index 2607f7be7f2..ff0d1e8adfe 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -31,7 +31,7 @@ extern "C" { /* Blender file format version. */ #define BLENDER_FILE_VERSION BLENDER_VERSION -#define BLENDER_FILE_SUBVERSION 2 +#define BLENDER_FILE_SUBVERSION 3 /* Minimum Blender version that supports reading file written with the current * version. Older Blender versions will test this and cancel loading the file, showing a warning to diff --git a/source/blender/blenloader/intern/versioning_userdef.cc b/source/blender/blenloader/intern/versioning_userdef.cc index 6f2d675a8ae..00a2db686ea 100644 --- a/source/blender/blenloader/intern/versioning_userdef.cc +++ b/source/blender/blenloader/intern/versioning_userdef.cc @@ -218,6 +218,14 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme) FROM_DEFAULT_V4_UCHAR(space_sequencer.text_strip_cursor); FROM_DEFAULT_V4_UCHAR(space_sequencer.selected_text); } + + if (!USER_VERSION_ATLEAST(405, 3)) { + FROM_DEFAULT_V4_UCHAR(tui.wcol_state.error); + FROM_DEFAULT_V4_UCHAR(tui.wcol_state.warning); + FROM_DEFAULT_V4_UCHAR(tui.wcol_state.info); + FROM_DEFAULT_V4_UCHAR(tui.wcol_state.success); + } + /** * Always bump subversion in BKE_blender_version.h when adding versioning * code here, and wrap it inside a USER_VERSION_ATLEAST check. diff --git a/source/blender/editors/include/UI_resources.hh b/source/blender/editors/include/UI_resources.hh index 85e687cc1aa..ffe260c2919 100644 --- a/source/blender/editors/include/UI_resources.hh +++ b/source/blender/editors/include/UI_resources.hh @@ -39,7 +39,14 @@ BLI_STATIC_ASSERT(sizeof(BIFIconID_Static) <= sizeof(BIFIconID), #define TH_UNDEFINED -1 enum ThemeColorID { + TH_NONE, + TH_BLACK, + TH_WHITE, TH_REDALERT, + TH_ERROR, + TH_WARNING, + TH_INFO, + TH_SUCCESS, TH_THEMEUI, /* Common colors among spaces. */ @@ -341,11 +348,8 @@ enum ThemeColorID { TH_INFO_SELECTED, TH_INFO_SELECTED_TEXT, - TH_INFO_ERROR, TH_INFO_ERROR_TEXT, - TH_INFO_WARNING, TH_INFO_WARNING_TEXT, - TH_INFO_INFO, TH_INFO_INFO_TEXT, TH_INFO_DEBUG, TH_INFO_DEBUG_TEXT, diff --git a/source/blender/editors/interface/interface_icons.cc b/source/blender/editors/interface/interface_icons.cc index d12f768f758..3445b1542f9 100644 --- a/source/blender/editors/interface/interface_icons.cc +++ b/source/blender/editors/interface/interface_icons.cc @@ -1360,10 +1360,10 @@ static void svg_replace_color_attributes(std::string &svg, {"blender_back", nullptr, TH_BACK}, {"blender_text", nullptr, TH_TEXT}, {"blender_text_hi", nullptr, TH_TEXT_HI}, - {"blender_red_alert", nullptr, TH_REDALERT}, - {"blender_error", nullptr, TH_INFO_ERROR, SPACE_INFO}, - {"blender_warning", nullptr, TH_INFO_WARNING, SPACE_INFO}, - {"blender_info", nullptr, TH_INFO_INFO, SPACE_INFO}, + {"blender_red_alert", nullptr, TH_ERROR}, + {"blender_error", nullptr, TH_ERROR}, + {"blender_warning", nullptr, TH_WARNING}, + {"blender_info", nullptr, TH_INFO}, {"blender_scene", nullptr, TH_ICON_SCENE}, {"blender_collection", nullptr, TH_ICON_COLLECTION}, {"blender_object", nullptr, TH_ICON_OBJECT}, diff --git a/source/blender/editors/interface/interface_utils.cc b/source/blender/editors/interface/interface_utils.cc index 6d3c597a7e6..adf90f4f258 100644 --- a/source/blender/editors/interface/interface_utils.cc +++ b/source/blender/editors/interface/interface_utils.cc @@ -603,13 +603,13 @@ int UI_icon_from_report_type(int type) int UI_icon_colorid_from_report_type(int type) { if (type & RPT_ERROR_ALL) { - return TH_INFO_ERROR; + return TH_ERROR; } if (type & RPT_WARNING_ALL) { - return TH_INFO_WARNING; + return TH_WARNING; } if (type & RPT_INFO_ALL) { - return TH_INFO_INFO; + return TH_INFO; } if (type & RPT_DEBUG_ALL) { return TH_INFO_DEBUG; @@ -620,7 +620,7 @@ int UI_icon_colorid_from_report_type(int type) if (type & RPT_OPERATOR) { return TH_INFO_OPERATOR; } - return TH_INFO_WARNING; + return TH_WARNING; } int UI_text_colorid_from_report_type(int type) diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index e9b83808648..54275fee2f2 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -2537,12 +2537,11 @@ static void widget_state(uiWidgetType *wt, const uiWidgetStateInfo *state, eUIEm } if (state->but_flag & UI_BUT_REDALERT) { - const uchar red[4] = {255, 0, 0}; if (wt->draw && emboss != UI_EMBOSS_NONE) { - color_blend_v3_v3(wt->wcol.inner, red, 0.4f); + UI_GetThemeColor3ubv(TH_REDALERT, wt->wcol.inner); } else { - color_blend_v3_v3(wt->wcol.text, red, 0.4f); + UI_GetThemeColor3ubv(TH_REDALERT, wt->wcol.text); } } @@ -4352,8 +4351,7 @@ static void widget_state_label(uiWidgetType *wt, } if (state->but_flag & UI_BUT_REDALERT) { - const uchar red[4] = {255, 0, 0}; - color_blend_v3_v3(wt->wcol.text, red, 0.4f); + UI_GetThemeColor3ubv(TH_REDALERT, wt->wcol.text); } } diff --git a/source/blender/editors/interface/regions/interface_region_tooltip.cc b/source/blender/editors/interface/regions/interface_region_tooltip.cc index 44f41a1d140..be96a98e94d 100644 --- a/source/blender/editors/interface/regions/interface_region_tooltip.cc +++ b/source/blender/editors/interface/regions/interface_region_tooltip.cc @@ -208,9 +208,7 @@ static void ui_tooltip_region_draw_cb(const bContext * /*C*/, ARegion *region) color_blend_f3_f3(active_color, main_color, 0.3f); /* `alert_color` is red, push a bit toward text color. */ - alert_color[0] = 0.7f; - alert_color[1] = 0.0f; - alert_color[2] = 0.0f; + UI_GetThemeColor3fv(TH_REDALERT, alert_color); color_blend_f3_f3(alert_color, main_color, 0.3f); /* Draw text. */ diff --git a/source/blender/editors/interface/resources.cc b/source/blender/editors/interface/resources.cc index 8deb0e6af5b..1beab0e5808 100644 --- a/source/blender/editors/interface/resources.cc +++ b/source/blender/editors/interface/resources.cc @@ -60,8 +60,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) { ThemeSpace *ts = nullptr; static uchar error[4] = {240, 0, 240, 255}; - static uchar alert[4] = {240, 60, 60, 255}; static uchar back[4] = {0, 0, 0, 255}; + static uchar none[4] = {0, 0, 0, 0}; + static uchar white[4] = {255, 255, 255, 255}; + static uchar black[4] = {0, 0, 0, 255}; static uchar setting = 0; const uchar *cp = error; @@ -75,9 +77,27 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) if (colorid < TH_THEMEUI) { switch (colorid) { - + case TH_NONE: + cp = none; + break; + case TH_BLACK: + cp = black; + break; + case TH_WHITE: + cp = white; + break; case TH_REDALERT: - cp = alert; + case TH_ERROR: + cp = btheme->tui.wcol_state.error; + break; + case TH_WARNING: + cp = btheme->tui.wcol_state.warning; + break; + case TH_INFO: + cp = btheme->tui.wcol_state.info; + break; + case TH_SUCCESS: + cp = btheme->tui.wcol_state.success; break; } } @@ -1034,21 +1054,12 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) case TH_INFO_SELECTED_TEXT: cp = ts->info_selected_text; break; - case TH_INFO_ERROR: - cp = ts->info_error; - break; case TH_INFO_ERROR_TEXT: cp = ts->info_error_text; break; - case TH_INFO_WARNING: - cp = ts->info_warning; - break; case TH_INFO_WARNING_TEXT: cp = ts->info_warning_text; break; - case TH_INFO_INFO: - cp = ts->info_info; - break; case TH_INFO_INFO_TEXT: cp = ts->info_info_text; break; diff --git a/source/blender/editors/interface/templates/interface_template_status.cc b/source/blender/editors/interface/templates/interface_template_status.cc index f74bd7d2f70..89cad9df1a4 100644 --- a/source/blender/editors/interface/templates/interface_template_status.cc +++ b/source/blender/editors/interface/templates/interface_template_status.cc @@ -532,7 +532,7 @@ void uiTemplateStatusInfo(uiLayout *layout, bContext *C) 0.0f, ""); /*# UI_BTYPE_ROUNDBOX's background color is set in `but->col`. */ - UI_GetThemeColorType4ubv(TH_INFO_WARNING, SPACE_INFO, but->col); + UI_GetThemeColor4ubv(TH_WARNING, but->col); if (!warning_message.is_empty()) { /* Background for the rest of the message. */ @@ -550,7 +550,7 @@ void uiTemplateStatusInfo(uiLayout *layout, bContext *C) ""); /* Use icon background at low opacity to highlight, but still contrasting with area TH_TEXT. */ - UI_GetThemeColorType4ubv(TH_INFO_WARNING, SPACE_INFO, but->col); + UI_GetThemeColor4ubv(TH_WARNING, but->col); but->col[3] = 64; } diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc index bb4bbeefa5d..cc181ae0993 100644 --- a/source/blender/editors/space_view3d/view3d_draw.cc +++ b/source/blender/editors/space_view3d/view3d_draw.cc @@ -2742,7 +2742,9 @@ void ED_scene_draw_fps(const Scene *scene, int xoffset, int *yoffset) if (state.fps_average + 0.5f < state.fps_target) { /* Always show fractional when under performing. */ show_fractional = true; - BLF_color4ub(font_id, 225, 36, 36, 255); + float alert_color[4]; + UI_GetThemeColorBlend4f(TH_REDALERT, TH_TEXT_HI, 0.5f, alert_color); + BLF_color4fv(font_id, alert_color); } if (show_fractional) { diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index 8bc02de5bc9..8eab65964f4 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -128,6 +128,10 @@ typedef struct uiWidgetColors { } uiWidgetColors; typedef struct uiWidgetStateColors { + unsigned char error[4]; + unsigned char warning[4]; + unsigned char info[4]; + unsigned char success[4]; unsigned char inner_anim[4]; unsigned char inner_anim_sel[4]; unsigned char inner_key[4]; @@ -437,12 +441,13 @@ typedef struct ThemeSpace { /* info */ unsigned char info_selected[4], info_selected_text[4]; - unsigned char info_error[4], info_error_text[4]; - unsigned char info_warning[4], info_warning_text[4]; - unsigned char info_info[4], info_info_text[4]; + unsigned char info_error_text[4]; + unsigned char info_warning_text[4]; + unsigned char info_info_text[4]; unsigned char info_debug[4], info_debug_text[4]; unsigned char info_property[4], info_property_text[4]; unsigned char info_operator[4], info_operator_text[4]; + char _pad6[4]; unsigned char paint_curve_pivot[4]; unsigned char paint_curve_handle[4]; diff --git a/source/blender/makesrna/intern/rna_userdef.cc b/source/blender/makesrna/intern/rna_userdef.cc index abcf7dd28d4..9d63107dfd6 100644 --- a/source/blender/makesrna/intern/rna_userdef.cc +++ b/source/blender/makesrna/intern/rna_userdef.cc @@ -1678,6 +1678,26 @@ static void rna_def_userdef_theme_ui_wcol_state(BlenderRNA *brna) RNA_def_struct_ui_text( srna, "Theme Widget State Color", "Theme settings for widget state colors"); + prop = RNA_def_property(srna, "error", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Error", "Color for error items"); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + + prop = RNA_def_property(srna, "warning", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Warning", "Color for warning items"); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + + prop = RNA_def_property(srna, "info", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Info", "Color for informational items"); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + + prop = RNA_def_property(srna, "success", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Success", "Color for successful items"); + RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); + prop = RNA_def_property(srna, "inner_anim", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Animated", ""); @@ -3134,31 +3154,16 @@ static void rna_def_userdef_theme_space_info(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Selected Line Text Color", "Text color of selected line"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); - prop = RNA_def_property(srna, "info_error", PROP_FLOAT, PROP_COLOR_GAMMA); - RNA_def_property_array(prop, 4); - RNA_def_property_ui_text(prop, "Error Icon Background", "Background color of Error icon"); - RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); - prop = RNA_def_property(srna, "info_error_text", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Error Icon Foreground", "Foreground color of Error icon"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); - prop = RNA_def_property(srna, "info_warning", PROP_FLOAT, PROP_COLOR_GAMMA); - RNA_def_property_array(prop, 4); - RNA_def_property_ui_text(prop, "Warning Icon Background", "Background color of Warning icon"); - RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); - prop = RNA_def_property(srna, "info_warning_text", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Warning Icon Foreground", "Foreground color of Warning icon"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); - prop = RNA_def_property(srna, "info_info", PROP_FLOAT, PROP_COLOR_GAMMA); - RNA_def_property_array(prop, 4); - RNA_def_property_ui_text(prop, "Info Icon Background", "Background color of Info icon"); - RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); - prop = RNA_def_property(srna, "info_info_text", PROP_FLOAT, PROP_COLOR_GAMMA); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Info Icon Foreground", "Foreground color of Info icon");