[Bf-blender-cvs] [cbaaeb8] workspaces: Deprecate Screen.scene completely

Julian Eisel noreply at git.blender.org
Sat Dec 31 02:00:54 CET 2016


Commit: cbaaeb8d9b6c95e2a72b1cf0e5bae84959e92108
Author: Julian Eisel
Date:   Sat Dec 31 01:45:59 2016 +0100
Branches: workspaces
https://developer.blender.org/rBcbaaeb8d9b6c95e2a72b1cf0e5bae84959e92108

Deprecate Screen.scene completely

Removing a custom transform orientation is a bit broken right now because we don't know which scene is visible in hidden 3D Views. Think I know how to fix this, but want to go on with other stuff first.

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

M	source/blender/blenkernel/BKE_screen.h
M	source/blender/blenkernel/intern/blendfile.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/editors/transform/transform_orientations.c
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_window.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 9b9d757..07f9edd 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -307,8 +307,7 @@ unsigned int BKE_screen_view3d_layer_all(const struct bScreen *sc) ATTR_WARN_UNU
 
 void BKE_screen_view3d_sync(struct View3D *v3d, struct Scene *scene);
 void BKE_screen_view3d_scene_sync(struct bScreen *sc, struct Scene *scene);
-void BKE_screen_view3d_twmode_remove(struct View3D *v3d, const int i);
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, struct Scene *scene, const int i);
+void BKE_screen_view3d_twmode_remove(struct bScreen *screen, const int twmode);
 void BKE_screen_gpu_fx_validate(struct GPUFXSettings *fx_settings);
 bool BKE_screen_is_fullscreen_area(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool BKE_screen_is_used(const struct bScreen *screen) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index d27483d..9a75702 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -317,11 +317,9 @@ static void setup_app_data(
 
 		if (wm) {
 			for (wmWindow *win = wm->windows.first; win; win = win->next) {
-				bScreen *screen = BKE_workspace_active_screen_get(win->workspace);
-
-				if (screen && screen->scene) /* zealous check... */
-					if (screen->scene != curscene)
-						BKE_scene_set_background(G.main, screen->scene);
+				if (win->scene && win->scene != curscene) {
+					BKE_scene_set_background(G.main, win->scene);
+				}
 			}
 		}
 	}
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 77e12fb..91f0d81 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -611,31 +611,24 @@ void BKE_screen_view3d_scene_sync(bScreen *sc, Scene *scene)
 	}
 }
 
