UI: Improve Mesh Edge Highlighting #111431

Manually merged
Campbell Barton merged 12 commits from Gilberto.R/blender:temp-edgehighlight into main 2023-11-02 12:10:12 +01:00
21 changed files with 98 additions and 68 deletions

View File

@ -317,14 +317,16 @@ const bTheme U_theme_default = {
.vertex_select = RGBA(0xff7a00ff),
.vertex_bevel = RGBA(0x00a5ffff),
.edge = RGBA(0x000000ff),
.edge_select = RGBA(0xffa000ff),
.edge_select = RGBA(0xff9900ff),
Gilberto.R marked this conversation as resolved Outdated

Please don't rename these struct members, there doesn't seem any benefit in doing this and adds noise to the diff.

Please don't rename these struct members, there doesn't seem any benefit in doing this and adds noise to the diff.

Other renames remaining, TH_FACE_SELECTION... colorEdgeSelect

Other renames remaining, `TH_FACE_SELECTION`... colorEdgeSelect
.edge_mode_select = RGBA(0xffd800ff),
.edge_seam = RGBA(0xdb2512ff),
.edge_sharp = RGBA(0x00ffffff),
.edge_facesel = RGBA(0x4b4b4bff),
.edge_crease = RGBA(0xcc0099ff),
.edge_bevel = RGBA(0x00a5ffff),
.face = RGBA(0xffffff02),
.face_select = RGBA(0xffa5522e),
.face_select = RGBA(0xffa30033),
.face_mode_select = RGBA(0xffb70033),
Gilberto.R marked this conversation as resolved Outdated

Please use term select, matching other names, e.g. ( face_mode_select), same with other uses in this patch.

Please use term `select`, matching other names, e.g. ( `face_mode_select`), same with other uses in this patch.
.face_retopology = RGBA(0x50c8ff0f),
.face_back = RGBA(0xff0000b3),
.face_front = RGBA(0x0000ffb3),

View File

@ -368,12 +368,13 @@
light="#00000028"
speaker="#000000"
vertex="#000000"
vertex_select="#ff8500"
vertex_select="#ff7a00"
vertex_active="#000000"
vertex_size="3"
vertex_bevel="#00a5ff"
vertex_unreferenced="#000000"
edge_select="#ffa000"
edge_select="#ff9900"
edge_mode_select="#ffd800"
edge_seam="#db2512"
edge_sharp="#00ffff"
edge_crease="#cc0099"
@ -381,7 +382,8 @@
edge_facesel="#4b4b4b"
freestyle_edge_mark="#7fff7f"
face="#00000012"
face_select="#ff85004d"
face_select="#ffa30033"
face_mode_select="#ffb70033"
face_dot="#ff8500"
facedot_size="4"
freestyle_face_mark="#7fff7f33"

View File

@ -7055,9 +7055,6 @@ class VIEW3D_PT_overlay_edit_mesh(Panel):
split = col.split()
sub = split.column()
sub.active = is_any_solid_shading
sub.prop(overlay, "show_edges", text="Edges")
sub = split.column()
sub.prop(overlay, "show_faces", text="Faces")
sub = split.column()

View File

@ -29,7 +29,7 @@ extern "C" {
/* Blender file format version. */
#define BLENDER_FILE_VERSION BLENDER_VERSION
#define BLENDER_FILE_SUBVERSION 3
#define BLENDER_FILE_SUBVERSION 4
/* 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

@ -4148,8 +4148,8 @@ void blo_do_versions_280(FileData *fd, Library * /*lib*/, Main *bmain)
View3D *v3d = (View3D *)sl;
v3d->overlay.edit_flag |= V3D_OVERLAY_EDIT_FACES | V3D_OVERLAY_EDIT_SEAMS |
V3D_OVERLAY_EDIT_SHARP | V3D_OVERLAY_EDIT_FREESTYLE_EDGE |
V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_EDGES |
V3D_OVERLAY_EDIT_CREASES | V3D_OVERLAY_EDIT_BWEIGHTS;
V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_CREASES |
V3D_OVERLAY_EDIT_BWEIGHTS;
}
}
}

