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:
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_edit.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c69
1 files changed, 56 insertions, 13 deletions
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);
}
/** \} */