[Bf-blender-cvs] [d8fe5e0ea1] workspaces: Support render layer per workspace

Julian Eisel noreply at git.blender.org
Fri Mar 3 12:38:20 CET 2017


Commit: d8fe5e0ea1809512584c1a50d131c3a5923b1207
Author: Julian Eisel
Date:   Fri Mar 3 12:35:56 2017 +0100
Branches: workspaces
https://developer.blender.org/rBd8fe5e0ea1809512584c1a50d131c3a5923b1207

Support render layer per workspace

We decided to keep workspace and scene render layer separate for now,
but in future they'll probably be either unified or there are going to
be ways to sync them.

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

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/BKE_workspace.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/readfile.h
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/space_action/space_action.c
M	source/blender/editors/space_buttons/space_buttons.c
M	source/blender/editors/space_graph/space_graph.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_nla/space_nla.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_outliner/space_outliner.c
M	source/blender/editors/space_time/space_time.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/workspace/screen_ops.c
M	source/blender/editors/workspace/workspace_edit.c
M	source/blender/makesdna/dna_workspace_types.h
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/makesrna/intern/rna_workspace.c
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index cb11f2b522..b0caf400ee 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -50,6 +50,7 @@ class INFO_HT_header(Header):
         if hasattr(workspace, 'object_mode'):
             act_mode_item = bpy.types.Object.bl_rna.properties['mode'].enum_items[workspace.object_mode]
             layout.operator_menu_enum("object.mode_set", "mode", text=act_mode_item.name, icon=act_mode_item.icon)
+        layout.prop_search(workspace, "render_layer", scene, "render_layers", text="Render Layer:")
 
         layout.separator()
 
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index aa1d537a28..3c4c0c8813 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -55,7 +55,7 @@ struct SceneCollection;
 struct SceneLayer;
 
 struct SceneLayer *BKE_scene_layer_render_active(const struct Scene *scene);
-struct SceneLayer *BKE_scene_layer_context_active(struct Scene *scene);
+struct SceneLayer *BKE_scene_layer_context_active(const struct Scene *scene);
 struct SceneLayer *BKE_scene_layer_add(struct Scene *scene, const char *name);
 
 bool BKE_scene_layer_remove(struct Main *bmain, struct Scene *scene, struct SceneLayer *sl);
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 8cd884e193..17e703718c 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -99,6 +99,8 @@ enum ObjectMode BKE_workspace_object_mode_get(const WorkSpace *workspace) ATTR_N
 #ifdef USE_WORKSPACE_MODE
 void            BKE_workspace_object_mode_set(WorkSpace *workspace, const enum ObjectMode mode) ATTR_NONNULL();
 #endif
