[Bf-blender-cvs] [6f8d99322cf] blender-v2.83-release: Fix T76578: Show bone visibility driver in outliner

Nathan Craddock noreply at git.blender.org
Sat May 23 18:42:55 CEST 2020


Commit: 6f8d99322cf65d7cb24e9949d371e6bbdc726cd5
Author: Nathan Craddock
Date:   Sat May 23 10:07:51 2020 -0600
Branches: blender-v2.83-release
https://developer.blender.org/rB6f8d99322cf65d7cb24e9949d371e6bbdc726cd5

Fix T76578: Show bone visibility driver in outliner

Allow setting drivers and keyframes for the bone visibility restriction
icon in the outliner. Before the button was a simple icon button, but it
is now connected to the RNA property to show the driven or keyframed
state.

Also when hiding a bone from the outliner it would be deselected, but
from the properties editor it would remain selected. This moves the
deselection to the RNA update function to ensure the bone is always
deselected.

Differential Revision: https://developer.blender.org/D7825

===================================================================

M	release/scripts/startup/bl_ui/properties_data_bone.py
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/makesrna/intern/rna_armature.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_data_bone.py b/release/scripts/startup/bl_ui/properties_data_bone.py
index aca358870c8..ff4425fbb73 100644
--- a/release/scripts/startup/bl_ui/properties_data_bone.py
+++ b/release/scripts/startup/bl_ui/properties_data_bone.py
@@ -267,7 +267,7 @@ class BONE_PT_display(BoneButtonsPanel, Panel):
         if bone:
 
             col = layout.column()
-            col.prop(bone, "hide", text="Hide")
+            col.prop(bone, "hide", text="Hide", toggle=0)
 
 
 class BONE_PT_display_custom_shape(BoneButtonsPanel, Panel):
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index ce83cfc3c97..49fee033de0 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -178,20 +178,13 @@ static void restrictbutton_r_lay_cb(bContext *C, void *poin, void *UNUSED(poin2)
   WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, poin);
 }
 
-static void restrictbutton_bone_visibility_cb(bContext *C, void *poin, void *poin2)
+static void restrictbutton_bone_visibility_cb(bContext *C, void *poin, void *UNUSED(poin2))
 {
-  bArmature *arm = (bArmature *)poin;
-  Bone *bone = (Bone *)poin2;
-  if (bone->flag & BONE_HIDDEN_P) {
-    bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
-  }
+  Bone *bone = (Bone *)poin;
 
   if (CTX_wm_window(C)->eventstate->ctrl) {
     restrictbutton_recursive_bone(bone, BONE_HIDDEN_P, (bone->flag & BONE_HIDDEN_P) != 0);
   }
-
-  WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL);
-  DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE);
 }
 
 static void restrictbutton_bone_select_cb(bContext *C, void *UNUSED(poin), void *poin2)
@@ -859,6 +852,7 @@ typedef struct RestrictProperties {
       *layer_collection_hide_viewport;
   PropertyRNA *modifier_show_viewport, *modifier_show_render;
   PropertyRNA *constraint_enable;
+  PropertyRNA *bone_hide_viewport;
 } RestrictProperties;
 
 /* We don't care about the value of the property
@@ -877,6 +871,7 @@ typedef struct RestrictPropertiesActive {
   bool modifier_show_viewport;
   bool modifier_show_render;
   bool constraint_enable;
+  bool bone_hide_viewport;
 } RestrictPropertiesActive;
 
 static void outliner_restrict_properties_enable_collection_set(
@@ -1011,6 +1006,8 @@ static void outliner_draw_restrictbuts(uiBlock *block,
 
     props.constraint_enable = RNA_struct_type_find_property(&RNA_Constraint, "mute");
 
+    props.bone_hide_viewport = RNA_struct_type_find_property(&RNA_Bone, "hide");
+
     props.initialized = true;
   }
 
@@ -1279,27 +1276,32 @@ static void outliner_draw_restrictbuts(uiBlock *block,
         }
       }
       else if (tselem->type == TSE_POSE_CHANNEL) {
+        PointerRNA ptr;
         bPoseChannel *pchan = (bPoseChannel *)te->directdata;
         Bone *bone = pchan->bone;
         Object *ob = (Object *)tselem->id;
+        bArmature *arm = ob->data;
+
+        RNA_pointer_create(&arm->id, &RNA_Bone, bone, &ptr);
 
         if (soops->show_restrict_flags & SO_RESTRICT_VIEWPORT) {
-          bt = uiDefIconButBitI(block,
-                                UI_BTYPE_ICON_TOGGLE,
-                                BONE_HIDDEN_P,
-                                0,
-                                ICON_RESTRICT_VIEW_OFF,
-                                (int)(region->v2d.cur.xmax - restrict_offsets.viewport),
-                                te->ys,
-                                UI_UNIT_X,
-                                UI_UNIT_Y,
-                                &(bone->flag),
-                                0,
-                                0,
-                                0,
-                                0,
-                                TIP_("Restrict visibility in the 3D View"));
-          UI_but_func_set(bt, restrictbutton_bone_visibility_cb, ob->data, bone);
+          bt = uiDefIconButR_prop(block,
+                                  UI_BTYPE_ICON_TOGGLE,
+                                  0,
+                                  0,
+                                  (int)(region->v2d.cur.xmax - restrict_offsets.viewport),
+                                  te->ys,
+                                  UI_UNIT_X,
+                                  UI_UNIT_Y,
+                                  &ptr,
+                                  props.bone_hide_viewport,
+                                  -1,
+                                  0,
+                                  0,
+                                  -1,
+                                  -1,
+                                  TIP_("Restrict visibility in the 3D View"));
+          UI_but_func_set(bt, restrictbutton_bone_visibility_cb, bone, NULL);
           UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
           UI_but_drawflag_enable(bt, UI_BUT_ICON_REVERSE);
         }
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index fe35af8c2e0..cd7875d84e3 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -176,6 +176,20 @@ static void rna_Armature_redraw_data(Main *UNUSED(bmain), Scene *UNUSED(scene),
   WM_main_add_notifier(NC_GEOM | ND_DATA, id);
 }
 
+/* Unselect bones when hidden */
+static void rna_Bone_hide_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+  bArmature *arm = (bArmature *)ptr->owner_id;
+  Bone *bone = (Bone *)ptr->data;
+
+  if (bone->flag & BONE_HIDDEN_P) {
+    bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
+  }
+
+  WM_main_add_notifier(NC_OBJECT | ND_POSE, arm);
+  DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE);
+}
+
 /* called whenever a bone is renamed */
 static void rna_Bone_update_renamed(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
 {
@@ -1143,7 +1157,8 @@ static void rna_def_bone(BlenderRNA *brna)
       prop,
       "Hide",
       "Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)");
-  RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
+  RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, -1);
+  RNA_def_property_update(prop, 0, "rna_Bone_hide_update");
 
   prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_SELECTED);



More information about the Bf-blender-cvs mailing list