diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-07-17 20:17:16 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-07-17 20:17:34 +0300 |
commit | 709f126e8143da4fa28a08a94e13581c68ab6b29 (patch) | |
tree | 3c1d1bf71376904c4816af0d16a5c11cde639ddf /source/blender/blenkernel/intern | |
parent | 4ddc7e8d1b2c22463d4d181d8bb3bb9bb17b1b35 (diff) |
Fix T59713: Armature layer dots not updated on changes
`layer_used` runtime data, which controls the drawing of dots in the UI was not getting refreshed properly.
This used to happen in the drawing code, but was no longer working for reasons explained in:
{rB2b09062defa093a243b5fe64b099accb07b440a3}
The solution was to update each layer manually in the operators:
* ARMATURE_OT_bone_primitive_add
* ARMATURE_OT_delete
* ARMATURE_OT_dissolve
* ARMATURE_OT_fill
* ARMATURE_OT_merge
* ARMATURE_OT_separate
* ARMATURE_OT_bone_layers
* POSE_OT_bone_layers
Differential Revision: https://developer.blender.org/D5281
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/armature.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 65de951b190..c36acd1eae1 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -324,6 +324,24 @@ bool BKE_armature_bone_flag_test_recursive(const Bone *bone, int flag) } } +static void armature_refresh_layer_used_recursive(bArmature *arm, ListBase *bones) +{ + for (Bone *bone = bones->first; bone; bone = bone->next) { + arm->layer_used |= bone->layer; + armature_refresh_layer_used_recursive(arm, &bone->childbase); + } +} + +/* Update the layers_used variable after bones are moved between layer + * NOTE: Used to be done in drawing code in 2.7, but that won't work with + * Copy-on-Write, as drawing uses evaluated copies. + */ +void BKE_armature_refresh_layer_used(bArmature *arm) +{ + arm->layer_used = 0; + armature_refresh_layer_used_recursive(arm, &arm->bonebase); +} + /* Finds the best possible extension to the name on a particular axis. (For renaming, check for * unique names afterwards) strip_number: removes number extensions (TODO: not used) * axis: the axis to name on |