UI: Theme: Move keyframe properties to common

Continuing #140360

This PR moves keyframe theme properties from editors into Common.
Besides Dope Sheet, keyframe properties were in:

- Sequencer (almost all types, and might use more in the future)
- 3D Viewport, where the active object name overlay used a separate Object Keyframe color when
it had keyframes on the current frame. Now it uses the common Keyframe Selected color, instead
of having its own property just for this little text.
- Keyframes in Movie Clip Editor were hard-coded white, now they use a common Keyframe color.
Selected colors used wrong long key selected color, now they use common Keyframe Selected color.
- Movie Clip Editor also used separate colors for what it called "Strips", but they are visually
the exact same thing as "long keys" in Dope Sheet, so they use common long key colors now.

There are Keyframe Border properties in Dope Sheet, Sequencer, and NLA, but they're not shared
because they're drawn on very different backgrounds, in different sizes, with different fill colors, so
it's difficult to make one color work for all of them, and it can restrict customization and accessibility.

Video in PR

---

Details:
- Long keys in Dope Sheet/Clip Editor and Strips in NLA used the same internal "strip" attribute.
Those needed to be separated to properly use long key colors in common, without worrying
about affecting unrelated things, and those two are as unrelated as they can get.
To properly separate them I added new "long_key" attributes, and corresponding
`TH_LONGKEY` and `TH_LONGKEY_SELECT`.
- Long keys in Movie Clip Editor had hardcoded alpha. Now they use alpha of the theme color.

Pull Request: https://projects.blender.org/blender/blender/pulls/144259
This commit is contained in:
Nika Kutsniashvili
2025-08-29 23:22:38 +02:00
committed by Nika Kutsniashvili
parent 9f4ac95357
commit cb22938fe9
11 changed files with 164 additions and 267 deletions

View File

