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:
authorCampbell Barton <ideasman42@gmail.com>2017-04-26 15:25:38 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-04-26 15:28:42 +0300
commitaca6a12330d3b4d5d28413400ade78fbd7c23770 (patch)
tree810e7a49edd24ae293ed8d2fb508120f28a12938 /source/blender/draw/intern/draw_armature.c
parentec442224df837f1005082ef2e892b3c221c0eb9a (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.c24
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