diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-12-18 03:57:12 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-12-18 03:59:29 +0300 |
commit | 4fceaf3848b6ff926a8f0ffdb8f5a7b1537da57b (patch) | |
tree | 7d748666d5577961b7009e5306408b0faf539e00 /source/blender/editors/space_view3d/view3d_gizmo_armature.c | |
parent | 7aeb24e037112c6b8a20d658c3f5c33b1e51e821 (diff) |
Fix gizmos showing for non-visible objects
Active object gizmos were showing even when the object wasn't visible
(local view or with their object type disabled).
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_gizmo_armature.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_gizmo_armature.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_armature.c b/source/blender/editors/space_view3d/view3d_gizmo_armature.c index 0a3d20979a0..9766e8f7ff9 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_armature.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_armature.c @@ -129,19 +129,22 @@ static void gizmo_bbone_offset_set( static bool WIDGETGROUP_armature_spline_poll(const bContext *C, wmGizmoGroupType *UNUSED(gzgt)) { - Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); - if (ob != NULL) { - const bArmature *arm = ob->data; - if (arm->drawtype == ARM_B_BONE) { - bPoseChannel *pchan = BKE_pose_channel_active(ob); - if (pchan && pchan->bone->segments > 1) { - View3D *v3d = CTX_wm_view3d(C); - if ((v3d->flag2 & V3D_RENDER_OVERRIDE) || - (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_CONTEXT))) - { - /* pass */ - } - else { + View3D *v3d = CTX_wm_view3d(C); + if ((v3d->flag2 & V3D_RENDER_OVERRIDE) || + (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_CONTEXT))) + { + return false; + } + + ViewLayer *view_layer = CTX_data_view_layer(C); + Base *base = BASACT(view_layer); + if (base && BASE_VISIBLE(v3d, base)) { + Object *ob = BKE_object_pose_armature_get(base->object); + if (ob) { + const bArmature *arm = ob->data; + if (arm->drawtype == ARM_B_BONE) { + bPoseChannel *pchan = BKE_pose_channel_active(ob); + if (pchan && pchan->bone->segments > 1) { return true; } } @@ -153,7 +156,8 @@ static bool WIDGETGROUP_armature_spline_poll(const bContext *C, wmGizmoGroupType static void WIDGETGROUP_armature_spline_setup(const bContext *C, wmGizmoGroup *gzgroup) { - Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); + ViewLayer *view_layer = CTX_data_view_layer(C); + Object *ob = BKE_object_pose_armature_get(OBACT(view_layer)); bPoseChannel *pchan = BKE_pose_channel_active(ob); const wmGizmoType *gzt_move = WM_gizmotype_find("GIZMO_GT_move_3d", true); @@ -183,7 +187,8 @@ static void WIDGETGROUP_armature_spline_setup(const bContext *C, wmGizmoGroup *g static void WIDGETGROUP_armature_spline_refresh(const bContext *C, wmGizmoGroup *gzgroup) { - Object *ob = BKE_object_pose_armature_get(CTX_data_active_object(C)); + ViewLayer *view_layer = CTX_data_view_layer(C); + Object *ob = BKE_object_pose_armature_get(OBACT(view_layer)); if (!gzgroup->customdata) return; |