[Bf-blender-cvs] [164a1af] HMD_viewport: Use a more common way to open the HMD window

Julian Eisel noreply at git.blender.org
Wed Mar 16 20:19:07 CET 2016


Commit: 164a1af8cdb8a54caf873c74d3792fee95914803
Author: Julian Eisel
Date:   Wed Mar 16 20:14:49 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB164a1af8cdb8a54caf873c74d3792fee95914803

Use a more common way to open the HMD window

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

M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_operators.c
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 8386ce2..6ce9da7 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -95,7 +95,7 @@ bool		WM_window_is_fullscreen	(struct wmWindow *win);
 enum {
 	WM_WINDOW_RENDER = 1,
 	WM_WINDOW_USERPREFS,
-	// WM_WINDOW_FILESEL // UNUSED
+	WM_WINDOW_HMD,
 };
 
 struct wmWindow	*WM_window_open(struct bContext *C, const struct rcti *rect);
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 8ab02d4..134f1aa 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -5099,6 +5099,7 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
 
 static int wm_hmd_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
 {
+	wmWindow *prevwin = CTX_wm_window(C);
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win;
 
@@ -5109,44 +5110,10 @@ static int wm_hmd_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const wm
 	}
 	/* open */
 	else {
-		ScrArea *sa;
-
-		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;
-			}
-		}
-
-		if (!sa) {
-			BLI_assert(0);
-			return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
-		}
-
+		rcti rect = {0, prevwin->sizex, 0, prevwin->sizey};
+		win = WM_window_open_temp(C, &rect, WM_WINDOW_HMD);
+		ED_screen_state_toggle(C, win, win->screen->areabase.first, SCREENFULL);
 		wm->win_hmd = win;
-		wm_window_title(wm, win, "Blender HMD View");
-
-		wmWindow *prevwin = CTX_wm_window(C);
-		ScrArea *prevsa = CTX_wm_area(C);
-		ARegion *prevar = CTX_wm_region(C);
-
-		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);
-
-		ED_area_tag_redraw(sa);
-
-		/* 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;
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index fb2a8e8..6fa7993 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -619,7 +619,7 @@ wmWindow *WM_window_open(bContext *C, const rcti *rect)
  * Uses `screen->temp` tag to define what to do, currently it limits
  * to only one "temp" window for render out, preferences, filewindow, etc...
  *
- * \param type: WM_WINDOW_RENDER, WM_WINDOW_USERPREFS...
+ * \param type: WM_WINDOW_RENDER, WM_WINDOW_USERPREFS, WM_WINDOW_HMD...
  * \return the window or NULL.
  */
 wmWindow *WM_window_open_temp(bContext *C, const rcti *rect_init, int type)
@@ -682,25 +682,30 @@ wmWindow *WM_window_open_temp(bContext *C, const rcti *rect_init, int type)
 	/* ensure it shows the right spacetype editor */
 	sa = win->screen->areabase.first;
 	CTX_wm_area_set(C, sa);
-	
-	if (type == WM_WINDOW_RENDER) {
-		ED_area_newspace(C, sa, SPACE_IMAGE, false);
-	}
-	else {
-		ED_area_newspace(C, sa, SPACE_USERPREF, false);
+
+	int spacetype;
+	switch (type) {
+		case WM_WINDOW_RENDER:
+			spacetype = SPACE_IMAGE;
+			title = IFACE_("Blender Render");
+			break;
+		case WM_WINDOW_USERPREFS:
+			spacetype = SPACE_IMAGE;
+			title = IFACE_("Blender User Preferences");
+			break;
+		case WM_WINDOW_HMD:
+			spacetype = SPACE_VIEW3D;
+			title = IFACE_("HMD View");
+			break;
+		default:
+			title = IFACE_("Blender");
+			BLI_assert(0);
+			break;
 	}
-	
+	ED_area_newspace(C, sa, spacetype, false);
+
 	ED_screen_set(C, win->screen);
 	ED_screen_refresh(CTX_wm_manager(C), win); /* test scale */
-	
-	if (sa->spacetype == SPACE_IMAGE)
-		title = IFACE_("Blender Render");
-	else if (ELEM(sa->spacetype, SPACE_OUTLINER, SPACE_USERPREF))
-		title = IFACE_("Blender User Preferences");
-	else if (sa->spacetype == SPACE_FILE)
-		title = IFACE_("Blender File View");
-	else
-		title = "Blender";
 
 	if (win->ghostwin) {
 		GHOST_SetTitle(win->ghostwin, title);




More information about the Bf-blender-cvs mailing list