UI: Theme options for checkerboard pattern colors and size
This patch adds ability to set up colors and size of background (transparency) checkerboard pattern in viewport and 2d editors. No new backgrounds, only changing colors in existing ones. This is not the background of the viewport, it is a transparency checkerboard that is turned on only in render mode, when the transparency mode is on. And also in 2D-editors, (image, sequencer, etc). Reviewed By: Pablo Vazquez, Julian Eisel Differential Revision: https://developer.blender.org/D6791
This commit is contained in:
@@ -240,6 +240,9 @@ const bTheme U_theme_default = {
|
|||||||
.editor_outline = RGBA(0x1f1f1fff),
|
.editor_outline = RGBA(0x1f1f1fff),
|
||||||
.icon_alpha = 1.0f,
|
.icon_alpha = 1.0f,
|
||||||
.icon_saturation = 0.5f,
|
.icon_saturation = 0.5f,
|
||||||
|
.transparent_checker_primary = RGBA(0x333333ff),
|
||||||
|
.transparent_checker_secondary = RGBA(0x262626ff),
|
||||||
|
.transparent_checker_size = 8,
|
||||||
.widget_text_cursor = RGBA(0x3399e6ff),
|
.widget_text_cursor = RGBA(0x3399e6ff),
|
||||||
.xaxis = RGBA(0xff3352ff),
|
.xaxis = RGBA(0xff3352ff),
|
||||||
.yaxis = RGBA(0x8bdc00ff),
|
.yaxis = RGBA(0x8bdc00ff),
|
||||||
|
|||||||
Submodule release/scripts/addons updated: 47a32a5370...c6d8243636
@@ -897,6 +897,23 @@ class USERPREF_PT_theme_interface_styles(ThemePanel, CenterAlignMixIn, Panel):
|
|||||||
flow.prop(ui, "widget_emboss")
|
flow.prop(ui, "widget_emboss")
|
||||||
|
|
||||||
|
|
||||||
|
class USERPREF_PT_theme_interface_transparent_checker(ThemePanel, CenterAlignMixIn, Panel):
|
||||||
|
bl_label = "Transparent Checkerboard"
|
||||||
|
bl_options = {'DEFAULT_CLOSED'}
|
||||||
|
bl_parent_id = "USERPREF_PT_theme_user_interface"
|
||||||
|
|
||||||
|
def draw_centered(self, context, layout):
|
||||||
|
theme = context.preferences.themes[0]
|
||||||
|
ui = theme.user_interface
|
||||||
|
|
||||||
|
flow = layout.grid_flow(
|
||||||
|
row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
|
||||||
|
|
||||||
|
flow.prop(ui, "transparent_checker_primary")
|
||||||
|
flow.prop(ui, "transparent_checker_secondary")
|
||||||
|
flow.prop(ui, "transparent_checker_size")
|
||||||
|
|
||||||
|
|
||||||
class USERPREF_PT_theme_interface_gizmos(ThemePanel, CenterAlignMixIn, Panel):
|
class USERPREF_PT_theme_interface_gizmos(ThemePanel, CenterAlignMixIn, Panel):
|
||||||
bl_label = "Axis & Gizmo Colors"
|
bl_label = "Axis & Gizmo Colors"
|
||||||
bl_options = {'DEFAULT_CLOSED'}
|
bl_options = {'DEFAULT_CLOSED'}
|
||||||
@@ -2219,6 +2236,7 @@ classes = (
|
|||||||
USERPREF_PT_theme_interface_state,
|
USERPREF_PT_theme_interface_state,
|
||||||
USERPREF_PT_theme_interface_styles,
|
USERPREF_PT_theme_interface_styles,
|
||||||
USERPREF_PT_theme_interface_gizmos,
|
USERPREF_PT_theme_interface_gizmos,
|
||||||
|
USERPREF_PT_theme_interface_transparent_checker,
|
||||||
USERPREF_PT_theme_interface_icons,
|
USERPREF_PT_theme_interface_icons,
|
||||||
USERPREF_PT_theme_text_style,
|
USERPREF_PT_theme_text_style,
|
||||||
USERPREF_PT_theme_bone_color_sets,
|
USERPREF_PT_theme_bone_color_sets,
|
||||||
|
|||||||
@@ -216,6 +216,9 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
/* Keep this block, even when empty. */
|
/* Keep this block, even when empty. */
|
||||||
|
FROM_DEFAULT_V4_UCHAR(tui.transparent_checker_primary);
|
||||||
|
FROM_DEFAULT_V4_UCHAR(tui.transparent_checker_secondary);
|
||||||
|
btheme->tui.transparent_checker_size = U_theme_default.tui.transparent_checker_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef FROM_DEFAULT_V4_UCHAR
|
#undef FROM_DEFAULT_V4_UCHAR
|
||||||
|
|||||||
@@ -71,10 +71,10 @@ void main()
|
|||||||
bg_col += dither();
|
bg_col += dither();
|
||||||
break;
|
break;
|
||||||
case BG_CHECKER:
|
case BG_CHECKER:
|
||||||
float size = 8.0 * sizePixel;
|
float size = sizeChecker * sizePixel;
|
||||||
ivec2 p = ivec2(floor(gl_FragCoord.xy / size));
|
ivec2 p = ivec2(floor(gl_FragCoord.xy / size));
|
||||||
bool check = mod(p.x, 2) == mod(p.y, 2);
|
bool check = mod(p.x, 2) == mod(p.y, 2);
|
||||||
bg_col = (check) ? colorCheckerLow.rgb : colorCheckerHigh.rgb;
|
bg_col = (check) ? colorCheckerPrimary.rgb : colorCheckerSecondary.rgb;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -91,8 +91,9 @@ void DRW_globals_update(void)
|
|||||||
UI_GetThemeColor4fv(TH_SKIN_ROOT, gb->colorSkinRoot);
|
UI_GetThemeColor4fv(TH_SKIN_ROOT, gb->colorSkinRoot);
|
||||||
UI_GetThemeColor4fv(TH_BACK, gb->colorBackground);
|
UI_GetThemeColor4fv(TH_BACK, gb->colorBackground);
|
||||||
UI_GetThemeColor4fv(TH_BACK_GRAD, gb->colorBackgroundGradient);
|
UI_GetThemeColor4fv(TH_BACK_GRAD, gb->colorBackgroundGradient);
|
||||||
UI_COLOR_RGBA_FROM_U8(0x26, 0x26, 0x26, 0xFF, gb->colorCheckerLow);
|
UI_GetThemeColor4fv(TH_TRANSPARENT_CHECKER_PRIMARY, gb->colorCheckerPrimary);
|
||||||
UI_COLOR_RGBA_FROM_U8(0x33, 0x33, 0x33, 0xFF, gb->colorCheckerHigh);
|
UI_GetThemeColor4fv(TH_TRANSPARENT_CHECKER_SECONDARY, gb->colorCheckerSecondary);
|
||||||
|
gb->sizeChecker = UI_GetThemeValuef(TH_TRANSPARENT_CHECKER_SIZE);
|
||||||
UI_GetThemeColor4fv(TH_V3D_CLIPPING_BORDER, gb->colorClippingBorder);
|
UI_GetThemeColor4fv(TH_V3D_CLIPPING_BORDER, gb->colorClippingBorder);
|
||||||
|
|
||||||
/* Custom median color to slightly affect the edit mesh colors. */
|
/* Custom median color to slightly affect the edit mesh colors. */
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ typedef struct GlobalsUboStorage {
|
|||||||
|
|
||||||
float colorBackground[4];
|
float colorBackground[4];
|
||||||
float colorBackgroundGradient[4];
|
float colorBackgroundGradient[4];
|
||||||
float colorCheckerLow[4];
|
float colorCheckerPrimary[4];
|
||||||
float colorCheckerHigh[4];
|
float colorCheckerSecondary[4];
|
||||||
float colorClippingBorder[4];
|
float colorClippingBorder[4];
|
||||||
float colorEditMeshMiddle[4];
|
float colorEditMeshMiddle[4];
|
||||||
|
|
||||||
@@ -148,8 +148,9 @@ typedef struct GlobalsUboStorage {
|
|||||||
float sizePixel, pixelFac;
|
float sizePixel, pixelFac;
|
||||||
float sizeObjectCenter, sizeLightCenter, sizeLightCircle, sizeLightCircleShadow;
|
float sizeObjectCenter, sizeLightCenter, sizeLightCircle, sizeLightCircleShadow;
|
||||||
float sizeVertex, sizeEdge, sizeEdgeFix, sizeFaceDot;
|
float sizeVertex, sizeEdge, sizeEdgeFix, sizeFaceDot;
|
||||||
|
float sizeChecker;
|
||||||
|
|
||||||
float pad_globalsBlock[2];
|
float pad_globalsBlock;
|
||||||
} GlobalsUboStorage;
|
} GlobalsUboStorage;
|
||||||
/* Keep in sync with globalsBlock in shaders */
|
/* Keep in sync with globalsBlock in shaders */
|
||||||
BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16)
|
BLI_STATIC_ASSERT_ALIGN(GlobalsUboStorage, 16)
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ layout(std140) uniform globalsBlock
|
|||||||
|
|
||||||
vec4 colorBackground;
|
vec4 colorBackground;
|
||||||
vec4 colorBackgroundGradient;
|
vec4 colorBackgroundGradient;
|
||||||
vec4 colorCheckerLow;
|
vec4 colorCheckerPrimary;
|
||||||
vec4 colorCheckerHigh;
|
vec4 colorCheckerSecondary;
|
||||||
vec4 colorClippingBorder;
|
vec4 colorClippingBorder;
|
||||||
vec4 colorEditMeshMiddle;
|
vec4 colorEditMeshMiddle;
|
||||||
|
|
||||||
@@ -116,6 +116,7 @@ layout(std140) uniform globalsBlock
|
|||||||
float sizeEdge;
|
float sizeEdge;
|
||||||
float sizeEdgeFix;
|
float sizeEdgeFix;
|
||||||
float sizeFaceDot;
|
float sizeFaceDot;
|
||||||
|
float sizeChecker;
|
||||||
|
|
||||||
float pad_globalsBlock;
|
float pad_globalsBlock;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -308,6 +308,10 @@ typedef enum ThemeColorID {
|
|||||||
TH_WIDGET_TEXT_CURSOR,
|
TH_WIDGET_TEXT_CURSOR,
|
||||||
TH_EDITOR_OUTLINE,
|
TH_EDITOR_OUTLINE,
|
||||||
|
|
||||||
|
TH_TRANSPARENT_CHECKER_PRIMARY,
|
||||||
|
TH_TRANSPARENT_CHECKER_SECONDARY,
|
||||||
|
TH_TRANSPARENT_CHECKER_SIZE,
|
||||||
|
|
||||||
TH_AXIS_X, /* X/Y/Z Axis */
|
TH_AXIS_X, /* X/Y/Z Axis */
|
||||||
TH_AXIS_Y,
|
TH_AXIS_Y,
|
||||||
TH_AXIS_Z,
|
TH_AXIS_Z,
|
||||||
|
|||||||
@@ -899,6 +899,18 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
|
|||||||
case TH_WIDGET_TEXT_CURSOR:
|
case TH_WIDGET_TEXT_CURSOR:
|
||||||
cp = btheme->tui.widget_text_cursor;
|
cp = btheme->tui.widget_text_cursor;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TH_TRANSPARENT_CHECKER_PRIMARY:
|
||||||
|
cp = btheme->tui.transparent_checker_primary;
|
||||||
|
break;
|
||||||
|
case TH_TRANSPARENT_CHECKER_SECONDARY:
|
||||||
|
cp = btheme->tui.transparent_checker_secondary;
|
||||||
|
break;
|
||||||
|
case TH_TRANSPARENT_CHECKER_SIZE:
|
||||||
|
cp = &btheme->tui.transparent_checker_size;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
case TH_AXIS_X:
|
case TH_AXIS_X:
|
||||||
cp = btheme->tui.xaxis;
|
cp = btheme->tui.xaxis;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
#include "GPU_immediate.h"
|
#include "GPU_immediate.h"
|
||||||
#include "GPU_immediate_util.h"
|
#include "GPU_immediate_util.h"
|
||||||
|
|
||||||
|
#include "UI_resources.h"
|
||||||
|
|
||||||
static const float cube_coords[8][3] = {
|
static const float cube_coords[8][3] = {
|
||||||
{-1, -1, -1},
|
{-1, -1, -1},
|
||||||
{-1, -1, +1},
|
{-1, -1, +1},
|
||||||
@@ -362,11 +364,17 @@ void imm_draw_box_wire_3d(uint pos, float x1, float y1, float x2, float y2)
|
|||||||
void imm_draw_box_checker_2d(float x1, float y1, float x2, float y2)
|
void imm_draw_box_checker_2d(float x1, float y1, float x2, float y2)
|
||||||
{
|
{
|
||||||
uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
||||||
immBindBuiltinProgram(GPU_SHADER_2D_CHECKER);
|
float checker_primary[4];
|
||||||
|
float checker_secondary[4];
|
||||||
|
int checker_size = UI_GetThemeValue(TH_TRANSPARENT_CHECKER_SIZE);
|
||||||
|
|
||||||
immUniform4f("color1", 0.15f, 0.15f, 0.15f, 1.0f);
|
immBindBuiltinProgram(GPU_SHADER_2D_CHECKER);
|
||||||
immUniform4f("color2", 0.2f, 0.2f, 0.2f, 1.0f);
|
UI_GetThemeColor4fv(TH_TRANSPARENT_CHECKER_PRIMARY, checker_primary);
|
||||||
immUniform1i("size", 8);
|
UI_GetThemeColor4fv(TH_TRANSPARENT_CHECKER_SECONDARY, checker_secondary);
|
||||||
|
|
||||||
|
immUniform4fv("color1", checker_primary);
|
||||||
|
immUniform4fv("color2", checker_secondary);
|
||||||
|
immUniform1i("size", checker_size);
|
||||||
|
|
||||||
immRectf(pos, x1, y1, x2, y2);
|
immRectf(pos, x1, y1, x2, y2);
|
||||||
|
|
||||||
|
|||||||
@@ -169,7 +169,11 @@ typedef struct ThemeUI {
|
|||||||
short menu_shadow_width;
|
short menu_shadow_width;
|
||||||
|
|
||||||
unsigned char editor_outline[4];
|
unsigned char editor_outline[4];
|
||||||
char _pad0[2];
|
|
||||||
|
/* Transparent Grid */
|
||||||
|
unsigned char transparent_checker_primary[4], transparent_checker_secondary[4];
|
||||||
|
unsigned char transparent_checker_size;
|
||||||
|
char _pad1[1];
|
||||||
|
|
||||||
float icon_alpha;
|
float icon_alpha;
|
||||||
float icon_saturation;
|
float icon_saturation;
|
||||||
|
|||||||
@@ -1533,6 +1533,28 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
|
|||||||
prop, "Text Cursor", "Color of the interface widgets text insertion cursor (caret)");
|
prop, "Text Cursor", "Color of the interface widgets text insertion cursor (caret)");
|
||||||
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
||||||
|
|
||||||
|
/* Transparent Grid */
|
||||||
|
prop = RNA_def_property(srna, "transparent_checker_primary", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||||
|
RNA_def_property_float_sdna(prop, NULL, "transparent_checker_primary");
|
||||||
|
RNA_def_property_array(prop, 3);
|
||||||
|
RNA_def_property_ui_text(
|
||||||
|
prop, "Primary Color", "Primary color of checkerboard pattern indicating transparent areas");
|
||||||
|
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "transparent_checker_secondary", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||||
|
RNA_def_property_float_sdna(prop, NULL, "transparent_checker_secondary");
|
||||||
|
RNA_def_property_array(prop, 3);
|
||||||
|
RNA_def_property_ui_text(prop,
|
||||||
|
"Secondary Color",
|
||||||
|
"Secondary color of checkerboard pattern indicating transparent areas");
|
||||||
|
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "transparent_checker_size", PROP_INT, PROP_PIXEL);
|
||||||
|
RNA_def_property_ui_text(
|
||||||
|
prop, "Checkerboard Size", "Size of checkerboard pattern indicating transparent areas");
|
||||||
|
RNA_def_property_range(prop, 2, 48);
|
||||||
|
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
||||||
|
|
||||||
/* axis */
|
/* axis */
|
||||||
prop = RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_COLOR_GAMMA);
|
prop = RNA_def_property(srna, "axis_x", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||||
RNA_def_property_float_sdna(prop, NULL, "xaxis");
|
RNA_def_property_float_sdna(prop, NULL, "xaxis");
|
||||||
|
|||||||
Reference in New Issue
Block a user