From 5bd57aaa052d9578d089a92338d6f0977b5d6c5c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 5 Jul 2018 12:28:03 +0200 Subject: Viewport: tweak Z key shading toggle. * Z now goes to solid mode when in lookdev or rendered mode. * Alt-Z was broken after removal of texture mode, now toggles lookdev mode. * Simplify code by turning it into a single operator. --- source/blender/editors/space_view3d/view3d_edit.c | 69 ++++++++++++++++++---- .../blender/editors/space_view3d/view3d_header.c | 39 +----------- .../blender/editors/space_view3d/view3d_intern.h | 3 +- source/blender/editors/space_view3d/view3d_ops.c | 19 +++--- 4 files changed, 65 insertions(+), 65 deletions(-) (limited to 'source/blender/editors/space_view3d') diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index 88edf32d154..cfc73367435 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -4805,34 +4805,77 @@ void VIEW3D_OT_cursor3d(wmOperatorType *ot) /** \} */ /* -------------------------------------------------------------------- */ -/** \name Toggle Render Shading Operator +/** \name Toggle Shading Operator * \{ */ -static int toggle_render_exec(bContext *C, wmOperator *UNUSED(op)) +static const EnumPropertyItem prop_shading_type_items[] = { + {OB_SOLID, "SOLID", 0, "Solid and X-Ray", "Toggle solid and X-ray shading"}, + {OB_MATERIAL, "MATERIAL", 0, "LookDev", "Toggle lookdev shading"}, + {OB_RENDER, "RENDERED", 0, "Rendered", "Toggle rendered shading"}, + {0, NULL, 0, NULL, NULL} +}; + +static int toggle_shading_exec(bContext *C, wmOperator *op) { + Main *bmain = CTX_data_main(C); View3D *v3d = CTX_wm_view3d(C); - if (v3d->drawtype == OB_RENDER) { - v3d->drawtype = v3d->prev_drawtype; + ScrArea *sa = CTX_wm_area(C); + int type = RNA_enum_get(op->ptr, "type"); + + if (type == OB_SOLID) { + if (v3d->drawtype == OB_SOLID) { + /* Toggle X-Ray if already in solid mode. */ + if (ED_operator_posemode(C) || ED_operator_editmesh(C)) { + v3d->flag ^= V3D_ZBUF_SELECT; + } + else { + v3d->shading.flag ^= V3D_SHADING_XRAY; + } + } + else { + /* Go to solid mode. */ + v3d->drawtype = OB_SOLID; + } } - else { - v3d->prev_drawtype = v3d->drawtype; - v3d->drawtype = OB_RENDER; + else if (type == OB_MATERIAL) { + if (v3d->drawtype == OB_MATERIAL) { + v3d->drawtype = OB_SOLID; + } + else { + v3d->drawtype = OB_MATERIAL; + } + } + else if (type == OB_RENDER) { + if (v3d->drawtype == OB_RENDER) { + v3d->drawtype = v3d->prev_drawtype; + } + else { + v3d->prev_drawtype = v3d->drawtype; + v3d->drawtype = OB_RENDER; + } } - ED_view3d_shade_update(CTX_data_main(C), v3d, CTX_wm_area(C)); + + ED_view3d_shade_update(bmain, v3d, sa); WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d); + return OPERATOR_FINISHED; } -void VIEW3D_OT_toggle_render(wmOperatorType *ot) +void VIEW3D_OT_toggle_shading(wmOperatorType *ot) { + PropertyRNA *prop; + /* identifiers */ - ot->name = "Toggle Rendered Shading"; - ot->description = "Toggle rendered shading mode of the viewport"; - ot->idname = "VIEW3D_OT_toggle_render"; + ot->name = "Toggle Shading Type"; + ot->description = "Toggle shading type in 3D viewport"; + ot->idname = "VIEW3D_OT_toggle_shading"; /* api callbacks */ - ot->exec = toggle_render_exec; + ot->exec = toggle_shading_exec; ot->poll = ED_operator_view3d_active; + + prop = RNA_def_enum(ot->srna, "type", prop_shading_type_items, 0, "Type", "Shading type to toggle"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); } /** \} */ diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index eeddacee808..a2dda8d6403 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -221,46 +221,10 @@ void VIEW3D_OT_layers(wmOperatorType *ot) RNA_def_boolean(ot->srna, "toggle", 1, "Toggle", "Toggle the layer"); } -/* -------------------------------------------------------------------- */ -/** \name Toggle Bone selection Overlay Operator - * \{ */ - -static int toggle_show_xray(bContext *C, wmOperator *UNUSED(op)) -{ - View3D *v3d = CTX_wm_view3d(C); - v3d->shading.flag ^= V3D_SHADING_XRAY; - ED_view3d_shade_update(CTX_data_main(C), v3d, CTX_wm_area(C)); - WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, v3d); - return OPERATOR_FINISHED; -} - -static bool toggle_show_xray_poll(bContext *C) -{ - bool result = (ED_operator_view3d_active(C) && !ED_operator_posemode(C) && !ED_operator_editmesh(C)); - if (result) { - // Additional test for SOLID or TEXTURE mode - View3D *v3d = CTX_wm_view3d(C); - result = (v3d->drawtype & (OB_SOLID | OB_TEXTURE)) > 0; - } - return result; -} - -void VIEW3D_OT_toggle_xray_draw_option(wmOperatorType *ot) -{ - /* identifiers */ - ot->name = "Toggle Show X-Ray"; - ot->description = "Toggle show X-Ray"; - ot->idname = "VIEW3D_OT_toggle_xray_draw_option"; - - /* api callbacks */ - ot->exec = toggle_show_xray; - ot->poll = toggle_show_xray_poll; -} - /** \} */ /* -------------------------------------------------------------------- */ -/** \name Toggle Bone selection Overlay Operator +/** \name Toggle Matcap Flip Operator * \{ */ static int toggle_matcap_flip(bContext *C, wmOperator *UNUSED(op)) @@ -281,7 +245,6 @@ void VIEW3D_OT_toggle_matcap_flip(wmOperatorType *ot) /* api callbacks */ ot->exec = toggle_matcap_flip; - // ot->poll = toggle_show_xray_poll; } /** \} */ diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 9cc27a2854f..1b6e4213513 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -64,7 +64,6 @@ enum { /* view3d_header.c */ void VIEW3D_OT_layers(struct wmOperatorType *ot); -void VIEW3D_OT_toggle_xray_draw_option(struct wmOperatorType *ot); void VIEW3D_OT_toggle_matcap_flip(struct wmOperatorType *ot); /* view3d_ops.c */ @@ -104,7 +103,7 @@ void VIEW3D_OT_cursor3d(struct wmOperatorType *ot); 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_render(struct wmOperatorType *ot); +void VIEW3D_OT_toggle_shading(struct wmOperatorType *ot); void view3d_boxview_copy(ScrArea *sa, ARegion *ar); void view3d_boxview_sync(ScrArea *sa, ARegion *ar); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index b4fa092bede..2740b9a9042 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -222,8 +222,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected); WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active); - WM_operatortype_append(VIEW3D_OT_toggle_render); - WM_operatortype_append(VIEW3D_OT_toggle_xray_draw_option); + WM_operatortype_append(VIEW3D_OT_toggle_shading); WM_operatortype_append(VIEW3D_OT_toggle_matcap_flip); WM_operatortype_append(VIEW3D_OT_ruler_add); @@ -404,16 +403,12 @@ void view3d_keymap(wmKeyConfig *keyconf) #endif /* WITH_INPUT_NDOF */ /* drawtype */ - kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_ALT, 0); - RNA_string_set(kmi->ptr, "data_path", "space_data.shading.type"); - RNA_string_set(kmi->ptr, "value_1", "SOLID"); - RNA_string_set(kmi->ptr, "value_2", "TEXTURED"); - - WM_keymap_add_item(keymap, "VIEW3D_OT_toggle_render", ZKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_add_item(keymap, "VIEW3D_OT_toggle_xray_draw_option", ZKEY, KM_PRESS, 0, 0); - - kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", ZKEY, KM_PRESS, 0, 0); - RNA_string_set(kmi->ptr, "data_path", "space_data.use_occlude_geometry"); + kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_toggle_shading", ZKEY, KM_PRESS, 0, 0); + RNA_enum_set(kmi->ptr, "type", OB_SOLID); + kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_toggle_shading", ZKEY, KM_PRESS, KM_ALT, 0); + RNA_enum_set(kmi->ptr, "type", OB_MATERIAL); + kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_toggle_shading", ZKEY, KM_PRESS, KM_SHIFT, 0); + RNA_enum_set(kmi->ptr, "type", OB_RENDER); /* selection*/ kmi = WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, 0, 0); -- cgit v1.2.3