View File

@ -188,8 +188,8 @@ static void blo_update_defaults_screen(bScreen *screen,
v3d->overlay.texture_paint_mode_opacity = 1.0f;
v3d->overlay.weight_paint_mode_opacity = 1.0f;
v3d->overlay.vertex_paint_mode_opacity = 1.0f;
/* Use dimmed selected edges. */
v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_EDGES;
/* Clear this deprecated bit for later reuse. */
v3d->overlay.edit_flag &= ~V3D_OVERLAY_EDIT_EDGES_DEPRECATED;
/* grease pencil settings */
v3d->vertex_opacity = 1.0f;
v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES;

View File

@ -133,6 +133,13 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
memcpy(btheme, &U_theme_default, sizeof(*btheme));
}
if (!USER_VERSION_ATLEAST(401, 4)) {
FROM_DEFAULT_V4_UCHAR(space_view3d.edge_select);
FROM_DEFAULT_V4_UCHAR(space_view3d.edge_mode_select);
FROM_DEFAULT_V4_UCHAR(space_view3d.face_select);
FROM_DEFAULT_V4_UCHAR(space_view3d.face_mode_select);
}
/**
* Versioning code until next subversion bump goes here.
*

View File

@ -53,6 +53,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
const DRWContextState *draw_ctx = DRW_context_state_get();
View3DShading *shading = &draw_ctx->v3d->shading;
ToolSettings *tsettings = draw_ctx->scene->toolsettings;
View3D *v3d = draw_ctx->v3d;
bool select_vert = pd->edit_mesh.select_vert = (tsettings->selectmode & SCE_SELECT_VERTEX) != 0;
@ -66,7 +67,6 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
float retopology_offset = RETOPOLOGY_OFFSET(v3d);
pd->edit_mesh.do_faces = true;
pd->edit_mesh.do_edges = true;
int *mask = shdata->data_mask;
mask[0] = 0xFF; /* Face Flag */
@ -85,16 +85,8 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
if ((flag & V3D_OVERLAY_EDIT_FACES) == 0) {
pd->edit_mesh.do_faces = false;
}
if ((flag & V3D_OVERLAY_EDIT_EDGES) == 0) {
if ((tsettings->selectmode & SCE_SELECT_EDGE) == 0) {
if ((v3d->shading.type < OB_SOLID) || (v3d->shading.flag & V3D_SHADING_XRAY)) {
/* Special case, when drawing wire, draw edges, see: #67637. */
}
else {
pd->edit_mesh.do_edges = false;
}
}
}
bool is_wire_shmode = (shading->type == OB_WIRE);
float backwire_opacity = (pd->edit_mesh.do_zbufclip) ? v3d->overlay.backwire_opacity : 1.0f;
float face_alpha = (!pd->edit_mesh.do_faces) ? 0.0f : 1.0f;
@ -172,7 +164,8 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_ivec4(grp, "dataMask", mask, 1);
DRW_shgroup_uniform_float_copy(grp, "alpha", face_alpha);
DRW_shgroup_uniform_bool_copy(grp, "selectFaces", select_face);
DRW_shgroup_uniform_bool_copy(grp, "selectFace", select_face);
DRW_shgroup_uniform_bool_copy(grp, "wireShading", is_wire_shmode);
DRW_shgroup_uniform_float_copy(grp, "retopologyOffset", retopology_offset);
}
@ -191,7 +184,7 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
DRW_shgroup_uniform_ivec4(grp, "dataMask", mask, 1);
DRW_shgroup_uniform_float_copy(grp, "alpha", backwire_opacity);
DRW_shgroup_uniform_texture_ref(grp, "depthTex", depth_tex);
DRW_shgroup_uniform_bool_copy(grp, "selectEdges", pd->edit_mesh.do_edges || select_edge);
DRW_shgroup_uniform_bool_copy(grp, "selectEdge", select_edge);
Gilberto.R marked this conversation as resolved
Review

