[Bf-blender-cvs] [7739ac8] multiview: Window Menu option to change stereo display options

Dalai Felinto noreply at git.blender.org
Wed Sep 17 14:12:30 CEST 2014


Commit: 7739ac86911fc947a0c7b90989ebeb97f77850c5
Author: Dalai Felinto
Date:   Mon Sep 15 18:40:10 2014 +0200
Branches: multiview
https://developer.blender.org/rB7739ac86911fc947a0c7b90989ebeb97f77850c5

Window Menu option to change stereo display options

===================================================================

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/makesrna/RNA_access.h
M	source/blender/windowmanager/intern/wm_operators.c
M	source/blender/windowmanager/intern/wm_stereo.c
M	source/blender/windowmanager/wm.h

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index 67b2bbe..62498f0 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -269,6 +269,9 @@ class INFO_MT_window(Menu):
             layout.separator()
             layout.operator("wm.console_toggle", icon='CONSOLE')
 
+        layout.separator()
+        layout.operator("wm.stereo_3d", icon='CAMERA_STEREO')
+
 
 class INFO_MT_help(Menu):
     bl_label = "Help"
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 90c0067..b952b54 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -561,6 +561,7 @@ extern StructRNA RNA_SpeedControlSequence;
 extern StructRNA RNA_Spline;
 extern StructRNA RNA_SplineIKConstraint;
 extern StructRNA RNA_SpotLamp;
+extern StructRNA RNA_Stereo3dDisplay;
 extern StructRNA RNA_StretchToConstraint;
 extern StructRNA RNA_StringProperty;
 extern StructRNA RNA_Struct;
@@ -650,7 +651,6 @@ extern StructRNA RNA_UserPreferencesInput;
 extern StructRNA RNA_UserPreferencesSystem;
 extern StructRNA RNA_UserPreferencesView;
 extern StructRNA RNA_UserPreferencesWalkNavigation;
-extern StructRNA RNA_UserPreferencesStereoDisplay;
 extern StructRNA RNA_UserSolidLight;
 extern StructRNA RNA_VectorFont;
 extern StructRNA RNA_VertexGroup;
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 717c825..dcc09b2 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -4549,25 +4549,36 @@ static void operatortype_ghash_free_cb(wmOperatorType *ot)
 
 /* ******************************************************* */
 /* toggle 3D for current window, turning it fullscreen if needed */
