Axis Colours are now Themeable
This commit allows you to set the RGB <-> XYZ axis colours used for things like the mini axis indicator, grid axis indicators, manipulators, transform constraint indicators, F-Curves (when using XYZ to RGB colouring option), and perhaps something else I've missed. Previously, these places all used hardcoded defines (220 * i/j/k), but the readability of these colours was often quite poor, especially when used with certain themes. The settings for these colours can be found under the "User Interface" section of the themes (i.e. same set of colours is used across editors). I could have made these per editor, but since it's unlikely that these will need to be too different across editors in practice (+ being easier to version patch), they are stored under the UI section.
This commit is contained in:
@@ -728,6 +728,29 @@ class USERPREF_PT_theme(Panel):
|
||||
colsub = padding.column()
|
||||
colsub.row().prop(ui, "header")
|
||||
|
||||
col.separator()
|
||||
col.separator()
|
||||
|
||||
ui = theme.user_interface
|
||||
col.label("Axis Colors:")
|
||||
|
||||
row = col.row()
|
||||
|
||||
subsplit = row.split(percentage=0.95)
|
||||
|
||||
padding = subsplit.split(percentage=0.15)
|
||||
colsub = padding.column()
|
||||
colsub = padding.column()
|
||||
colsub.row().prop(ui, "axis_x")
|
||||
colsub.row().prop(ui, "axis_y")
|
||||
colsub.row().prop(ui, "axis_z")
|
||||
|
||||
subsplit = row.split(percentage=0.85)
|
||||
|
||||
padding = subsplit.split(percentage=0.15)
|
||||
colsub = padding.column()
|
||||
colsub = padding.column()
|
||||
|
||||
layout.separator()
|
||||
layout.separator()
|
||||
elif theme.theme_area == 'BONE_COLOR_SETS':
|
||||
|
||||
@@ -42,7 +42,7 @@ extern "C" {
|
||||
* and keep comment above the defines.
|
||||
* Use STRINGIFY() rather than defining with quotes */
|
||||
#define BLENDER_VERSION 264
|
||||
#define BLENDER_SUBVERSION 8
|
||||
#define BLENDER_SUBVERSION 9
|
||||
|
||||
/* 262 was the last editmesh release but it has compatibility code for bmesh data */
|
||||
#define BLENDER_MINVERSION 262
|
||||
|
||||
@@ -381,7 +381,7 @@ float ANIM_unit_mapping_get_factor(Scene *scene, ID *id, FCurve *fcu, short rest
|
||||
return RAD2DEGF(1.0f); /* radians to degrees */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* TODO: other rotation types here as necessary */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,7 +215,11 @@ enum {
|
||||
TH_NLA_META,
|
||||
TH_NLA_META_SEL,
|
||||
TH_NLA_SOUND,
|
||||
TH_NLA_SOUND_SEL
|
||||
TH_NLA_SOUND_SEL,
|
||||
|
||||
TH_AXIS_X, /* X/Y/Z Axis */
|
||||
TH_AXIS_Y,
|
||||
TH_AXIS_Z
|
||||
};
|
||||
/* XXX WARNING: previous is saved in file, so do not change order! */
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
|
||||
cp = ts->shade2; break;
|
||||
case TH_HILITE:
|
||||
cp = ts->hilite; break;
|
||||
|
||||
|
||||
case TH_GRID:
|
||||
cp = ts->grid; break;
|
||||
case TH_WIRE:
|
||||
@@ -510,6 +510,13 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
|
||||
case TH_NLA_SOUND_SEL:
|
||||
cp = ts->nla_sound_sel;
|
||||
break;
|
||||
|
||||
case TH_AXIS_X:
|
||||
cp = btheme->tui.xaxis; break;
|
||||
case TH_AXIS_Y:
|
||||
cp = btheme->tui.yaxis; break;
|
||||
case TH_AXIS_Z:
|
||||
cp = btheme->tui.zaxis; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -655,9 +662,14 @@ void ui_theme_init_default(void)
|
||||
|
||||
/* UI buttons */
|
||||
ui_widget_color_init(&btheme->tui);
|
||||
|
||||
btheme->tui.iconfile[0] = 0;
|
||||
btheme->tui.panel.show_header = FALSE;
|
||||
rgba_char_args_set(btheme->tui.panel.header, 0, 0, 0, 25);
|
||||
|
||||
rgba_char_args_set(btheme->tui.xaxis, 220, 0, 0, 255);
|
||||
rgba_char_args_set(btheme->tui.yaxis, 0, 220, 0, 255);
|
||||
rgba_char_args_set(btheme->tui.zaxis, 0, 0, 220, 255);
|
||||
|
||||
/* Bone Color Sets */
|
||||
ui_theme_init_boneColorSets(btheme);
|
||||
@@ -1072,7 +1084,6 @@ float UI_GetThemeValuef(int colorid)
|
||||
|
||||
cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
|
||||
return ((float)cp[0]);
|
||||
|
||||
}
|
||||
|
||||
/* get individual values, not scaled */
|
||||
@@ -1082,7 +1093,6 @@ int UI_GetThemeValue(int colorid)
|
||||
|
||||
cp = UI_ThemeGetColorPtr(theme_active, theme_spacetype, colorid);
|
||||
return ((int) cp[0]);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1244,21 +1254,20 @@ void UI_ThemeClearColor(int colorid)
|
||||
|
||||
void UI_make_axis_color(const unsigned char src_col[3], unsigned char dst_col[3], const char axis)
|
||||
{
|
||||
unsigned char col[3];
|
||||
|
||||
switch (axis) {
|
||||
case 'X':
|
||||
dst_col[0] = src_col[0] > 219 ? 255 : src_col[0] + 36;
|
||||
dst_col[1] = src_col[1] < 26 ? 0 : src_col[1] - 26;
|
||||
dst_col[2] = src_col[2] < 26 ? 0 : src_col[2] - 26;
|
||||
UI_GetThemeColor3ubv(TH_AXIS_X, col);
|
||||
UI_GetColorPtrBlendShade3ubv(src_col, col, dst_col, 0.5f, -10);
|
||||
break;
|
||||
case 'Y':
|
||||
dst_col[0] = src_col[0] < 46 ? 0 : src_col[0] - 36;
|
||||
dst_col[1] = src_col[1] > 189 ? 255 : src_col[1] + 66;
|
||||
dst_col[2] = src_col[2] < 46 ? 0 : src_col[2] - 36;
|
||||
UI_GetThemeColor3ubv(TH_AXIS_Y, col);
|
||||
UI_GetColorPtrBlendShade3ubv(src_col, col, dst_col, 0.5f, -10);
|
||||
break;
|
||||
case 'Z':
|
||||
dst_col[0] = src_col[0] < 26 ? 0 : src_col[0] - 26;
|
||||
dst_col[1] = src_col[1] < 26 ? 0 : src_col[1] - 26;
|
||||
dst_col[2] = src_col[2] > 209 ? 255 : src_col[2] + 46;
|
||||
UI_GetThemeColor3ubv(TH_AXIS_Z, col);
|
||||
UI_GetColorPtrBlendShade3ubv(src_col, col, dst_col, 0.5f, -10);
|
||||
break;
|
||||
default:
|
||||
BLI_assert(!"invalid axis arg");
|
||||
@@ -1946,6 +1955,16 @@ void init_userdef_do_versions(void)
|
||||
rgba_char_args_set(btheme->tv3d.skin_root, 180, 77, 77, 255);
|
||||
}
|
||||
}
|
||||
|
||||
if (bmain->versionfile < 264 || (bmain->versionfile == 264 && bmain->subversionfile < 9)) {
|
||||
bTheme *btheme;
|
||||
|
||||
for (btheme = U.themes.first; btheme; btheme = btheme->next) {
|
||||
rgba_char_args_set(btheme->tui.xaxis, 220, 0, 0, 255);
|
||||
rgba_char_args_set(btheme->tui.yaxis, 0, 220, 0, 255);
|
||||
rgba_char_args_set(btheme->tui.zaxis, 0, 0, 220, 255);
|
||||
}
|
||||
}
|
||||
|
||||
/* GL Texture Garbage Collection (variable abused above!) */
|
||||
if (U.textimeout == 0) {
|
||||
|
||||
@@ -563,13 +563,13 @@ static void graph_refresh(const bContext *C, ScrArea *sa)
|
||||
|
||||
switch (fcu->array_index) {
|
||||
case 0:
|
||||
col[0] = 1.0f; col[1] = 0.0f; col[2] = 0.0f;
|
||||
UI_GetThemeColor3fv(TH_AXIS_X, col);
|
||||
break;
|
||||
case 1:
|
||||
col[0] = 0.0f; col[1] = 1.0f; col[2] = 0.0f;
|
||||
UI_GetThemeColor3fv(TH_AXIS_Y, col);
|
||||
break;
|
||||
case 2:
|
||||
col[0] = 0.0f; col[1] = 0.0f; col[2] = 1.0f;
|
||||
UI_GetThemeColor3fv(TH_AXIS_Z, col);
|
||||
break;
|
||||
default:
|
||||
/* 'unknown' color - bluish so as to not conflict with handles */
|
||||
|
||||
@@ -545,12 +545,8 @@ static void drawfloor(Scene *scene, View3D *v3d, const char **grid_unit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (v3d->zbuf && scene->obedit) glDepthMask(1);
|
||||
|
||||
if (v3d->zbuf && scene->obedit) glDepthMask(1);
|
||||
}
|
||||
|
||||
static void drawcursor(Scene *scene, ARegion *ar, View3D *v3d)
|
||||
@@ -600,8 +596,8 @@ static void draw_view_axis(RegionView3D *rv3d)
|
||||
mul_qt_v3(rv3d->viewquat, vec);
|
||||
dx = vec[0] * k;
|
||||
dy = vec[1] * k;
|
||||
|
||||
glColor4ub(220, 0, 0, bright);
|
||||
|
||||
UI_ThemeColorShadeAlpha(TH_AXIS_X, 0, bright);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(start, start + ydisp);
|
||||
glVertex2f(start + dx, start + dy + ydisp);
|
||||
@@ -620,8 +616,8 @@ static void draw_view_axis(RegionView3D *rv3d)
|
||||
mul_qt_v3(rv3d->viewquat, vec);
|
||||
dx = vec[0] * k;
|
||||
dy = vec[1] * k;
|
||||
|
||||
glColor4ub(0, 220, 0, bright);
|
||||
|
||||
UI_ThemeColorShadeAlpha(TH_AXIS_Y, 0, bright);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(start, start + ydisp);
|
||||
glVertex2f(start + dx, start + dy + ydisp);
|
||||
@@ -640,7 +636,7 @@ static void draw_view_axis(RegionView3D *rv3d)
|
||||
dx = vec[0] * k;
|
||||
dy = vec[1] * k;
|
||||
|
||||
glColor4ub(30, 30, 220, bright);
|
||||
UI_ThemeColorShadeAlpha(TH_AXIS_Z, 0, bright);
|
||||
glBegin(GL_LINES);
|
||||
glVertex2f(start, start + ydisp);
|
||||
glVertex2f(start + dx, start + dy + ydisp);
|
||||
|
||||
@@ -744,7 +744,7 @@ static char axisBlendAngle(float angle)
|
||||
return (char)(255.0f * (angle - 5) / 15.0f);
|
||||
}
|
||||
|
||||
/* three colors can be set;
|
||||
/* three colors can be set:
|
||||
* gray for ghosting
|
||||
* moving: in transform theme color
|
||||
* else the red/green/blue
|
||||
@@ -776,15 +776,13 @@ static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned c
|
||||
}
|
||||
break;
|
||||
case 'X':
|
||||
col[0] = 220;
|
||||
UI_GetThemeColor3ubv(TH_AXIS_X, col);
|
||||
break;
|
||||
case 'Y':
|
||||
col[1] = 220;
|
||||
UI_GetThemeColor3ubv(TH_AXIS_Y, col);
|
||||
break;
|
||||
case 'Z':
|
||||
col[0] = 30;
|
||||
col[1] = 30;
|
||||
col[2] = 220;
|
||||
UI_GetThemeColor3ubv(TH_AXIS_Z, col);
|
||||
break;
|
||||
default:
|
||||
BLI_assert(!"invalid axis arg");
|
||||
|
||||
@@ -162,7 +162,8 @@ typedef struct ThemeUI {
|
||||
char iconfile[256]; // FILE_MAXFILE length
|
||||
float icon_alpha;
|
||||
|
||||
float pad;
|
||||
/* Axis Colors */
|
||||
char xaxis[4], yaxis[4], zaxis[4];
|
||||
} ThemeUI;
|
||||
|
||||
/* try to put them all in one, if needed a special struct can be created as well
|
||||
|
||||
@@ -770,6 +770,25 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
|
||||
prop = RNA_def_property(srna, "icon_alpha", PROP_FLOAT, PROP_FACTOR);
|
||||
RNA_def_property_ui_text(prop, "Icon Alpha", "Transparency of icons in the interface, to reduce contrast");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
/* axis */
|
||||
prop = RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "xaxis");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "X Axis", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop = RNA_def_property(srna, "axis_y", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "yaxis");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Y Axis", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop = RNA_def_property(srna, "axis_z", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "zaxis");
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Z Axis", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_space_generic(BlenderRNA *brna)
|
||||
|
||||
Reference in New Issue
Block a user