-void BKE_screen_view3d_twmode_remove(View3D *v3d, const int i)
-{
-	const int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
-	if (selected_index == i) {
-		v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global	*/
-	}
-	else if (selected_index > i) {
-		v3d->twmode--;
-	}
-}
-
-void BKE_screen_view3d_main_twmode_remove(ListBase *screen_lb, Scene *scene, const int i)
+/**
+ * TODO hrmpf... stupid issue: Removing a custom transform orientation only updates View3D orientations
+ * in visible workspaces/screens. If an invisible one uses it, it keeps using the removed orientation.
+ * Need to solve that somehow... Maybe store TranformOrientation * in View3D?
+ */
+void BKE_screen_view3d_twmode_remove(bScreen *screen, const int twmode)
 {
-	bScreen *sc;
+	for (ScrArea *area = screen->areabase.first; area; area = area->next) {
+		for (SpaceLink *sl = area->spacedata.first; sl; sl = sl->next) {
+			if (sl->spacetype == SPACE_VIEW3D) {
+				View3D *v3d = (View3D *)sl;
+				const int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
 
-	for (sc = screen_lb->first; sc; sc = sc->id.next) {
-		if (sc->scene == scene) {
-			ScrArea *sa;
-			for (sa = sc->areabase.first; sa; sa = sa->next) {
-				SpaceLink *sl;
-				for (sl = sa->spacedata.first; sl; sl = sl->next) {
-					if (sl->spacetype == SPACE_VIEW3D) {
-						View3D *v3d = (View3D *)sl;
-						BKE_screen_view3d_twmode_remove(v3d, i);
-					}
+				if (selected_index == twmode) {
+					v3d->twmode = V3D_MANIP_GLOBAL; /* fallback to global	*/
+				}
+				else if (selected_index > twmode) {
+					v3d->twmode--;
 				}
 			}
 		}
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 1d6a392..f063689 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -57,6 +57,8 @@
 
 #include "ED_armature.h"
 
+#include "WM_api.h"
+
 #include "transform.h"
 
 /* *********************** TransSpace ************************** */
@@ -352,7 +354,9 @@ void BIF_removeTransformOrientation(bContext *C, TransformOrientation *target)
 
 	if (i != -1) {
 		Main *bmain = CTX_data_main(C);
-		BKE_screen_view3d_main_twmode_remove(&bmain->screen, scene, i);
+		wmWindowManager *wm = bmain->wm.first;
+
+		WM_windows_scene_twmode_remove(&wm->windows, scene, i);
 		BLI_freelinkN(transform_spaces, target);
 	}
 }
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 0adde23..29467bf 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -30,6 +30,7 @@
 #ifndef __DNA_SCREEN_TYPES_H__
 #define __DNA_SCREEN_TYPES_H__
 
+#include "DNA_defs.h"
 #include "DNA_listBase.h"
 #include "DNA_view2d_types.h"
 #include "DNA_vec_types.h"
@@ -53,10 +54,9 @@ typedef struct bScreen {
 	ListBase edgebase;
 	ListBase areabase;
 	ListBase regionbase;				/* screen level regions (menus), runtime only */
-	
-	struct Scene *scene;
-	struct Scene *newscene;				/* temporary when switching */
-	
+
+	struct Scene *scene DNA_DEPRECATED;
+
 	short winid;						/* winid from WM, starts with 1 TODO will have to rework this */
 	short redraws_flag;					/* user-setting for which editors get redrawn during anim playback (used to be time->redraws) */
 
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index ec26eba..81d9f41 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -404,7 +404,7 @@ static void rna_Space_view2d_sync_update(Main *UNUSED(bmain), Scene *UNUSED(scen
 
 static PointerRNA rna_CurrentOrientation_get(PointerRNA *ptr)
 {
-	Scene *scene = ((bScreen *)ptr->id.data)->scene;
+	Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, ptr->id.data);
 	View3D *v3d = (View3D *)ptr->data;
 
 	if (v3d->twmode < V3D_MANIP_CUSTOM)
@@ -426,7 +426,7 @@ EnumPropertyItem *rna_TransformOrientation_itemf(bContext *C, PointerRNA *ptr, P
 	RNA_enum_items_add(&item, &totitem, transform_orientation_items);
 
 	if (ptr->type == &RNA_SpaceView3D)
-		scene = ((bScreen *)ptr->id.data)->scene;
+		scene = WM_windows_scene_get_from_screen(G.main->wm.first, ptr->id.data);
 	else
 		scene = CTX_data_scene(C);  /* can't use scene from ptr->id.data because that enum is also used by operators */
 
@@ -697,17 +697,13 @@ static void rna_RegionView3D_view_matrix_set(PointerRNA *ptr, const float *value
 
 static int rna_SpaceView3D_viewport_shade_get(PointerRNA *ptr)
 {
-#if 0
-	Scene *scene = ((bScreen *)ptr->id.data)->scene;
+	Scene *scene = WM_windows_scene_get_from_screen(G.main->wm.first, ptr->id.data);
 	RenderEngineType *type = RE_engines_find(scene->r.engine);
-#endif
 	View3D *v3d = (View3D *)ptr->data;
 	int drawtype = v3d->drawtype;
 
-#if 0
 	if (drawtype == OB_RENDER && !(type && type->view_draw))
 		return OB_SOLID;
-#endif
 
 	return drawtype;
 }
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 809f086..834f1e2 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -102,6 +102,8 @@ int			WM_window_pixels_y		(struct wmWindow *win);
 bool		WM_window_is_fullscreen	(struct wmWindow *win);
 
 void WM_windows_scene_data_sync(const ListBase *win_lb, struct Scene *scene) ATTR_NONNULL();
+void WM_windows_scene_twmode_remove(const ListBase *win_lb, struct Scene *scene, const int twmode) ATTR_NONNULL();
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 
 struct Scene *WM_window_get_active_scene(const struct wmWindow *win) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void          WM_window_set_active_scene(struct Main *bmain, struct bContext *C, struct wmWindow *win,
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 1d93033..89e8064 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1749,6 +1749,26 @@ void WM_windows_scene_data_sync(const ListBase *win_lb, Scene *scene)
 	}
 }
 
+void WM_windows_scene_twmode_remove(const ListBase *win_lb, Scene *scene, const int twmode)
+{
+	for (wmWindow *win = win_lb->first; win; win = win->next) {
+		if (WM_window_get_active_scene(win) == scene) {
+			BKE_screen_view3d_twmode_remove(WM_window_get_active_screen(win), twmode);
+		}
+	}
+}
+
+Scene *WM_windows_scene_get_from_screen(const wmWindowManager *wm, const bScreen *screen)
+{
+	for (wmWindow *win = wm->windows.first; win; win = win->next) {
+		if (WM_window_get_active_screen(win) == screen) {
+			return WM_window_get_active_scene(win);
+		}
+	}
+
+	return NULL;
+}
+
 Scene *WM_window_get_active_scene(const wmWindow *win)
 {
 	return win->scene;
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 429cb25..8d749d7 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -308,6 +308,7 @@ struct MenuType *WM_menutype_find(const char *idname, bool quiet) RET_NULL
 void WM_operator_stack_clear(struct wmWindowManager *wm) RET_NONE
 void WM_operator_handlers_clear(wmWindowManager *wm, struct wmOperatorType *ot) RET_NONE
 void WM_windows_scene_data_sync(const struct ListBase *win_lb, struct Scene *scene) RET_NONE
+struct Scene *WM_windows_scene_get_from_screen(const struct wmWindowManager *wm, const struct bScreen *screen) RET_NULL
 struct bScreen *WM_window_get_active_screen(const struct wmWindow *win) RET_NULL
 struct Scene *WM_window_get_active_scene(const struct wmWindow *win) RET_NULL
 void WM_window_set_active_scene(struct Main *bmain, struct bContext *C, struct wmWindow *win, struct Scene *scene_new) RET_NONE




More information about the Bf-blender-cvs mailing list