Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py26
-rw-r--r--source/blender/editors/include/UI_interface.h4
-rw-r--r--source/blender/editors/interface/interface.c3
-rw-r--r--source/blender/editors/interface/interface_layout.c10
-rw-r--r--source/blender/editors/space_outliner/outliner_draw.c15
-rw-r--r--source/blender/makesrna/intern/rna_object.c3
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c5
7 files changed, 59 insertions, 7 deletions
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 6a938b40c2e..aeda8d8648a 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -378,6 +378,31 @@ class OBJECT_PT_motion_paths_display(MotionPathButtonsPanel_display, Panel):
self.draw_settings(context, avs, mpath)
+class OBJECT_PT_visibility(ObjectButtonsPanel, Panel):
+ bl_label = "Visibility"
+ bl_options = {'DEFAULT_CLOSED'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
+
+ @classmethod
+ def poll(cls, context):
+ return (context.object) and (context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
+ layout = self.layout
+ ob = context.object
+
+ col = flow.column()
+ col.prop(ob, "hide_viewport", text="Show in Viewports", invert_checkbox=True)
+ col = flow.column()
+ col.prop(ob, "hide_render", text="Show in Renders", invert_checkbox=True)
+ col = flow.column()
+ col.prop(ob, "hide_select", text="Selectable", invert_checkbox=True)
+
+
class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
_context_path = "object"
@@ -397,6 +422,7 @@ classes = (
OBJECT_PT_motion_paths_display,
OBJECT_PT_display,
OBJECT_PT_display_bounds,
+ OBJECT_PT_visibility,
OBJECT_PT_custom_props,
)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 14d681ee817..5912a3a59e4 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -281,6 +281,9 @@ enum {
/** Value is animated, but the current value differs from the animated one. */
UI_BUT_ANIMATED_CHANGED = 1 << 25,
+
+ /* Draw the checkbox buttons inverted. */
+ UI_BUT_CHECKBOX_INVERT = 1 << 26,
};
/* scale fixed button widths by this to account for DPI */
@@ -1719,6 +1722,7 @@ enum {
UI_ITEM_R_IMMEDIATE = 1 << 8,
UI_ITEM_O_DEPRESS = 1 << 9,
UI_ITEM_R_COMPACT = 1 << 10,
+ UI_ITEM_R_CHECKBOX_INVERT = 1 << 11,
};
#define UI_HEADER_OFFSET ((void)0, 0.4f * UI_UNIT_X)
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index f1724d92402..e436328c139 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1845,6 +1845,9 @@ int ui_but_is_pushed_ex(uiBut *but, double *value)
}
}
+ if ((but->drawflag & UI_BUT_CHECKBOX_INVERT) && (is_push != -1)) {
+ is_push = !((bool)is_push);
+ }
return is_push;
}
int ui_but_is_pushed(uiBut *but)
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index dc57be4f07f..df4b18477fc 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -1904,6 +1904,10 @@ void uiItemFullR(uiLayout *layout,
}
}
+ if (type != PROP_BOOLEAN) {
+ flag &= ~UI_ITEM_R_CHECKBOX_INVERT;
+ }
+
if (icon == ICON_NONE) {
icon = RNA_property_ui_icon(prop);
}
@@ -2156,6 +2160,12 @@ void uiItemFullR(uiLayout *layout,
but->type = UI_BTYPE_NUM_SLIDER;
}
+ if (flag & UI_ITEM_R_CHECKBOX_INVERT) {
+ if (ELEM(but->type, UI_BTYPE_CHECKBOX, UI_BTYPE_CHECKBOX_N)) {
+ but->drawflag |= UI_BUT_CHECKBOX_INVERT;
+ }
+ }
+
if (toggle && but->type == UI_BTYPE_CHECKBOX) {
but->type = UI_BTYPE_TOGGLE;
}
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 6a7795393c9..f34f280a29d 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1088,10 +1088,13 @@ static void outliner_draw_restrictbuts(uiBlock *block,
}
if (soops->show_restrict_flags & SO_RESTRICT_SELECT) {
+ const int icon = RNA_property_boolean_get(&ptr, props.object_hide_select) ?
+ ICON_RESTRICT_SELECT_ON :
+ ICON_RESTRICT_SELECT_OFF;
bt = uiDefIconButR_prop(block,
UI_BTYPE_ICON_TOGGLE,
0,
- 0,
+ icon,
(int)(ar->v2d.cur.xmax - restrict_offsets.select),
te->ys,
UI_UNIT_X,
@@ -1113,10 +1116,13 @@ static void outliner_draw_restrictbuts(uiBlock *block,
}
if (soops->show_restrict_flags & SO_RESTRICT_VIEWPORT) {
+ const int icon = RNA_property_boolean_get(&ptr, props.object_hide_viewport) ?
+ ICON_RESTRICT_VIEW_ON :
+ ICON_RESTRICT_VIEW_OFF;
bt = uiDefIconButR_prop(block,
UI_BTYPE_ICON_TOGGLE,
0,
- 0,
+ icon,
(int)(ar->v2d.cur.xmax - restrict_offsets.viewport),
te->ys,
UI_UNIT_X,
@@ -1138,10 +1144,13 @@ static void outliner_draw_restrictbuts(uiBlock *block,
}
if (soops->show_restrict_flags & SO_RESTRICT_RENDER) {
+ const int icon = RNA_property_boolean_get(&ptr, props.object_hide_render) ?
+ ICON_RESTRICT_RENDER_ON :
+ ICON_RESTRICT_RENDER_OFF;
bt = uiDefIconButR_prop(block,
UI_BTYPE_ICON_TOGGLE,
0,
- 0,
+ icon,
(int)(ar->v2d.cur.xmax - restrict_offsets.render),
te->ys,
UI_UNIT_X,
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index b4453996095..dbc822460d9 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -2819,7 +2819,6 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_VIEWPORT);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Disable in Viewports", "Globally disable in viewports");
- RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, -1);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
prop = RNA_def_property(srna, "hide_select", PROP_BOOLEAN, PROP_NONE);
@@ -2827,14 +2826,12 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Disable Selection", "Disable selection in viewport");
- RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, -1);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
prop = RNA_def_property(srna, "hide_render", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "restrictflag", OB_RESTRICT_RENDER);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Disable in Renders", "Globally disable in renders");
- RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, -1);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_hide_update");
prop = RNA_def_property(srna, "show_instancer_for_render", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 7ce9155e3d9..5a001f05b53 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -101,7 +101,8 @@ static void rna_uiItemR(uiLayout *layout,
bool full_event,
bool emboss,
int index,
- int icon_value)
+ int icon_value,
+ bool invert_checkbox)
{
PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
int flag = 0;
@@ -125,6 +126,7 @@ static void rna_uiItemR(uiLayout *layout,
flag |= (event) ? UI_ITEM_R_EVENT : 0;
flag |= (full_event) ? UI_ITEM_R_FULL_EVENT : 0;
flag |= (emboss) ? 0 : UI_ITEM_R_NO_BG;
+ flag |= (invert_checkbox) ? UI_ITEM_R_CHECKBOX_INVERT : 0;
uiItemFullR(layout, ptr, prop, index, 0, flag, name, icon);
}
@@ -789,6 +791,7 @@ void RNA_api_ui_layout(StructRNA *srna)
INT_MAX); /* RNA_NO_INDEX == -1 */
parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
+ RNA_def_boolean(func, "invert_checkbox", false, "", "Draw checkbox value inverted");
func = RNA_def_function(srna, "props_enum", "uiItemsEnumR");
api_ui_item_rna_common(func);