diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-04-26 15:25:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-04-26 15:28:42 +0300 |
commit | aca6a12330d3b4d5d28413400ade78fbd7c23770 (patch) | |
tree | 810e7a49edd24ae293ed8d2fb508120f28a12938 /source/blender/draw/intern/draw_armature.c | |
parent | ec442224df837f1005082ef2e892b3c221c0eb9a (diff) |
Draw Manager: pose-bone selection
Diffstat (limited to 'source/blender/draw/intern/draw_armature.c')
-rw-r--r-- | source/blender/draw/intern/draw_armature.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c index c7fad8beadf..a8fc1c04f9d 100644 --- a/source/blender/draw/intern/draw_armature.c +++ b/source/blender/draw/intern/draw_armature.c @@ -358,7 +358,7 @@ static void draw_armature_edit(Object *ob) { EditBone *eBone; bArmature *arm = ob->data; - unsigned int index; + int index; const bool is_select = DRW_viewport_is_select(); update_color(NULL); @@ -400,7 +400,9 @@ static void draw_armature_pose(Object *ob, const float const_color[4]) { bArmature *arm = ob->data; bPoseChannel *pchan; + int index = -1; Bone *bone; + const bool is_select = DRW_viewport_is_select(); update_color(const_color); @@ -409,6 +411,18 @@ static void draw_armature_pose(Object *ob, const float const_color[4]) BKE_pose_rebuild(ob, arm); } + if (!(base->flag_legacy & OB_FROMDUPLI)) { + if (is_select) { + if (ob->mode & OB_MODE_POSE) { + arm->flag |= ARM_POSEMODE; + } + + if (arm->flag & ARM_POSEMODE) { + index = ob->base_selection_color; + } + } + } + /* being set below */ arm->layer_used = 0; @@ -419,7 +433,7 @@ static void draw_armature_pose(Object *ob, const float const_color[4]) /* bone must be visible */ if ((bone->flag & (BONE_HIDDEN_P | BONE_HIDDEN_PG)) == 0) { if (bone->layer & arm->layer) { - const int select_id = -1; /* TODO: see 'draw_pose_bones' */ + const int select_id = is_select ? index : (unsigned int)-1; draw_bone_update_disp_matrix(NULL, pchan, arm->drawtype); @@ -445,9 +459,15 @@ static void draw_armature_pose(Object *ob, const float const_color[4]) /* Draw additional axes */ if (arm->flag & ARM_DRAWAXES) draw_axes(NULL, pchan); + + if (is_select) { + index += 0x10000; + } } } } + + arm->flag &= ~ARM_POSEMODE; } /* this function set the object space to use |