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.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
ED_view3d_shade_update(CTX_data_main(C), v3d, CTX_wm_area(C));
|
||||
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(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);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user