Is this rename intentional?

Is this rename intentional?

yes, I renamed 'selectEdges' to 'selectEdge', to match 'select_edge' there on the same line, and renamed 'selectFaces' to 'selectFace' to match 'select_face'.

yes, I renamed 'selectEdges' to 'selectEdge', to match 'select_edge' there on the same line, and renamed 'selectFaces' to 'selectFace' to match 'select_face'.
DRW_shgroup_uniform_bool_copy(grp, "do_smooth_wire", do_smooth_wire);
DRW_shgroup_uniform_float_copy(grp, "retopologyOffset", retopology_offset);

View File

@ -367,7 +367,6 @@ struct OVERLAY_PrivateData {
struct {
bool do_zbufclip;
bool do_faces;
bool do_edges;
bool select_vert;
bool select_face;
bool select_edge;

View File

@ -108,7 +108,8 @@ struct ThemeColorData {
float4 color_vertex_unreferenced;
float4 color_vertex_missing_data;
float4 color_edit_mesh_active;
float4 color_edge_select;
float4 color_edge_select; /* Stands for edge selection, not edge select mode. */
float4 color_edge_mode_select; /* Stands for edge mode selection. */
float4 color_edge_seam;
float4 color_edge_sharp;
float4 color_edge_crease;
@ -116,7 +117,8 @@ struct ThemeColorData {
float4 color_edge_face_select;
float4 color_edge_freestyle;
float4 color_face;
float4 color_face_select;
float4 color_face_select; /* Stands for face selection, not face select mode. */
float4 color_face_mode_select; /* Stands for face mode selection. */
float4 color_face_freestyle;
float4 color_gpencil_vertex;
float4 color_gpencil_vertex_select;

View File

@ -17,8 +17,9 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_common)
.define("blender_srgb_to_framebuffer_space(a)", "a")
.sampler(0, ImageType::DEPTH_2D, "depthTex")
.fragment_out(0, Type::VEC4, "fragColor")
.push_constant(Type::BOOL, "selectFaces")
.push_constant(Type::BOOL, "selectEdges")
.push_constant(Type::BOOL, "wireShading")
.push_constant(Type::BOOL, "selectFace")
.push_constant(Type::BOOL, "selectEdge")
.push_constant(Type::FLOAT, "alpha")
.push_constant(Type::FLOAT, "retopologyOffset")
.push_constant(Type::IVEC4, "dataMask")
@ -31,8 +32,9 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_common_no_geom)
.define("blender_srgb_to_framebuffer_space(a)", "a")
.sampler(0, ImageType::DEPTH_2D, "depthTex")
.fragment_out(0, Type::VEC4, "fragColor")
.push_constant(Type::BOOL, "selectFaces")
.push_constant(Type::BOOL, "selectEdges")
.push_constant(Type::BOOL, "wireShading")
.push_constant(Type::BOOL, "selectFace")
.push_constant(Type::BOOL, "selectEdge")
.push_constant(Type::FLOAT, "alpha")
.push_constant(Type::FLOAT, "retopologyOffset")
.push_constant(Type::IVEC4, "dataMask")

View File

@ -16,23 +16,20 @@ vec4 EDIT_MESH_edge_color_outer(uint edge_flag, uint face_flag, float crease, fl
vec4 EDIT_MESH_edge_color_inner(uint edge_flag)
{
vec4 color = colorWireEdit;
vec4 color_select = (selectEdges) ? colorEdgeSelect : mix(colorEdgeSelect, colorWireEdit, .45);
color = ((edge_flag & EDGE_SELECTED) != 0u) ? color_select : color;
vec4 selected_edge_col = (selectEdge) ? colorEdgeModeSelect : colorEdgeSelect;
color = ((edge_flag & EDGE_SELECTED) != 0u) ? selected_edge_col : color;
color = ((edge_flag & EDGE_ACTIVE) != 0u) ? colorEditMeshActive : color;
color.a = (selectEdges || (edge_flag & (EDGE_SELECTED | EDGE_ACTIVE)) != 0u) ? 1.0 : 0.7;
color.a = 1.0;
return color;
}
vec4 EDIT_MESH_edge_vertex_color(uint vertex_flag)
{
vec4 color = colorWireEdit;
vec4 color_select = (selectEdges) ? colorEdgeSelect : mix(colorEdgeSelect, colorWireEdit, .45);
/* Edge color in vextex selection mode. */
vec4 selected_edge_col = (selectEdge) ? colorEdgeModeSelect : colorEdgeSelect;
bool edge_selected = (vertex_flag & (VERT_ACTIVE | VERT_SELECTED)) != 0u;
color = (edge_selected) ? color_select : color;
color.a = (selectEdges || edge_selected) ? 1.0 : 0.7;
vec4 color = (edge_selected) ? selected_edge_col : colorWireEdit;
color.a = 1.0;
return color;
}
@ -55,15 +52,26 @@ vec4 EDIT_MESH_vertex_color(uint vertex_flag, float vertex_crease)
vec4 EDIT_MESH_face_color(uint face_flag)
{
bool face_freestyle = (face_flag & FACE_FREESTYLE) != 0u;
bool face_selected = (face_flag & FACE_SELECTED) != 0u;
bool face_active = (face_flag & FACE_ACTIVE) != 0u;
vec4 selected_face_col = (selectFace) ? colorFaceModeSelect : colorFaceSelect;
vec4 color = colorFace;
vec4 color_active = mix(colorFaceSelect, colorEditMeshActive, 0.5);
color = (retopologyOffset > 0.0) ? colorFaceRetopology : color;
color = ((face_flag & FACE_FREESTYLE) != 0u) ? colorFaceFreestyle : color;
color = ((face_flag & FACE_SELECTED) != 0u) ? colorFaceSelect : color;
color = ((face_flag & FACE_ACTIVE) != 0u) ? color_active : color;
color.a *= ((face_flag & (FACE_FREESTYLE | FACE_SELECTED | FACE_ACTIVE)) == 0u || selectFaces) ?
1.0 :
0.5;
color = (face_freestyle) ? colorFaceFreestyle : color;
color = (face_selected) ? selected_face_col : color;
if (selectFace && face_active) {
color = mix(selected_face_col, colorEditMeshActive, 0.5);
color.a = selected_face_col.a;
}
if (wireShading) {
/* Lower face selection opacity for better wireframe visibility. */
color.a = (face_selected) ? color.a * 0.6 : color.a;
}
else {
/* Don't always fill 'colorFace'. */
color.a = (selectFace || face_selected || face_active || face_freestyle) ? color.a : 0.0;
}
return color;
}

View File

@ -61,6 +61,7 @@ void DRW_globals_update()
UI_COLOR_RGBA_FROM_U8(0xB0, 0x00, 0xB0, 0xFF, gb->color_vertex_missing_data);
UI_GetThemeColor4fv(TH_EDITMESH_ACTIVE, gb->color_edit_mesh_active);
UI_GetThemeColor4fv(TH_EDGE_SELECT, gb->color_edge_select);
UI_GetThemeColor4fv(TH_EDGE_MODE_SELECT, gb->color_edge_mode_select);
UI_GetThemeColor4fv(TH_GP_VERTEX, gb->color_gpencil_vertex);
UI_GetThemeColor4fv(TH_GP_VERTEX_SELECT, gb->color_gpencil_vertex_select);
@ -71,6 +72,7 @@ void DRW_globals_update()
UI_GetThemeColor4fv(TH_EDGE_FACESEL, gb->color_edge_face_select);
UI_GetThemeColor4fv(TH_FACE, gb->color_face);
UI_GetThemeColor4fv(TH_FACE_SELECT, gb->color_face_select);
UI_GetThemeColor4fv(TH_FACE_MODE_SELECT, gb->color_face_mode_select);
UI_GetThemeColor4fv(TH_FACE_RETOPOLOGY, gb->color_face_retopology);
UI_GetThemeColor4fv(TH_FACE_BACK, gb->color_face_back);
UI_GetThemeColor4fv(TH_FACE_FRONT, gb->color_face_front);

View File

@ -40,7 +40,8 @@ struct GlobalsUboStorage {
float4 color_vertex_unreferenced;
float4 color_vertex_missing_data;
float4 color_edit_mesh_active;
float4 color_edge_select;
float4 color_edge_select; /* Stands for edge selection, not edge select mode. */
float4 color_edge_mode_select; /* Stands for edge mode selection. */
float4 color_edge_seam;
float4 color_edge_sharp;
float4 color_edge_crease;
@ -48,7 +49,8 @@ struct GlobalsUboStorage {
float4 color_edge_face_select;
float4 color_edge_freestyle;
float4 color_face;
float4 color_face_select;
float4 color_face_select; /* Stands for face selection, not face select mode. */
float4 color_face_mode_select; /* Stands for face mode selection. */
float4 color_face_retopology;
float4 color_face_freestyle;
float4 color_gpencil_vertex;
@ -160,6 +162,7 @@ BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16)
# define colorVertexMissingData globalsBlock.color_vertex_missing_data
# define colorEditMeshActive globalsBlock.color_edit_mesh_active
# define colorEdgeSelect globalsBlock.color_edge_select
# define colorEdgeModeSelect globalsBlock.color_edge_mode_select
# define colorEdgeSeam globalsBlock.color_edge_seam
# define colorEdgeSharp globalsBlock.color_edge_sharp
# define colorEdgeCrease globalsBlock.color_edge_crease
@ -168,6 +171,7 @@ BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16)
# define colorEdgeFreestyle globalsBlock.color_edge_freestyle
# define colorFace globalsBlock.color_face
# define colorFaceSelect globalsBlock.color_face_select
# define colorFaceModeSelect globalsBlock.color_face_mode_select
# define colorFaceRetopology globalsBlock.color_face_retopology
# define colorFaceFreestyle globalsBlock.color_face_freestyle
# define colorGpencilVertex globalsBlock.color_gpencil_vertex

View File

@ -92,11 +92,13 @@ enum ThemeColorID {
TH_OUTLINE_WIDTH,
TH_OBCENTER_DIA,
TH_EDGE,
TH_EDGE_SELECT,
TH_EDGE_SELECT, /* Stands for edge selection, not edge select mode. */
TH_EDGE_MODE_SELECT,
TH_EDGE_SEAM,
TH_EDGE_FACESEL,
TH_FACE,
TH_FACE_SELECT,
TH_FACE_SELECT, /* Stands for face selection, not face select mode. */
TH_FACE_MODE_SELECT,
TH_FACE_RETOPOLOGY,
TH_FACE_BACK,
TH_FACE_FRONT,

View File

@ -391,6 +391,9 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_EDGE_SELECT:
cp = ts->edge_select;
break;
case TH_EDGE_MODE_SELECT:
cp = ts->edge_mode_select;
break;
case TH_EDGE_SEAM:
cp = ts->edge_seam;
break;
@ -415,6 +418,9 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_FACE_SELECT:
cp = ts->face_select;
break;
case TH_FACE_MODE_SELECT:
cp = ts->face_mode_select;
break;
case TH_FACE_RETOPOLOGY:
cp = ts->face_retopology;
break;

View File

@ -287,10 +287,10 @@ typedef struct ThemeSpace {
unsigned char active[4], group[4], group_active[4], transform[4];
unsigned char vertex[4], vertex_select[4], vertex_active[4], vertex_bevel[4],
vertex_unreferenced[4];
Gilberto.R marked this conversation as resolved Outdated

Renaming looses the theme color from existing preferences, prefer keeping edge_select, edge_mode_select... etc.

Renaming looses the theme color from existing preferences, prefer keeping `edge_select`, `edge_mode_select`... etc.
unsigned char edge[4], edge_select[4];
unsigned char edge[4], edge_select[4], edge_mode_select[4];
unsigned char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4], edge_bevel[4];
/** Solid faces. */
unsigned char face[4], face_select[4], face_retopology[4], face_back[4], face_front[4];
unsigned char face[4], face_select[4], face_mode_select[4], face_retopology[4], face_back[4], face_front[4];
/** Selected color. */
unsigned char face_dot[4];
unsigned char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4];
@ -350,7 +350,6 @@ typedef struct ThemeSpace {
unsigned char node_zone_simulation[4];
unsigned char node_zone_repeat[4];
unsigned char _pad9[4];
unsigned char simulated_frames[4];
/** For sequence editor. */
@ -378,7 +377,7 @@ typedef struct ThemeSpace {
unsigned char path_keyframe_before[4], path_keyframe_after[4];
unsigned char camera_path[4];
unsigned char camera_passepartout[4];
unsigned char _pad1[6];
unsigned char _pad1[2];
unsigned char gp_vertex_size;
unsigned char gp_vertex[4], gp_vertex_select[4];

View File

@ -56,8 +56,8 @@
\
.edit_flag = V3D_OVERLAY_EDIT_FACES | V3D_OVERLAY_EDIT_SEAMS | \
V3D_OVERLAY_EDIT_SHARP | V3D_OVERLAY_EDIT_FREESTYLE_EDGE | \
V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_EDGES | \
V3D_OVERLAY_EDIT_CREASES | V3D_OVERLAY_EDIT_BWEIGHTS, \
V3D_OVERLAY_EDIT_FREESTYLE_FACE | V3D_OVERLAY_EDIT_CREASES | \
V3D_OVERLAY_EDIT_BWEIGHTS, \
.handle_display = CURVE_HANDLE_SELECTED, \
\
.gpencil_paper_opacity = 0.5f, \

View File

@ -587,7 +587,7 @@ enum {
V3D_OVERLAY_EDIT_WEIGHT = (1 << 4),
V3D_OVERLAY_EDIT_EDGES = (1 << 5),
V3D_OVERLAY_EDIT_EDGES_DEPRECATED = (1 << 5),
V3D_OVERLAY_EDIT_FACES = (1 << 6),
V3D_OVERLAY_EDIT_FACE_DOT = (1 << 7),

View File

@ -4610,11 +4610,6 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
prop, "Display Split Normals", "Display vertex-per-face normals as lines");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, nullptr);
prop = RNA_def_property(srna, "show_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "overlay.edit_flag", V3D_OVERLAY_EDIT_EDGES);
RNA_def_property_ui_text(prop, "Display Edges", "Highlight selected edges");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, nullptr);
prop = RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, nullptr, "overlay.edit_flag", V3D_OVERLAY_EDIT_FACES);
RNA_def_property_ui_text(prop, "Display Faces", "Highlight selected faces");

View File

@ -2132,7 +2132,12 @@ static void rna_def_userdef_theme_spaces_edge(StructRNA *srna)
prop = RNA_def_property(srna, "edge_select", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Edge Select", "");
RNA_def_property_ui_text(prop, "Edge Selection", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "edge_mode_select", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Edge Mode Selection", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "edge_seam", PROP_FLOAT, PROP_COLOR_GAMMA);
@ -2178,7 +2183,12 @@ static void rna_def_userdef_theme_spaces_face(StructRNA *srna)
prop = RNA_def_property(srna, "face_select", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Face Selected", "");
RNA_def_property_ui_text(prop, "Face Selection", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "face_mode_select", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Face Mode Selection", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
prop = RNA_def_property(srna, "face_dot", PROP_FLOAT, PROP_COLOR_GAMMA);