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>2018-11-23 05:17:10 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-11-23 05:19:22 +0300
commit1ffb2bf917acf19aa5d3c0b9215371a771a2ccb1 (patch)
tree5a7822b7266f85c404ebdb4251181e074da28acb /source/blender
parente829e47b55813aaeb3aeff7cba9d1ccae354a731 (diff)
Pose: make pose-bone xray usable in wpaint mode
Update UI, draw-manager and operator to support with pose-bone-xray when in weight paint mode.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/draw/intern/draw_manager.c1
-rw-r--r--source/blender/draw/modes/pose_mode.c11
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c5
3 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index c84dd69125c..8846b6f1dc3 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1986,6 +1986,7 @@ void DRW_draw_select_loop(
}
if (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) {
if (!(v3d->flag2 & V3D_RENDER_OVERRIDE)) {
+ /* Note: don't use "BKE_object_pose_armature_get" here, it breaks selection. */
Object *obpose = OBPOSE_FROM_OBACT(obact);
if (obpose) {
use_obedit = true;
diff --git a/source/blender/draw/modes/pose_mode.c b/source/blender/draw/modes/pose_mode.c
index c9a31e616bb..81466f19128 100644
--- a/source/blender/draw/modes/pose_mode.c
+++ b/source/blender/draw/modes/pose_mode.c
@@ -86,9 +86,9 @@ static struct {
/* *********** FUNCTIONS *********** */
static bool POSE_is_bone_selection_overlay_active(void)
{
- const DRWContextState *dcs = DRW_context_state_get();
- const View3D *v3d = dcs->v3d;
- return v3d && (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) && OBPOSE_FROM_OBACT(dcs->obact);
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const View3D *v3d = draw_ctx->v3d;
+ return v3d && (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) && draw_ctx->object_pose;
}
static void POSE_engine_init(void *UNUSED(vedata))
@@ -147,8 +147,9 @@ static void POSE_cache_init(void *vedata)
{
if (POSE_is_bone_selection_overlay_active()) {
- copy_v4_fl4(ppd->blend_color, 0.0f, 0.0f, 0.0f, v3d->overlay.bone_select_alpha);
- copy_v4_fl4(ppd->blend_color_invert, 0.0f, 0.0f, 0.0f, pow(v3d->overlay.bone_select_alpha, 4));
+ const float alpha = (draw_ctx->object_mode & OB_MODE_WEIGHT_PAINT) ? 0.0f : v3d->overlay.bone_select_alpha;
+ copy_v4_fl4(ppd->blend_color, 0.0f, 0.0f, 0.0f, alpha);
+ copy_v4_fl4(ppd->blend_color_invert, 0.0f, 0.0f, 0.0f, pow(alpha, 4));
DRWShadingGroup *grp;
psl->bone_selection = DRW_pass_create(
"Bone Selection",
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 82e0511afe5..c94aab1a3c1 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4930,7 +4930,10 @@ static int toggle_xray_exec(bContext *C, wmOperator *op)
ScrArea *sa = CTX_wm_area(C);
Object *obact = CTX_data_active_object(C);
- if (obact && obact->mode & OB_MODE_POSE) {
+ if (obact &&
+ ((obact->mode & OB_MODE_POSE) ||
+ ((obact->mode & OB_MODE_WEIGHT_PAINT) && BKE_object_pose_armature_get(obact))))
+ {
v3d->overlay.flag ^= V3D_OVERLAY_BONE_SELECT;
}
else {