diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-11-21 22:44:09 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-11-21 22:44:32 +0300 |
commit | 7d985fcc1b3d2812321bf9006fd459bbbae78803 (patch) | |
tree | d11978a488f371411e99591ed6dec1181cdd34e8 /source | |
parent | 44612e07fe9575f91ca9287781d3397e22936d42 (diff) |
3D View: move x-ray toggle to operator
Allows binding to a key.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_edit.c | 48 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_ops.c | 1 |
3 files changed, 50 insertions, 0 deletions
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index dea28b75745..82e0511afe5 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -4918,3 +4918,51 @@ void VIEW3D_OT_toggle_shading(wmOperatorType *ot) } /** \} */ + + +/* -------------------------------------------------------------------- */ +/** \name Toggle XRay + * \{ */ + +static int toggle_xray_exec(bContext *C, wmOperator *op) +{ + View3D *v3d = CTX_wm_view3d(C); + ScrArea *sa = CTX_wm_area(C); + Object *obact = CTX_data_active_object(C); + + if (obact && obact->mode & OB_MODE_POSE) { + v3d->overlay.flag ^= V3D_OVERLAY_BONE_SELECT; + } + else { + const bool xray_active = ( + (obact && (obact->mode & OB_MODE_EDIT)) || + ELEM(v3d->shading.type, OB_WIRE, OB_SOLID)); + + if (v3d->shading.type == OB_WIRE) { + v3d->shading.flag ^= V3D_SHADING_XRAY_WIREFRAME; + } + else { + v3d->shading.flag ^= V3D_SHADING_XRAY; + } + if (!xray_active) { + BKE_report(op->reports, RPT_INFO, "X-Ray not available in current mode"); + } + } + + ED_area_tag_redraw(sa); + + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_toggle_xray(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Toggle X-Ray"; + ot->idname = "VIEW3D_OT_toggle_xray"; + + /* api callbacks */ + ot->exec = toggle_xray_exec; + ot->poll = ED_operator_view3d_active; +} + +/** \} */ diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 8c21497dd53..05f2d8f67e1 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -104,6 +104,7 @@ void VIEW3D_OT_render_border(struct wmOperatorType *ot); void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot); void VIEW3D_OT_zoom_border(struct wmOperatorType *ot); void VIEW3D_OT_toggle_shading(struct wmOperatorType *ot); +void VIEW3D_OT_toggle_xray(struct wmOperatorType *ot); void view3d_boxview_copy(struct ScrArea *sa, struct ARegion *ar); void view3d_boxview_sync(struct ScrArea *sa, struct ARegion *ar); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 0c916ebf2a3..2dbe0a0b843 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -224,6 +224,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active); WM_operatortype_append(VIEW3D_OT_toggle_shading); + WM_operatortype_append(VIEW3D_OT_toggle_xray); WM_operatortype_append(VIEW3D_OT_toggle_matcap_flip); WM_operatortype_append(VIEW3D_OT_ruler_add); |