[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