UI: Theme: Common colors for animation channels

Continuation of #140360

New common properties for Channel and Channel Selected,
used in animation editors.
Previously Dope Sheet, Graph Editor, NLA, and Movie Clip Editor
had separate properties for them.

Video and images inside the PR.

---

> [!important]

- Channels looked different in Dope Sheet and Graph Editor. In the former,
they were same color as the background, so only labels and icons were visible,
in the latter they had a darker color, so their outline was visible. We need to pick
which design we go for now that they're combined. I chose color from Graph
Editor for now, with alpha from Dope Sheet, since only that editor uses alpha.

---

There is a confusion with names of channel colors. In 4.5 there is:
- - "Channel" (singular, blue color) which refers to objects, actions,
and action slots that hold/combine channels.
- - "Channels" (plural, black color) which refers to individual channels.

This goes against how we name things. In theme, especially, we refer to object
colors as "Object", singular, not Objects, plular. Same goes for all elements except
this one, where individual elements are referred in plural.

To lessen the confusion, and also avoid unnecessary breaking changes in the
future (in case we want to rename blue things, which seems likely), in this PR
I swap those names. Main reason is that black color marks individual channels,
so it should be singular, and blue colors are combination of many channels,
so they should be plural. Otherwise even talking about them is awkward.

Note that renaming isn't a breaking change, because we already "broke" them
by moving them to common path from individual editors.

Pull Request: https://projects.blender.org/blender/blender/pulls/146091
This commit is contained in:
Nika Kutsniashvili
2025-09-12 14:49:27 +02:00
committed by Nika Kutsniashvili
parent 15fd8ad7a1
commit 7f62d5d85e
11 changed files with 48 additions and 76 deletions

View File