+struct SceneLayer *BKE_workspace_render_layer_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
+void               BKE_workspace_render_layer_set(WorkSpace *workspace, struct SceneLayer *layer) ATTR_NONNULL(1);
 struct ListBase *BKE_workspace_layouts_get(WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 WorkSpaceLayout *BKE_workspace_new_layout_get(const WorkSpace *workspace) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 void             BKE_workspace_new_layout_set(WorkSpace *workspace, WorkSpaceLayout *layout) ATTR_NONNULL(1);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 77501c4acc..56ac1b647c 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -33,15 +33,18 @@
 #include "BLT_translation.h"
 
 #include "BKE_collection.h"
+#include "BKE_global.h"
 #include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
+#include "BKE_workspace.h"
 
 #include "DNA_ID.h"
 #include "DNA_layer_types.h"
 #include "DNA_object_types.h"
 #include "DNA_node_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_windowmanager_types.h"
 
 #include "DRW_engine.h"
 
@@ -76,11 +79,18 @@ SceneLayer *BKE_scene_layer_render_active(const Scene *scene)
  * Returns the SceneLayer to be used for drawing, outliner, and
  * other context related areas.
  */
-SceneLayer *BKE_scene_layer_context_active(Scene *scene)
+SceneLayer *BKE_scene_layer_context_active(const Scene *scene)
 {
-	/* waiting for workspace to get the layer from context*/
-	TODO_LAYER_CONTEXT;
-	return BKE_scene_layer_render_active(scene);
+	/* XXX iterating over windows here is not so nice, we could pass the workspace or the window as argument. */
+	for (wmWindowManager *wm = G.main->wm.first; wm; wm = wm->id.next) {
+		for (wmWindow *win = wm->windows.first; win; win = win->next) {
+			if (win->scene == scene) {
+				return BKE_workspace_render_layer_get(win->workspace);
+			}
+		}
+	}
+
+	return NULL;
 }
 
 /**
diff --git a/source/blender/blenkernel/intern/workspace.c b/source/blender/blenkernel/intern/workspace.c
index 37d4538cd0..de3d929fbb 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -241,6 +241,15 @@ void BKE_workspace_object_mode_set(WorkSpace *workspace, const ObjectMode mode)
 }
 #endif
 
+SceneLayer *BKE_workspace_render_layer_get(const WorkSpace *workspace)
+{
+	return workspace->render_layer;
+}
+void BKE_workspace_render_layer_set(WorkSpace *workspace, SceneLayer *layer)
+{
+	workspace->render_layer = layer;
+}
+
 ListBase *BKE_workspace_layouts_get(WorkSpace *workspace)
 {
 	return &workspace->layouts;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d26cd92d34..f71b5511c9 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -8627,11 +8627,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
 
 static void do_versions_after_linking(FileData *fd, Main *main)
 {
-	blo_do_versions_after_linking_270(fd, main);
 //	printf("%s for %s (%s), %d.%d\n", __func__, main->curlib ? main->curlib->name : main->name,
 //	       main->curlib ? "LIB" : "MAIN", main->versionfile, main->subversionfile);
 	do_versions_after_linking_270(main);
-	do_versions_after_linking_280(main);
+	do_versions_after_linking_280(fd, main);
 }
 
 static void lib_link_all(FileData *fd, Main *main)
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index 446cbbc744..e2480b0233 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -173,9 +173,8 @@ void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *
 void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *main);
 void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *main);
 
-void blo_do_versions_after_linking_270(struct FileData *fd, struct Main *main);
 void do_versions_after_linking_270(struct Main *main);
-void do_versions_after_linking_280(struct Main *main);
+void do_versions_after_linking_280(struct FileData *fd, struct Main *main);
 
 #endif
 
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 8dfebff36f..12045dfdb8 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -69,7 +69,6 @@
 #include "BKE_scene.h"
 #include "BKE_sequencer.h"
 #include "BKE_screen.h"
-#include "BKE_workspace.h"
 #include "BKE_tracking.h"
 #include "BKE_gpencil.h"
 
@@ -249,53 +248,6 @@ static void do_version_hue_sat_node(bNodeTree *ntree, bNode *node)
 	node->storage = NULL;
 }
 
-/**
- * \brief Before lib-link versioning for new workspace design.
- *
- * Adds a workspace for each screen of the old file and adds the needed workspace-layout to wrap the screen.
- * Rest of the conversion is done in #do_version_workspaces_after_lib_link.
- *
- * Note that some of the created workspaces might be deleted again in case of reading the default startup.blend.
- */
-static void do_version_workspaces_before_lib_link(Main *main)
-{
-	BLI_assert(BLI_listbase_is_empty(&main->workspaces));
-
-	for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
-		WorkSpace *ws = BKE_workspace_add(main, screen->id.name + 2);
-		WorkSpaceLayout *layout = BKE_workspace_layout_add(ws, screen);
-
-		BKE_workspace_active_layout_set(ws, layout);
-
-		/* For compatibility, the workspace should be activated that represents the active
-		 * screen of the old file. This is done in blo_do_versions_after_linking_270. */
-	}
-}
-
-/**
- * \brief After lib-link versioning for new workspace design.
- *
- *  *  Active screen isn't stored directly in window anymore, but in the active workspace.
- *     We already created a new workspace for each screen in #do_version_workspaces_before_lib_link,
- *     here we need to find and activate the workspace that contains the active screen of the old file.
- *  *  Active scene isn't stored in screen anymore, but in window.
- */
-static void do_version_workspaces_after_lib_link(Main *main)
-{
-	for (wmWindowManager *wm = main->wm.first; wm; wm = wm->id.next) {
-		for (wmWindow *win = wm->windows.first; win; win = win->next) {
-			bScreen *screen = win->screen;
-
-			win->workspace = BLI_findstring(&main->workspaces, screen->id.name + 2, offsetof(ID, name) + 2);
-			win->scene = screen->scene;
-
-			/* Deprecated from now on! */
-			win->screen = NULL;
-			screen->scene = NULL;
-		}
-	}
-}
-
 void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 {
 	if (!MAIN_VERSION_ATLEAST(main, 270, 0)) {
@@ -1670,22 +1622,6 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
 			}
 		}
 	}
-
-	{
-		/* New workspace design */
-		if (!DNA_struct_find(fd->filesdna, "WorkSpace")) {
-			do_version_workspaces_before_lib_link(main);
-		}
-	}
-}
-
-void blo_do_versions_after_linking_270(FileData *fd, Main *main)
-{
-	{
-		if (!DNA_struct_find(fd->filesdna, "WorkSpace")) {
-			do_version_workspaces_after_lib_link(main);
-		}
-	}
 }
 
 void do_versions_after_linking_270(Main *main)
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index f63d20f3a3..432f10275a 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -39,6 +39,7 @@
 #include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_scene.h"
+#include "BKE_workspace.h"
 
 #include "BLI_listbase.h"
 #include "BLI_string.h"
@@ -48,7 +49,55 @@
 
 #include "MEM_guardedalloc.h"
 
-void do_versions_after_linking_280(Main *main)
+/**
+ * \brief Before lib-link versioning for new workspace design.
+ *
+ * Adds a workspace for each screen of the old file and adds the needed workspace-layout to wrap the screen.
+ * Rest of the conversion is done in #do_version_workspaces_after_lib_link.
+ *
+ * Note that some of the created workspaces might be deleted again in case of reading the default startup.blend.
+ */
+static void do_version_workspaces_before_lib_link(Main *main)
+{
+	BLI_assert(BLI_listbase_is_empty(&main->wo

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list