[Bf-blender-cvs] [5ff399d] HMD_viewport: Let button to open HMD window close the win if it's already opened
Julian Eisel
noreply at git.blender.org
Wed Mar 16 16:53:13 CET 2016
Commit: 5ff399d69a65217ea73e5a0f15cdfa371c36a56f
Author: Julian Eisel
Date: Fri Mar 11 18:10:18 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB5ff399d69a65217ea73e5a0f15cdfa371c36a56f
Let button to open HMD window close the win if it's already opened
===================================================================
M release/scripts/startup/bl_ui/properties_render_layer.py
M source/blender/editors/space_view3d/view3d_edit.c
M source/blender/makesrna/intern/rna_wm.c
M source/blender/windowmanager/intern/wm_operators.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py
index d51a5d7..2ac0913 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -225,14 +225,17 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
row.label(text="Camera Suffix:")
row.prop(rv, "camera_suffix", text="")
else:
+ wm = context.window_manager
+
running = scene.hmd_running
+ text_win = "Close HMD Window" if wm.has_hmd_window else "Open HMD Window"
text_run = "Stop Session" if running else "Start Session"
icon = 'PAUSE' if running else 'PLAY'
col = layout.column()
row = col.row(align=True)
- row.operator("wm.hmd_view_open", text="Open HMD Window")
+ row.operator("wm.hmd_view_open", text=text_win)
row.operator("view3d.hmd_session_run", text=text_run, icon=icon)
col.prop(rd, "hmd_camlock")
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 5c1fc5f..f21d8d7 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4810,6 +4810,10 @@ static void hmd_session_refresh(bContext *C, wmWindow *hmd_win, Scene *scene, HM
{
if (scene->r.scemode & R_HMD_IGNORE_ROT)
return;
+ if (!hmd_win) {
+ scene->flag &= ~SCE_HMD_RUNNING;
+ return;
+ }
View3D *v3d = CTX_wm_view3d(C);
Object *camera_ob = v3d ? v3d->camera : scene->camera;
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 51c410e..d5cda2c 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -934,6 +934,12 @@ static void rna_wmClipboard_set(PointerRNA *UNUSED(ptr), const char *value)
WM_clipboard_text_set((void *) value, false);
}
+static int rna_has_hmd_window_get(PointerRNA *ptr)
+{
+ wmWindowManager *wm = ptr->data;
+ return (wm->win_hmd != NULL);
+}
+
#ifdef WITH_PYTHON
static void rna_Operator_unregister(struct Main *bmain, StructRNA *type)
{
@@ -1974,6 +1980,10 @@ static void rna_def_windowmanager(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, "rna_wmClipboard_get", "rna_wmClipboard_length", "rna_wmClipboard_set");
RNA_def_property_ui_text(prop, "Text Clipboard", "");
+ prop = RNA_def_property(srna, "has_hmd_window", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_has_hmd_window_get", NULL);
+
RNA_api_wm(srna);
}
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index b8fe153..8ab02d4 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -5097,51 +5097,57 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
-static int wm_hmd_view_open_poll(bContext *C)
-{
- return (CTX_wm_manager(C)->win_hmd == NULL);
-}
-
static int wm_hmd_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
{
wmWindowManager *wm = CTX_wm_manager(C);
- wmWindow *win = wm_window_copy_test(C, CTX_wm_window(C));
- ScrArea *sa;
+ wmWindow *win;
- /* XXX this is assuming there's already a 3d view, we should create a new one instead */
- for (sa = win->screen->areabase.first; sa; sa = sa->next) {
- if (sa->spacetype == SPACE_VIEW3D) {
- break;
- }
+ /* close */
+ if ((win = wm->win_hmd)) {
+ wm_window_close(C, wm, win);
+ wm->win_hmd = NULL;
}
+ /* open */
+ else {
+ ScrArea *sa;
- if (!sa) {
- BLI_assert(0);
- return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
- }
+ win = wm_window_copy_test(C, CTX_wm_window(C));
+
+ /* XXX this is assuming there's already a 3d view, we should create a new one instead */
+ for (sa = win->screen->areabase.first; sa; sa = sa->next) {
+ if (sa->spacetype == SPACE_VIEW3D) {
+ break;
+ }
+ }
- wm->win_hmd = win;
- wm_window_title(wm, win, "Blender HMD View");
+ if (!sa) {
+ BLI_assert(0);
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
- wmWindow *prevwin = CTX_wm_window(C);
- ScrArea *prevsa = CTX_wm_area(C);
- ARegion *prevar = CTX_wm_region(C);
+ wm->win_hmd = win;
+ wm_window_title(wm, win, "Blender HMD View");
- CTX_wm_window_set(C, win);
- CTX_wm_area_set(C, sa);
- CTX_wm_region_set(C, NULL);
- ED_screen_state_toggle(C, win, sa, SCREENFULL);
+ wmWindow *prevwin = CTX_wm_window(C);
+ ScrArea *prevsa = CTX_wm_area(C);
+ ARegion *prevar = CTX_wm_region(C);
- ED_area_tag_redraw(sa);
+ CTX_wm_window_set(C, win);
+ CTX_wm_area_set(C, sa);
+ CTX_wm_region_set(C, NULL);
+ ED_screen_state_toggle(C, win, sa, SCREENFULL);
- /* It is possible that new layers becomes visible. */
- if (sa->spacetype == SPACE_VIEW3D) {
- DAG_on_visible_update(CTX_data_main(C), false);
- }
+ ED_area_tag_redraw(sa);
- CTX_wm_window_set(C, prevwin);
- CTX_wm_area_set(C, prevsa);
- CTX_wm_region_set(C, prevar);
+ /* It is possible that new layers becomes visible. */
+ if (sa->spacetype == SPACE_VIEW3D) {
+ DAG_on_visible_update(CTX_data_main(C), false);
+ }
+
+ CTX_wm_window_set(C, prevwin);
+ CTX_wm_area_set(C, prevsa);
+ CTX_wm_region_set(C, prevar);
+ }
return OPERATOR_FINISHED;
}
@@ -5153,7 +5159,6 @@ static void WM_OT_hmd_view_open(wmOperatorType *ot)
ot->description = "Open a separate window for a head mounted display";
ot->invoke = wm_hmd_view_open_invoke;
- ot->poll = wm_hmd_view_open_poll;
}
/* ******************************************************* */
More information about the Bf-blender-cvs
mailing list