@@ -298,10 +298,12 @@ const bTheme U_theme_default = {
.preview_range = RGBA(0xa14d0066), .preview_range = RGBA(0xa14d0066),
.time_marker = RGBA(0xffffff4d), .time_marker = RGBA(0xffffff4d),
.time_marker_selected = RGBA(0xffffffb3), .time_marker_selected = RGBA(0xffffffb3),
.channel = RGBA(0x194e8080), .channels = RGBA(0x194e8080),
.channel_sub = RGBA(0x0f2c4d80), .channels_sub = RGBA(0x0f2c4d80),
.channel_group = RGBA(0x1a332d37), .channel_group = RGBA(0x1a332d37),
.channel_group_active = RGBA(0x216d5b67), .channel_group_active = RGBA(0x216d5b67),
.channel = RGBA(0x12121299),
.channel_selected = RGBA(0x60c04044),
.keyframe = RGBA(0xbfbfbfff), .keyframe = RGBA(0xbfbfbfff),
.keyframe_extreme = RGBA(0xe8b3ccff), .keyframe_extreme = RGBA(0xe8b3ccff),
.keyframe_breakdown = RGBA(0xb3dbe8ff), .keyframe_breakdown = RGBA(0xb3dbe8ff),
@@ -442,7 +444,6 @@ const bTheme U_theme_default = {
.header_text = RGBA(0xeeeeeeff), .header_text = RGBA(0xeeeeeeff),
.header_text_hi = RGBA(0xffffffff), .header_text_hi = RGBA(0xffffffff),
.shade1 = RGBA(0x96969600), .shade1 = RGBA(0x96969600),
.shade2 = RGBA(0x12121264),
.grid = RGBA(0x1a1a1aff), .grid = RGBA(0x1a1a1aff),
.vertex = RGBA(0x000000ff), .vertex = RGBA(0x000000ff),
.vertex_select = RGBA(0xff8500ff), .vertex_select = RGBA(0xff8500ff),
@@ -484,8 +485,6 @@ const bTheme U_theme_default = {
.header_text = RGBA(0xeeeeeeff), .header_text = RGBA(0xeeeeeeff),
.header_text_hi = RGBA(0xffffffff), .header_text_hi = RGBA(0xffffffff),
.shade1 = RGBA(0xc0c0c000), .shade1 = RGBA(0xc0c0c000),
.shade2 = RGBA(0x1d1d1d99),
.hilite = RGBA(0x60c04044),
.grid = RGBA(0x161616ff), .grid = RGBA(0x161616ff),
.time_scrub_background = RGBA(0x1d1d1dff), .time_scrub_background = RGBA(0x1d1d1dff),
.ds_ipoline = RGBA(0x94e575cc), .ds_ipoline = RGBA(0x94e575cc),
@@ -520,7 +519,6 @@ const bTheme U_theme_default = {
.anim_non_active = RGBA(0x4d3b174d), .anim_non_active = RGBA(0x4d3b174d),
.nla_tweaking = RGBA(0x4df31a4d), .nla_tweaking = RGBA(0x4df31a4d),
.nla_tweakdupli = RGBA(0xd90000ff), .nla_tweakdupli = RGBA(0xd90000ff),
.nla_track = RGBA(0x303030ff),
.nla_transition = RGBA(0x1c2630ff), .nla_transition = RGBA(0x1c2630ff),
.nla_transition_sel = RGBA(0x2e75dbff), .nla_transition_sel = RGBA(0x2e75dbff),
.nla_meta = RGBA(0x332642ff), .nla_meta = RGBA(0x332642ff),
@@ -745,7 +743,6 @@ const bTheme U_theme_default = {
.path_keyframe_after = RGBA(0xc4c4ffff), .path_keyframe_after = RGBA(0xc4c4ffff),
.gp_vertex_size = 1, .gp_vertex_size = 1,
.metadatatext = RGBA(0xffffffff), .metadatatext = RGBA(0xffffffff),
.track_selected = RGBA(0xe7f7e74d),
}, },
.space_topbar = { .space_topbar = {
.back = RGBA(0x18181800), .back = RGBA(0x18181800),

View File

@@ -417,10 +417,12 @@
preview_range="#a14d0066" preview_range="#a14d0066"
time_marker="#00000060" time_marker="#00000060"
time_marker_selected="#ffffff60" time_marker_selected="#ffffff60"
channel="#2e639924" channels="#2e639924"
channel_sub="#7aa4cc24" channels_sub="#7aa4cc24"
channel_group="#278c0e37" channel_group="#278c0e37"
channel_group_active="#4eb33555" channel_group_active="#4eb33555"
channel="#999999ff"
channels_selected="#60c04044"
keyframe="#e8e8e8" keyframe="#e8e8e8"
keyframe_selected="#ffbe33" keyframe_selected="#ffbe33"
keyframe_extreme="#e8b3cc" keyframe_extreme="#e8b3cc"
@@ -551,7 +553,6 @@
<ThemeGraphEditor <ThemeGraphEditor
grid="#5e5e5e" grid="#5e5e5e"
time_scrub_background="#808080e6" time_scrub_background="#808080e6"
channels_region="#999999"
vertex="#000000" vertex="#000000"
vertex_select="#ff8500" vertex_select="#ff8500"
vertex_active="#ffffff" vertex_active="#ffffff"
@@ -593,7 +594,6 @@
<nla_editor> <nla_editor>
<ThemeNLAEditor <ThemeNLAEditor
grid="#5e5e5e" grid="#5e5e5e"
nla_track="#424242"
active_action="#cc701a66" active_action="#cc701a66"
active_action_unset="#9987614d" active_action_unset="#9987614d"
strips="#0c0a0a" strips="#0c0a0a"
@@ -628,8 +628,6 @@
<ThemeDopeSheet <ThemeDopeSheet
grid="#4d4d4d" grid="#4d4d4d"
time_scrub_background="#808080e6" time_scrub_background="#808080e6"
channels="#707070ff"
channels_selected="#60c04044"
keyframe_border="#000000ff" keyframe_border="#000000ff"
keyframe_border_selected="#000000ff" keyframe_border_selected="#000000ff"
keyframe_scale_factor="1" keyframe_scale_factor="1"
@@ -933,7 +931,6 @@
time_scrub_background="#292929e6" time_scrub_background="#292929e6"
metadatabg="#000000" metadatabg="#000000"
metadatatext="#ffffff" metadatatext="#ffffff"
track_selected="#e7f7e74d"
> >
<space> <space>
<ThemeSpaceGeneric <ThemeSpaceGeneric

View File

@@ -27,7 +27,7 @@
/* Blender file format version. */ /* Blender file format version. */
#define BLENDER_FILE_VERSION BLENDER_VERSION #define BLENDER_FILE_VERSION BLENDER_VERSION
#define BLENDER_FILE_SUBVERSION 78 #define BLENDER_FILE_SUBVERSION 79
/* Minimum Blender version that supports reading file written with the current /* 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 * version. Older Blender versions will test this and cancel loading the file, showing a warning to

View File

@@ -304,8 +304,6 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
FROM_DEFAULT_V4_UCHAR(common.anim.playhead); FROM_DEFAULT_V4_UCHAR(common.anim.playhead);
FROM_DEFAULT_V4_UCHAR(common.anim.time_marker); FROM_DEFAULT_V4_UCHAR(common.anim.time_marker);
FROM_DEFAULT_V4_UCHAR(common.anim.time_marker_selected); FROM_DEFAULT_V4_UCHAR(common.anim.time_marker_selected);
FROM_DEFAULT_V4_UCHAR(common.anim.channel);
FROM_DEFAULT_V4_UCHAR(common.anim.channel_sub);
FROM_DEFAULT_V4_UCHAR(common.anim.channel_group); FROM_DEFAULT_V4_UCHAR(common.anim.channel_group);
FROM_DEFAULT_V4_UCHAR(common.anim.channel_group_active); FROM_DEFAULT_V4_UCHAR(common.anim.channel_group_active);
} }
@@ -326,10 +324,6 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
btheme->common.curves.handle_vertex_size = U_theme_default.common.curves.handle_vertex_size; btheme->common.curves.handle_vertex_size = U_theme_default.common.curves.handle_vertex_size;
} }
if (!USER_VERSION_ATLEAST(500, 68)) {
FROM_DEFAULT_V4_UCHAR(space_clip.track_selected);
}
if (!USER_VERSION_ATLEAST(500, 69)) { if (!USER_VERSION_ATLEAST(500, 69)) {
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe); FROM_DEFAULT_V4_UCHAR(common.anim.keyframe);
FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_extreme); FROM_DEFAULT_V4_UCHAR(common.anim.keyframe_extreme);
@@ -361,6 +355,13 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
FROM_DEFAULT_V4_UCHAR(regions.sidebars.tab_back); FROM_DEFAULT_V4_UCHAR(regions.sidebars.tab_back);
} }
if (!USER_VERSION_ATLEAST(500, 79)) {
FROM_DEFAULT_V4_UCHAR(common.anim.channels);
FROM_DEFAULT_V4_UCHAR(common.anim.channels_sub);
FROM_DEFAULT_V4_UCHAR(common.anim.channel);
FROM_DEFAULT_V4_UCHAR(common.anim.channel_selected);
}
/** /**
* Always bump subversion in BKE_blender_version.h when adding versioning * Always bump subversion in BKE_blender_version.h when adding versioning
* code here, and wrap it inside a USER_VERSION_ATLEAST check. * code here, and wrap it inside a USER_VERSION_ATLEAST check.

View File

@@ -189,7 +189,7 @@ static void acf_generic_channel_color(bAnimContext *ac, bAnimListElem *ale, floa
/* FIXME: what happens when the indentation is 1 greater than what it should be /* FIXME: what happens when the indentation is 1 greater than what it should be
* (due to grouping)? */ * (due to grouping)? */
const int colorOffset = 10 - 10 * indent; const int colorOffset = 10 - 10 * indent;
UI_GetThemeColorShade3fv(TH_SHADE2, colorOffset, r_color); UI_GetThemeColorShade3fv(TH_CHANNEL, colorOffset, r_color);
} }
/* backdrop for generic channels */ /* backdrop for generic channels */

View File

@@ -157,7 +157,9 @@ enum ThemeColorID {
TH_STRIP, TH_STRIP,
TH_STRIP_SELECT, TH_STRIP_SELECT,
TH_TRACK_SELECT,
TH_CHANNEL,
TH_CHANNEL_SELECT,
TH_LONGKEY, TH_LONGKEY,
TH_LONGKEY_SELECT, TH_LONGKEY_SELECT,

View File

@@ -491,8 +491,11 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_STRIP_SELECT: case TH_STRIP_SELECT:
cp = ts->strip_select; cp = ts->strip_select;
break; break;
case TH_TRACK_SELECT: case TH_CHANNEL:
cp = ts->track_selected; cp = btheme->common.anim.channel;
break;
case TH_CHANNEL_SELECT:
cp = btheme->common.anim.channel_selected;
break; break;
case TH_KEYTYPE_KEYFRAME: case TH_KEYTYPE_KEYFRAME:
cp = btheme->common.anim.keyframe; cp = btheme->common.anim.keyframe;
@@ -793,10 +796,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
break; break;
case TH_DOPESHEET_CHANNELOB: case TH_DOPESHEET_CHANNELOB:
cp = btheme->common.anim.channel; cp = btheme->common.anim.channels;
break; break;
case TH_DOPESHEET_CHANNELSUBOB: case TH_DOPESHEET_CHANNELSUBOB:
cp = btheme->common.anim.channel_sub; cp = btheme->common.anim.channels_sub;
break; break;
case TH_DOPESHEET_IPOLINE: case TH_DOPESHEET_IPOLINE:
cp = ts->ds_ipoline; cp = ts->ds_ipoline;
@@ -937,7 +940,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
break; break;
case TH_NLA_TRACK: case TH_NLA_TRACK:
cp = ts->nla_track; cp = btheme->common.anim.channel;
break; break;
case TH_NLA_TRANSITION: case TH_NLA_TRANSITION:
cp = ts->nla_transition; cp = ts->nla_transition;

View File

@@ -177,8 +177,8 @@ static void draw_backdrops(bAnimContext *ac, ListBase &anim_data, View2D *v2d, u
uchar col_summary[4]; uchar col_summary[4];
/* get theme colors */ /* get theme colors */
UI_GetThemeColor4ubv(TH_SHADE2, col2); UI_GetThemeColor4ubv(TH_CHANNEL, col2);
UI_GetThemeColor4ubv(TH_HILITE, col1); UI_GetThemeColor4ubv(TH_CHANNEL_SELECT, col1);
UI_GetThemeColor4ubv(TH_ANIM_ACTIVE, col_summary); UI_GetThemeColor4ubv(TH_ANIM_ACTIVE, col_summary);
UI_GetThemeColor4ubv(TH_GROUP, col2a); UI_GetThemeColor4ubv(TH_GROUP, col2a);

View File

@@ -47,10 +47,10 @@ static void track_channel_color(MovieTrackingTrack *track, bool default_color, f
} }
else { else {
if (default_color) { if (default_color) {
UI_GetThemeColor4fv(TH_TRACK_SELECT, color); UI_GetThemeColor4fv(TH_CHANNEL_SELECT, color);
} }
else { else {
UI_GetThemeColor3fv(TH_HEADER, color); UI_GetThemeColor3fv(TH_CHANNEL, color);
} }
} }
} }

View File

@@ -135,8 +135,9 @@ typedef struct ThemeCommonAnim {
unsigned char time_marker[4], time_marker_selected[4]; unsigned char time_marker[4], time_marker_selected[4];
unsigned char channel[4], channel_sub[4]; unsigned char channels[4], channels_sub[4];
unsigned char channel_group[4], channel_group_active[4]; unsigned char channel_group[4], channel_group_active[4];
unsigned char channel[4], channel_selected[4];
/** Key-types. */ /** Key-types. */
unsigned char keyframe[4], keyframe_extreme[4], keyframe_breakdown[4], keyframe_jitter[4], unsigned char keyframe[4], keyframe_extreme[4], keyframe_breakdown[4], keyframe_jitter[4],
@@ -433,8 +434,6 @@ typedef struct ThemeSpace {
/** NLA - warning color for duplicate instances of tweaking strip. */ /** NLA - warning color for duplicate instances of tweaking strip. */
unsigned char nla_tweakdupli[4]; unsigned char nla_tweakdupli[4];
/** NLA "Track" */
unsigned char nla_track[4];
/** NLA "Transition" strips. */ /** NLA "Transition" strips. */
unsigned char nla_transition[4], nla_transition_sel[4]; unsigned char nla_transition[4], nla_transition_sel[4];
/** NLA "Meta" strips. */ /** NLA "Meta" strips. */
@@ -456,10 +455,6 @@ typedef struct ThemeSpace {
unsigned char metadatabg[4]; unsigned char metadatabg[4];
unsigned char metadatatext[4]; unsigned char metadatatext[4];
/** For Movie Clip Editor. */
unsigned char track_selected[4];
} ThemeSpace; } ThemeSpace;
/* Viewport Background Gradient Types. */ /* Viewport Background Gradient Types. */

View File

@@ -2278,16 +2278,14 @@ static void rna_def_userdef_theme_common_anim(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
/* Channel properties */ /* Channel properties */
prop = RNA_def_property(srna, "channel", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "channels", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "channel");
RNA_def_property_array(prop, 4); RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Channel", ""); RNA_def_property_ui_text(prop, "Channels", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channel_sub", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "channels_sub", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "channel_sub");
RNA_def_property_array(prop, 4); RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Sub-channel", ""); RNA_def_property_ui_text(prop, "Sub-channels", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channel_group", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "channel_group", PROP_FLOAT, PROP_COLOR_GAMMA);
@@ -2302,6 +2300,16 @@ static void rna_def_userdef_theme_common_anim(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active Channel Group", ""); RNA_def_property_ui_text(prop, "Active Channel Group", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channel", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Channel", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channel_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Selected Channel", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
/* Keyframe properties */ /* Keyframe properties */
prop = RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3); RNA_def_property_array(prop, 3);
@@ -3039,12 +3047,6 @@ static void rna_def_userdef_theme_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scrubbing/Markers Region", ""); RNA_def_property_ui_text(prop, "Scrubbing/Markers Region", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channels_region", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Channels Region", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
rna_def_userdef_theme_spaces_vertex(srna, true, false); rna_def_userdef_theme_spaces_vertex(srna, true, false);
} }
@@ -3836,18 +3838,6 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scrubbing/Markers Region", ""); RNA_def_property_ui_text(prop, "Scrubbing/Markers Region", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channels", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "shade2");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Channels", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "channels_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "hilite");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Channels Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "keyframe_border", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "keyframe_border", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "keyborder"); RNA_def_property_float_sdna(prop, nullptr, "keyborder");
RNA_def_property_array(prop, 4); RNA_def_property_array(prop, 4);
@@ -3906,13 +3896,6 @@ static void rna_def_userdef_theme_space_nla(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Grid", ""); RNA_def_property_ui_text(prop, "Grid", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "nla_track", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "nla_track");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Track", "Nonlinear Animation Track");
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ACTION);
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "active_action", PROP_FLOAT, PROP_COLOR_GAMMA); prop = RNA_def_property(srna, "active_action", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "anim_active"); RNA_def_property_float_sdna(prop, nullptr, "anim_active");
RNA_def_property_array(prop, 4); RNA_def_property_array(prop, 4);
@@ -4173,12 +4156,6 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna)
RNA_def_property_array(prop, 3); RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Metadata Text", ""); RNA_def_property_ui_text(prop, "Metadata Text", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update"); RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "track_selected", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_float_sdna(prop, nullptr, "track_selected");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Selected Tracks", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
} }
static void rna_def_userdef_theme_space_topbar(BlenderRNA *brna) static void rna_def_userdef_theme_space_topbar(BlenderRNA *brna)