-static void WM_OT_stereo_toggle(wmOperatorType *ot)
+static void WM_OT_stereo3d(wmOperatorType *ot)
 {
-	ot->name = "Toggle 3D Stereo";
-	ot->idname = "WM_OT_stereo_toggle";
+	PropertyRNA *prop;
+
+	ot->name = "Stereo 3D";
+	ot->idname = "WM_OT_stereo_3d";
 	ot->description = "Toggle 3D stereo support for current window (or change the display mode)";
 
-	ot->exec = wm_stereo_toggle_exec;
-	ot->invoke = wm_stereo_toggle_invoke;
+	ot->exec = wm_stereo3d_exec;
+	ot->invoke = wm_stereo3d_invoke;
 	ot->poll = WM_operator_winactive;
+	ot->ui = wm_stereo3d_draw;
+	ot->check = wm_stereo3d_check;
+	ot->cancel = wm_stereo3d_cancel;
 
-	RNA_def_enum(ot->srna, "display_mode", stereo3d_display_items, S3D_DISPLAY_ANAGLYPH, "Display Mode", "");
-	RNA_def_enum(ot->srna, "anaglyph_type", stereo3d_anaglyph_type_items, S3D_ANAGLYPH_REDCYAN, "Anaglyph Type", "");
-	RNA_def_enum(ot->srna, "interlace_type", stereo3d_interlace_type_items, S3D_INTERLACE_ROW, "Interlace Type", "");
-	RNA_def_float(ot->srna, "epilepsy_interval", 0.1f, 0.01f, 10.0f, "Interval",
-	              "Preferred interval in seconds between switching left/right views", 0.05f, 1.0f);
-	RNA_def_boolean(ot->srna, "use_interlace_swap", false, "Swap Left/Right",
-	                "Swap left and right stereo channels");
-	RNA_def_boolean(ot->srna, "use_sidebyside_crosseyed", false, "Cross-Eyed",
-	                "Right eye should see left image and vice-versa");
+	prop = RNA_def_enum(ot->srna, "display_mode", stereo3d_display_items, S3D_DISPLAY_ANAGLYPH, "Display Mode", "");
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+	prop = RNA_def_enum(ot->srna, "anaglyph_type", stereo3d_anaglyph_type_items, S3D_ANAGLYPH_REDCYAN, "Anaglyph Type", "");
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+	prop = RNA_def_enum(ot->srna, "interlace_type", stereo3d_interlace_type_items, S3D_INTERLACE_ROW, "Interlace Type", "");
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+	prop = RNA_def_float(ot->srna, "epilepsy_interval", 0.1f, 0.01f, 10.0f, "Interval",
+	                     "Preferred interval in seconds between switching left/right views", 0.05f, 1.0f);
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+	prop = RNA_def_boolean(ot->srna, "use_interlace_swap", false, "Swap Left/Right",
+	                       "Swap left and right stereo channels");
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+	prop = RNA_def_boolean(ot->srna, "use_sidebyside_crosseyed", false, "Cross-Eyed",
+	                       "Right eye should see left image and vice-versa");
+	RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
 
 /* ******************************************************* */
@@ -4612,7 +4623,7 @@ void wm_operatortype_init(void)
 	WM_operatortype_append(WM_OT_call_menu);
 	WM_operatortype_append(WM_OT_call_menu_pie);
 	WM_operatortype_append(WM_OT_radial_control);
-	WM_operatortype_append(WM_OT_stereo_toggle);
+	WM_operatortype_append(WM_OT_stereo3d);
 #if defined(WIN32)
 	WM_operatortype_append(WM_OT_console_toggle);
 #endif
diff --git a/source/blender/windowmanager/intern/wm_stereo.c b/source/blender/windowmanager/intern/wm_stereo.c
index 0fb9593..2573257 100644
--- a/source/blender/windowmanager/intern/wm_stereo.c
+++ b/source/blender/windowmanager/intern/wm_stereo.c
@@ -75,6 +75,9 @@
 #include "wm_window.h"
 #include "wm_event_system.h"
 
+#include "UI_interface.h"
+#include "UI_resources.h"
+
 static void wm_method_draw_stereo_pageflip(wmWindow *win)
 {
 	wmDrawData *drawdata;
@@ -383,7 +386,7 @@ static bool wm_stereo_need_fullscreen(eStereoDisplayMode stereo_display)
 /*
  * return true if any active area requires to see in 3D
  */
-static bool wm_stereo_required(const bContext *C, bScreen *screen)
+static bool wm_stereo3d_required(const bContext *C, bScreen *screen)
 {
 	ScrArea *sa;
 	View3D *v3d;
@@ -445,7 +448,7 @@ bool WM_stereo_enabled(const bContext *C, wmWindow *win, bool only_fullscreen_te
 {
 	bScreen *screen = win->screen;
 
-	if ((only_fullscreen_test == false) && (wm_stereo_required(C, screen) == false))
+	if ((only_fullscreen_test == false) && (wm_stereo3d_required(C, screen) == false))
 		return false;
 
 	if (wm_stereo_need_fullscreen(win->stereo3d_format->display_mode))
@@ -454,26 +457,75 @@ bool WM_stereo_enabled(const bContext *C, wmWindow *win, bool only_fullscreen_te
 	return true;
 }
 
-static void wm_stereo_set_properties(bContext *C, wmOperator *op)
+/************************** Stereo 3D operator **********************************/
+typedef struct Stereo3dData {
+	Stereo3dFormat stereo3d_format;
+} Stereo3dData;
+
+static bool wm_stereo3d_set_properties(bContext *C, wmOperator *op)
 {
 	wmWindow *win = CTX_wm_window(C);
 	Stereo3dFormat *s3d = win->stereo3d_format;
+	PropertyRNA *prop;
+	bool is_set = false;
 
-	s3d->display_mode = RNA_enum_get(op->ptr, "display_mode");
-	s3d->anaglyph_type = RNA_enum_get(op->ptr, "anaglyph_type");
-	s3d->interlace_type = RNA_enum_get(op->ptr, "interlace_type");
-	s3d->epilepsy_interval = RNA_float_get(op->ptr, "epilepsy_interval");
+	prop = RNA_struct_find_property(op->ptr, "display_mode");
+	if (RNA_property_is_set(op->ptr, prop)) {
+		s3d->display_mode = RNA_property_enum_get(op->ptr, prop);
+		is_set = true;
+	}
 
-	s3d->flag = 0;
+	prop = RNA_struct_find_property(op->ptr, "anaglyph_type");
+	if (RNA_property_is_set(op->ptr, prop)) {
+		s3d->anaglyph_type = RNA_property_enum_get(op->ptr, prop);
+		is_set = true;
+	}
 
-	if (RNA_boolean_get(op->ptr, "use_interlace_swap"))
-		s3d->flag |= S3D_INTERLACE_SWAP;
+	prop = RNA_struct_find_property(op->ptr, "interlace_type");
+	if (RNA_property_is_set(op->ptr, prop)) {
+		s3d->interlace_type = RNA_property_enum_get(op->ptr, prop);
+		is_set = true;
+	}
 
-	if (RNA_boolean_get(op->ptr, "use_sidebyside_crosseyed"))
-		s3d->flag |= S3D_SIDEBYSIDE_CROSSEYED;
+	prop = RNA_struct_find_property(op->ptr, "epilepsy_interval");
+	if (RNA_property_is_set(op->ptr, prop)) {
+		s3d->epilepsy_interval = RNA_property_float_get(op->ptr, prop);
+		is_set = true;
+	}
+
+	prop = RNA_struct_find_property(op->ptr, "use_interlace_swap");
+	if (RNA_property_is_set(op->ptr, prop)) {
+		if (RNA_property_boolean_get(op->ptr, prop))
+			s3d->flag |= S3D_INTERLACE_SWAP;
+		else
+			s3d->flag &= ~S3D_INTERLACE_SWAP;
+		is_set = true;
+	}
+
+	prop = RNA_struct_find_property(op->ptr, "use_sidebyside_crosseyed");
+	if (RNA_property_is_set(op->ptr, prop)) {
+		if (RNA_property_boolean_get(op->ptr, prop))
+			s3d->flag |= S3D_SIDEBYSIDE_CROSSEYED;
+		else
+			s3d->flag &= ~S3D_SIDEBYSIDE_CROSSEYED;
+		is_set = true;
+	}
+
+	return is_set;
+}
+
+static void wm_stereo3d_init(bContext *C, wmOperator *op)
+{
+	Stereo3dData *s3dd;
+	wmWindow *win = CTX_wm_window(C);
+
+	op->customdata = s3dd = MEM_callocN(sizeof(Stereo3dData), __func__);
+
+	/* store the original win stereo 3d settings in case of cancel */
+	s3dd->stereo3d_format = *win->stereo3d_format;
 }
 
-int wm_stereo_toggle_exec(bContext *C, wmOperator *op)
+int wm_stereo3d_exec(bContext *C, wmOperator *op)
 {
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win = CTX_wm_window(C);
@@ -482,8 +534,6 @@ int wm_stereo_toggle_exec(bContext *C, wmOperator *op)
 	if (G.background)
 		return OPERATOR_CANCELLED;
 
-	wm_stereo_set_properties(C, op);
-
 	/* FullScreen or Normal */
 	state = GHOST_GetWindowState(win->ghostwin);
 
@@ -504,46 +554,84 @@ int wm_stereo_toggle_exec(bContext *C, wmOperator *op)
 			GHOST_SetWindowState(win->ghostwin, GHOST_kWindowStateFullScreen);
 	}
 
+	if (op->customdata) {
+		MEM_freeN(op->customdata);
+	}
+
 	WM_event_add_notifier(C, NC_WINDOW, NULL);
 	return OPERATOR_FINISHED;
 }
 
-int wm_stereo_toggle_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+int wm_stereo3d_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+	wm_stereo3d_init(C, op);
+
+	if (wm_stereo3d_set_properties(C, op))
+		return wm_stereo3d_exec(C, op);
+	else
+		return WM_operator_props_dialog_popup(C, op, 250, 100);
+}
+
+void wm_stereo3d_draw(bContext *C, wmOperator *op)
 {
 	wmWindow *win = CTX_wm_window(C);
-	Stereo3dFormat *s3d = win->stereo3d_format;
-	PropertyRNA *prop;
+	Stereo3dFormat *stereo3d_format;
+	PointerRNA stereo3d_format_ptr;
+	uiLayout *layout = op->layout;
+	uiLayout *col;
 
-	prop = RNA_struct_find_property(op->ptr, "display_mode");
-	if (!RNA_property_is_set(op->ptr, prop)) {
-		RNA_property_enu

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list