@@ -286,6 +286,20 @@ const bTheme U_theme_default = {
.channel_sub = RGBA(0x0f2c4d80),
.channel_group = RGBA(0x1a332d37),
.channel_group_active = RGBA(0x216d5b67),
.keyframe = RGBA(0xbfbfbfff),
.keyframe_extreme = RGBA(0xe8b3ccff),
.keyframe_breakdown = RGBA(0xb3dbe8ff),
.keyframe_jitter = RGBA(0x94e575ff),
.keyframe_moving_hold = RGBA(0x808080ff),
.keyframe_generated = RGBA(0x585858ff),
.keyframe_selected = RGBA(0xffbe33ff),
.keyframe_extreme_selected = RGBA(0xf28080ff),
.keyframe_breakdown_selected = RGBA(0x54bfedff),
.keyframe_jitter_selected = RGBA(0x61c042ff),
.keyframe_moving_hold_selected = RGBA(0xffaf23ff),
.keyframe_generated_selected = RGBA(0xa28962ff),
.long_key = RGBA(0xffffff1f),
.long_key_selected = RGBA(0xff8c0099),
},
.curves = {
.handle_free = RGBA(0x000000ff),
@@ -370,7 +384,6 @@ const bTheme U_theme_default = {
.bone_locked_weight = RGBA(0xff000080),
.before_current_frame = RGBA(0xf22e23ff),
.after_current_frame = RGBA(0x78f244ff),
.time_keyframe = RGBA(0xddd700ff),
.time_gp_keyframe = RGBA(0x7a9b14ff),
.freestyle_edge_mark = RGBA(0x7fff7fff),
.freestyle_face_mark = RGBA(0x7fff7f4d),
@@ -477,22 +490,8 @@ const bTheme U_theme_default = {
.shade2 = RGBA(0x1d1d1d99),
.hilite = RGBA(0x60c04044),
.grid = RGBA(0x161616ff),
.strip = RGBA(0xffffff1f),
.strip_select = RGBA(0xff8c0099),
.time_scrub_background = RGBA(0x1d1d1dff),
.ds_ipoline = RGBA(0x94e575cc),
.keytype_keyframe = RGBA(0xbfbfbfff),
.keytype_extreme = RGBA(0xe8b3ccff),
.keytype_breakdown = RGBA(0xb3dbe8ff),
.keytype_jitter = RGBA(0x94e575ff),
.keytype_movehold = RGBA(0x808080ff),
.keytype_generated = RGBA(0x585858ff),
.keytype_keyframe_select = RGBA(0xffbe33ff),
.keytype_extreme_select = RGBA(0xf28080ff),
.keytype_breakdown_select = RGBA(0x54bfedff),
.keytype_jitter_select = RGBA(0x61c042ff),
.keytype_movehold_select = RGBA(0xffaf23ff),
.keytype_generated_select = RGBA(0xa28962ff),
.keyborder = RGBA(0x000000ff),
.keyborder_select = RGBA(0x000000ff),
.vertex_size = 3,
@@ -559,18 +558,6 @@ const bTheme U_theme_default = {
.before_current_frame = RGBA(0xf22e23ff),
.after_current_frame = RGBA(0x78f244ff),
.time_scrub_background = RGBA(0x121212ff),
.keytype_keyframe = RGBA(0xbfbfbfff),
.keytype_extreme = RGBA(0xe8b3ccff),
.keytype_breakdown = RGBA(0xb3dbe8ff),
.keytype_jitter = RGBA(0x94e575ff),
.keytype_movehold = RGBA(0x808080ff),
.keytype_generated = RGBA(0x585858ff),
.keytype_keyframe_select = RGBA(0xffbe33ff),
.keytype_extreme_select = RGBA(0xf28080ff),
.keytype_breakdown_select = RGBA(0x54bfedff),
.keytype_jitter_select = RGBA(0x61c042ff),
.keytype_movehold_select = RGBA(0xffaf23ff),
.keytype_generated_select = RGBA(0xa28962ff),
.keyborder = RGBA(0x000000ff),
.keyborder_select = RGBA(0x000000ff),
.vertex_size = 3,
@@ -776,8 +763,6 @@ const bTheme U_theme_default = {
.list_text = RGBA(0xb8b8b8ff),
.list_text_hi = RGBA(0xffaf23ff),
.grid = RGBA(0x181818ff),
.strip = RGBA(0xffffff80),
.strip_select = RGBA(0xff8c00ff),
.time_scrub_background = RGBA(0x181818ff),
.vertex_size = 3,
.outline_width = 1,

View File

@@ -395,6 +395,20 @@
channel_sub="#7aa4cc24"
channel_group="#278c0e37"
channel_group_active="#4eb33555"
keyframe="#e8e8e8"
keyframe_selected="#ffbe33"
keyframe_extreme="#e8b3cc"
keyframe_extreme_selected="#f28080"
keyframe_breakdown="#b3dbe8"
keyframe_breakdown_selected="#54bfed"
keyframe_jitter="#94e575"
keyframe_jitter_selected="#61c042"
keyframe_moving_hold="#5c5656"
keyframe_moving_hold_selected="#ffaf23"
keyframe_generated="#a7a7a7"
keyframe_generated_selected="#c4a05f"
long_key="#1a151580"
long_key_selected="#ff8c00cc"
>
</ThemeCommonAnim>
</anim>
@@ -431,7 +445,6 @@
text_grease_pencil="#b5e61d"
object_selected="#f15800"
object_active="#ffaa40"
text_keyframe="#ddd700"
camera="#000000"
empty="#000000"
light="#00000028"
@@ -637,20 +650,6 @@
time_scrub_background="#808080e6"
channels="#707070ff"
channels_selected="#60c04044"
long_key="#1a151580"
long_key_selected="#ff8c00cc"
keyframe="#e8e8e8"
keyframe_selected="#ffbe33"
keyframe_extreme="#e8b3cc"
keyframe_extreme_selected="#f28080"
keyframe_breakdown="#b3dbe8"
keyframe_breakdown_selected="#54bfed"
keyframe_jitter="#94e575"
keyframe_jitter_selected="#61c042"
keyframe_movehold="#5c5656"
keyframe_movehold_selected="#ffaf23"
keyframe_generated="#a7a7a7"
keyframe_generated_selected="#c4a05f"
keyframe_border="#000000ff"
keyframe_border_selected="#000000ff"
keyframe_scale_factor="1"
@@ -754,16 +753,6 @@
active_strip="#ffffff"
selected_strip="#ff6a00"
time_scrub_background="#292929e6"
keyframe="#ff8500"
keyframe_selected="#ffbe33"
keyframe_breakdown="#b3dbe8"
keyframe_breakdown_selected="#54bfed"
keyframe_movehold="#808080"
keyframe_movehold_selected="#ffaf23"
keyframe_generated="#585858"
keyframe_generated_selected="#a28962"
keyframe_border="#000000ff"
keyframe_border_selected="#000000ff"
preview_back="#000000"
metadatabg="#000000"
metadatatext="#ffffff"
@@ -1029,8 +1018,6 @@
path_keyframe_before="#ffc4c4"
path_keyframe_after="#c4c4ff"
time_scrub_background="#292929e6"
strips="#0c0a0a"
strips_selected="#ff8c00"
metadatabg="#000000"
metadatatext="#ffffff"
track_selected="#e7f7e74d"

View File

@@ -27,7 +27,7 @@
/* Blender file format version. */
#define BLENDER_FILE_VERSION BLENDER_VERSION
#define BLENDER_FILE_SUBVERSION 68
#define BLENDER_FILE_SUBVERSION 69
/* 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

View File

@@ -124,12 +124,6 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
}
if (!USER_VERSION_ATLEAST(400, 27)) {
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_keyframe);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_breakdown);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_movehold);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_keyframe_select);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_breakdown_select);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_movehold_select);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keyborder);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keyborder_select);
FROM_DEFAULT_V4_UCHAR(space_sequencer.transition);
@@ -156,11 +150,6 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
&userdef->themes, btheme, "Theme", '.', offsetof(bTheme, name), sizeof(btheme->name));
}
if (!USER_VERSION_ATLEAST(402, 17)) {
FROM_DEFAULT_V4_UCHAR(space_action.keytype_generated);
FROM_DEFAULT_V4_UCHAR(space_action.keytype_generated_select);
}
if (!USER_VERSION_ATLEAST(402, 21)) {
FROM_DEFAULT_V4_UCHAR(asset_shelf.back);
FROM_DEFAULT_V4_UCHAR(asset_shelf.header_back);
@@ -170,11 +159,6 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
FROM_DEFAULT_V4_UCHAR(space_view3d.time_gp_keyframe);
}
if (!USER_VERSION_ATLEAST(403, 1)) {
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_generated);
FROM_DEFAULT_V4_UCHAR(space_sequencer.keytype_generated_select);
}
if (!USER_VERSION_ATLEAST(402, 62)) {
FROM_DEFAULT_V4_UCHAR(space_sequencer.audio);
FROM_DEFAULT_V4_UCHAR(space_sequencer.color_strip);
@@ -398,6 +382,23 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
FROM_DEFAULT_V4_UCHAR(space_clip.track_selected);
}
if (!USER_VERSION_ATLEAST(500, 69)) {
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_extreme);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_breakdown);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_jitter);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_moving_hold);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_generated);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_extreme_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_breakdown_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_jitter_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_moving_hold_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_generated_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.long_key);
FROM_DEFAULT_V4_UCHAR(common.anim.long_key_selected);
}
/**
* Always bump subversion in BKE_blender_version.h when adding versioning
* code here, and wrap it inside a USER_VERSION_ATLEAST check.

View File

@@ -216,8 +216,8 @@ static void channel_ui_data_init(DrawKeylistUIData *ctx,
ctx->show_ipo = (saction_flag & SACTION_SHOW_INTERPOLATION) != 0;
UI_GetThemeColor4fv(TH_STRIP_SELECT, ctx->sel_color);
UI_GetThemeColor4fv(TH_STRIP, ctx->unsel_color);
UI_GetThemeColor4fv(TH_LONGKEY_SELECT, ctx->sel_color);
UI_GetThemeColor4fv(TH_LONGKEY, ctx->unsel_color);
UI_GetThemeColor4fv(TH_DOPESHEET_IPOLINE, ctx->ipo_color);
ctx->sel_color[3] *= ctx->alpha;

View File

@@ -121,7 +121,6 @@ enum ThemeColorID {
TH_TIME_SCRUB_BACKGROUND,
TH_TIME_MARKER_LINE,
TH_TIME_MARKER_LINE_SELECTED,
TH_TIME_KEYFRAME,
TH_TIME_GP_KEYFRAME,
TH_NURB_ULINE,
TH_NURB_VLINE,
@@ -161,6 +160,9 @@ enum ThemeColorID {
TH_STRIP_SELECT,
TH_TRACK_SELECT,
TH_LONGKEY,
TH_LONGKEY_SELECT,
TH_KEYTYPE_KEYFRAME, /* KEYTYPES */
TH_KEYTYPE_KEYFRAME_SELECT,
TH_KEYTYPE_EXTREME,

View File

@@ -483,6 +483,12 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_BONE_LOCKED_WEIGHT:
cp = ts->bone_locked_weight;
break;
case TH_LONGKEY:
cp = btheme->common.anim.long_key;
break;
case TH_LONGKEY_SELECT:
cp = btheme->common.anim.long_key_selected;
break;
case TH_STRIP:
cp = ts->strip;
break;
@@ -493,40 +499,40 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
cp = ts->track_selected;
break;
case TH_KEYTYPE_KEYFRAME:
cp = ts->keytype_keyframe;
cp = btheme->common.anim.keyframe;
break;
case TH_KEYTYPE_KEYFRAME_SELECT:
cp = ts->keytype_keyframe_select;
cp = btheme->common.anim.keyframe_selected;
break;
case TH_KEYTYPE_EXTREME:
cp = ts->keytype_extreme;
cp = btheme->common.anim.keyframe_extreme;
break;
case TH_KEYTYPE_EXTREME_SELECT:
cp = ts->keytype_extreme_select;
cp = btheme->common.anim.keyframe_extreme_selected;
break;
case TH_KEYTYPE_BREAKDOWN:
cp = ts->keytype_breakdown;
cp = btheme->common.anim.keyframe_breakdown;
break;
case TH_KEYTYPE_BREAKDOWN_SELECT:
cp = ts->keytype_breakdown_select;
cp = btheme->common.anim.keyframe_breakdown_selected;
break;
case TH_KEYTYPE_JITTER:
cp = ts->keytype_jitter;
cp = btheme->common.anim.keyframe_jitter;
break;
case TH_KEYTYPE_JITTER_SELECT:
cp = ts->keytype_jitter_select;
cp = btheme->common.anim.keyframe_jitter_selected;
break;
case TH_KEYTYPE_MOVEHOLD:
cp = ts->keytype_movehold;
cp = btheme->common.anim.keyframe_moving_hold;
break;
case TH_KEYTYPE_MOVEHOLD_SELECT:
cp = ts->keytype_movehold_select;
cp = btheme->common.anim.keyframe_moving_hold_selected;
break;
case TH_KEYTYPE_GENERATED:
cp = ts->keytype_generated;
cp = btheme->common.anim.keyframe_generated;
break;
case TH_KEYTYPE_GENERATED_SELECT:
cp = ts->keytype_generated_select;
cp = btheme->common.anim.keyframe_generated_selected;
break;
case TH_KEYBORDER:
cp = ts->keyborder;
@@ -543,9 +549,6 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_FRAME_AFTER:
cp = ts->after_current_frame;
break;
case TH_TIME_KEYFRAME:
cp = ts->time_keyframe;
break;
case TH_TIME_GP_KEYFRAME:
cp = ts->time_gp_keyframe;
break;

View File

@@ -58,10 +58,14 @@ static void track_channel_color(MovieTrackingTrack *track, bool default_color, f
static void draw_keyframe_shape(
float x, float y, bool sel, float alpha, uint pos_id, uint color_id)
{
float color[4] = {0.91f, 0.91f, 0.91f, alpha};
float color[4];
if (sel) {
UI_GetThemeColorShadeAlpha4fv(TH_STRIP_SELECT, 50, -255 * (1.0f - alpha), color);
UI_GetThemeColor4fv(TH_KEYTYPE_KEYFRAME_SELECT, color);
}
else {
UI_GetThemeColor4fv(TH_KEYTYPE_KEYFRAME, color);
}
color[3] = alpha;
immAttr4fv(color_id, color);
immVertex2f(pos_id, x, y);
@@ -123,11 +127,8 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *region, Scene *scene)
float y = (CHANNEL_FIRST);
/* setup colors for regular and selected strips */
UI_GetThemeColor3fv(TH_STRIP, strip);
UI_GetThemeColor3fv(TH_STRIP_SELECT, selected_strip);
strip[3] = 0.5f;
selected_strip[3] = 1.0f;
UI_GetThemeColor4fv(TH_LONGKEY, strip);
UI_GetThemeColor4fv(TH_LONGKEY_SELECT, selected_strip);
GPU_blend(GPU_BLEND_ALPHA);

View File

@@ -1462,7 +1462,7 @@ static void draw_selected_name(
if (blender::animrig::id_frame_has_keyframe((ID *)ob,
/* BKE_scene_ctime_get(scene) */ float(cfra)))
{
UI_FontThemeColor(font_id, TH_TIME_KEYFRAME);
UI_FontThemeColor(font_id, TH_KEYTYPE_KEYFRAME_SELECT);
}
}

View File

@@ -114,6 +114,14 @@ typedef struct ThemeCommonAnim {
unsigned char channel[4], channel_sub[4];
unsigned char channel_group[4], channel_group_active[4];
/** Key-types. */
unsigned char keyframe[4], keyframe_extreme[4], keyframe_breakdown[4], keyframe_jitter[4],
keyframe_moving_hold[4], keyframe_generated[4];
unsigned char keyframe_selected[4], keyframe_extreme_selected[4], keyframe_breakdown_selected[4],
keyframe_jitter_selected[4], keyframe_moving_hold_selected[4],
keyframe_generated_selected[4];
unsigned char long_key[4], long_key_selected[4];
} ThemeCommonAnim;
typedef struct ThemeCommonCurves {
@@ -316,7 +324,7 @@ typedef struct ThemeSpace {
unsigned char bone_solid[4], bone_pose[4], bone_pose_active[4], bone_locked_weight[4];
unsigned char strip[4], strip_select[4];
unsigned char before_current_frame[4], after_current_frame[4];
unsigned char time_keyframe[4], time_gp_keyframe[4];
unsigned char time_gp_keyframe[4];
unsigned char freestyle_edge_mark[4], freestyle_face_mark[4];
unsigned char time_scrub_background[4];
@@ -325,12 +333,7 @@ typedef struct ThemeSpace {
/** Dope-sheet. */
unsigned char ds_ipoline[4];
/** Key-types. */
unsigned char keytype_keyframe[4], keytype_extreme[4], keytype_breakdown[4], keytype_jitter[4],
keytype_movehold[4], keytype_generated[4];
/** Key-types. */
unsigned char keytype_keyframe_select[4], keytype_extreme_select[4], keytype_breakdown_select[4],
keytype_jitter_select[4], keytype_movehold_select[4], keytype_generated_select[4];
/** Keyframe border. */
unsigned char keyborder[4], keyborder_select[4];
char _pad4[3];
@@ -361,7 +364,6 @@ typedef struct ThemeSpace {
unsigned char node_zone_foreach_geometry_element[4];
unsigned char node_zone_closure[4];
unsigned char simulated_frames[4];
char _pad7[4];
/** For sequence editor. */
unsigned char movie[4], movieclip[4], mask[4], image[4], scene[4], audio[4];
@@ -372,7 +374,7 @@ typedef struct ThemeSpace {
float keyframe_scale_fac;
unsigned char editmesh_active[4];
char _pad9[1];
char _pad6[1];
unsigned char clipping_border_3d[4];
@@ -420,7 +422,6 @@ typedef struct ThemeSpace {
unsigned char anim_active[4];
/** Active Action = NULL. */
unsigned char anim_non_active[4];
char _pad8[4];
/** NLA 'Tweaking' action/strip. */
unsigned char nla_tweaking[4];
@@ -444,7 +445,6 @@ typedef struct ThemeSpace {
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];

View File

@@ -2202,6 +2202,81 @@ static void rna_def_userdef_theme_common_anim(BlenderRNA *brna)
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Active Channel Group", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
/* Keyframe properties */
prop = RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe", "Color of regular keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe Selected", "Color of selected keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_extreme", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Extreme Keyframe", "Color of extreme keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_extreme_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Extreme Keyframe Selected", "Color of selected extreme keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_breakdown", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Breakdown Keyframe", "Color of breakdown keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_breakdown_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Breakdown Keyframe Selected", "Color of selected breakdown keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_jitter", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Jitter Keyframe", "Color of jitter keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_jitter_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Jitter Keyframe Selected", "Color of selected jitter keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_moving_hold", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Moving Hold Keyframe", "Color of moving hold keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_moving_hold_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Moving Hold Keyframe Selected", "Color of selected moving hold keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_generated", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Generated Keyframe", "Color of generated keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_generated_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Generated Keyframe Selected", "Color of selected generated keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "long_key", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Long Key", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "long_key_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Long Key Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
}
static void rna_def_userdef_theme_common_curves(BlenderRNA *brna)
@@ -2745,12 +2820,6 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active Object", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "text_keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "time_keyframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Object Keyframe", "Color for indicating object keyframes");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
/* Object type options */
prop = RNA_def_property(srna, "camera", PROP_FLOAT, PROP_COLOR_GAMMA);
@@ -3710,57 +3779,6 @@ static void rna_def_userdef_theme_space_seq(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scrubbing/Markers Region", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_keyframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe", "Color of Keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_keyframe_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe Selected", "Color of selected keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_breakdown", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_breakdown");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Breakdown Keyframe", "Color of breakdown keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_breakdown_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_breakdown_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Breakdown Keyframe Selected", "Color of selected breakdown keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_movehold", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_movehold");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Moving Hold Keyframe", "Color of moving hold keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_movehold_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_movehold_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Moving Hold Keyframe Selected", "Color of selected moving hold keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_generated", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_generated");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Generated Keyframe", "Color of generated keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_generated_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_generated_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Generated Keyframe Selected", "Color of selected generated keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_border", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keyborder");
RNA_def_property_array(prop, 4);
@@ -3846,94 +3864,6 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Channels Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "long_key", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "strip");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Long Key", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "long_key_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "strip_select");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Long Key Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_keyframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe", "Color of Keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_keyframe_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe Selected", "Color of selected keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_extreme", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_extreme");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Extreme Keyframe", "Color of extreme keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_extreme_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_extreme_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Extreme Keyframe Selected", "Color of selected extreme keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_breakdown", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_breakdown");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Breakdown Keyframe", "Color of breakdown keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_breakdown_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_breakdown_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Breakdown Keyframe Selected", "Color of selected breakdown keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_jitter", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_jitter");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Jitter Keyframe", "Color of jitter keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_jitter_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_jitter_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Jitter Keyframe Selected", "Color of selected jitter keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_movehold", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_movehold");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Moving Hold Keyframe", "Color of moving hold keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_movehold_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_movehold_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Moving Hold Keyframe Selected", "Color of selected moving hold keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_generated", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_generated");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Generated Keyframe", "Color of generated keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_generated_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keytype_generated_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(
prop, "Generated Keyframe Selected", "Color of selected generated keyframe");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_border", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keyborder");
RNA_def_property_array(prop, 4);
@@ -4252,18 +4182,6 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scrubbing/Markers Region", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "strips", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "strip");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Strips", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "strips_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "strip_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Strips Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "metadatabg", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "metadatabg");
RNA_def_property_array(prop, 3);