Commit: c43443d530bff67693dc2db4efdca6307703ce61
Author: Brecht Van Lommel
Date:   Wed Jul 4 13:00:46 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBc43443d530bff67693dc2db4efdca6307703ce61

Workspaces: store view layer per main window, instead of per workspace.

It was a bit odd that the scene was stored per window but not the view
layer. The reasoning was that you would use different view layers for
different tasks. This is still possible, but it's more predictable to
switch them both explicitly, and with child window support manually
syncing the view layers between multiple windows is no longer needed
as often.

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

M       source/blender/blenkernel/BKE_layer.h
M       source/blender/blenkernel/BKE_workspace.h
M       source/blender/blenkernel/intern/context.c
M       source/blender/blenkernel/intern/layer.c
M       source/blender/blenkernel/intern/library_query.c
M       source/blender/blenkernel/intern/workspace.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/versioning_280.c
M       source/blender/blenloader/intern/writefile.c
M       source/blender/editors/include/ED_screen.h
M       source/blender/editors/render/render_internal.c
M       source/blender/editors/render/render_shading.c
M       source/blender/editors/scene/scene_edit.c
M       source/blender/editors/screen/area.c
M       source/blender/editors/screen/screen_context.c
M       source/blender/editors/screen/screen_edit.c
M       source/blender/editors/screen/workspace_edit.c
M       source/blender/editors/space_buttons/buttons_context.c
M       source/blender/editors/space_buttons/buttons_texture.c
M       source/blender/editors/space_image/space_image.c
M       source/blender/editors/space_outliner/outliner_select.c
M       source/blender/makesdna/DNA_windowmanager_types.h
M       source/blender/makesdna/DNA_workspace_types.h
M       source/blender/makesrna/intern/rna_material.c
M       source/blender/makesrna/intern/rna_wm.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/WM_toolsystem.h
M       source/blender/windowmanager/intern/wm.c
M       source/blender/windowmanager/intern/wm_draw.c
M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/intern/wm_toolsystem.c
M       source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h 
b/source/blender/blenkernel/BKE_layer.h
index 9e89033894d..db0e5f21284 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -58,7 +58,7 @@ struct WorkSpace;
 
 struct ViewLayer *BKE_view_layer_default_view(const struct Scene *scene);
 struct ViewLayer *BKE_view_layer_default_render(const struct Scene *scene);
-struct ViewLayer *BKE_view_layer_from_workspace_get(const struct Scene *scene, 
const struct WorkSpace *workspace);
+struct ViewLayer *BKE_view_layer_find(const struct Scene *scene, const char 
*layer_name);
 struct ViewLayer *BKE_view_layer_add(struct Scene *scene, const char *name);
 
 /* DEPRECATED */
diff --git a/source/blender/blenkernel/BKE_workspace.h 
b/source/blender/blenkernel/BKE_workspace.h
index 03d24ac53d1..4f4ae9f375b 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -54,23 +54,11 @@ void BKE_workspace_layout_remove(
 
 void BKE_workspace_relations_free(
         ListBase *relation_list);
-void BKE_workspace_scene_relations_free_invalid(
-        struct WorkSpace *workspace);
 
 
 /* -------------------------------------------------------------------- */
 /* General Utils */
 
-void BKE_workspace_view_layer_rename(
-        const struct Main *bmain,
-        const struct Scene *scene,
-        const char *old_name,
-        const char *new_name) ATTR_NONNULL();
-
-void BKE_workspace_view_layer_remove(
-        const struct Main *bmain,
-        const struct ViewLayer *view_layer) ATTR_NONNULL();
-
 struct WorkSpaceLayout *BKE_workspace_layout_find(
         const struct WorkSpace *workspace, const struct bScreen *screen) 
ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 struct WorkSpaceLayout *BKE_workspace_layout_find_global(
@@ -97,17 +85,6 @@ struct bScreen *BKE_workspace_active_screen_get(const struct 
WorkSpaceInstanceHo
 void            BKE_workspace_active_screen_set(
         struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, 
struct bScreen *screen) SETTER_ATTRS;
 
-struct Base *BKE_workspace_active_base_get(const struct WorkSpace *workspace, 
const struct Scene *scene);
-struct ViewLayer *BKE_workspace_view_layer_get(
-        const struct WorkSpace *workspace,
-        const struct Scene *scene) GETTER_ATTRS;
-struct ViewLayer *BKE_workspace_view_layer_exists(
-        const struct WorkSpace *workspace,
-        const struct Scene *scene) GETTER_ATTRS;
-void BKE_workspace_view_layer_set(
-        struct WorkSpace *workspace,
-        struct ViewLayer *layer,
-        struct Scene *scene) SETTER_ATTRS;
 struct ListBase *BKE_workspace_layouts_get(struct WorkSpace *workspace) 
GETTER_ATTRS;
 
 const char *BKE_workspace_layout_name_get(const struct WorkSpaceLayout 
*layout) GETTER_ATTRS;
@@ -121,11 +98,6 @@ struct WorkSpaceLayout 
*BKE_workspace_hook_layout_for_workspace_get(
 void             BKE_workspace_hook_layout_for_workspace_set(
         struct WorkSpaceInstanceHook *hook, struct WorkSpace *workspace, 
struct WorkSpaceLayout *layout) ATTR_NONNULL();
 
-/* Update / evaluate */
-void BKE_workspace_update_tagged(struct Main *bmain,
-                                 struct WorkSpace *workspace,
-                                 struct Scene *scene);
-
 bool BKE_workspace_owner_id_check(
         const struct WorkSpace *workspace, const char *owner_id) 
ATTR_NONNULL();
 
diff --git a/source/blender/blenkernel/intern/context.c 
b/source/blender/blenkernel/intern/context.c
index ee907fa496f..1aaf5e4f485 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -926,9 +926,17 @@ ViewLayer *CTX_data_view_layer(const bContext *C)
        if (ctx_data_pointer_verify(C, "view_layer", (void *)&view_layer)) {
                return view_layer;
        }
-       else {
-               return BKE_view_layer_from_workspace_get(CTX_data_scene(C), 
CTX_wm_workspace(C));
+
+       wmWindow *win = CTX_wm_window(C);
+       Scene *scene = CTX_data_scene(C);
+       if (win) {
+               view_layer = BKE_view_layer_find(scene, win->view_layer_name);
+               if (view_layer) {
+                       return view_layer;
+               }
        }
+
+       return BKE_view_layer_default_view(scene);
 }
 
 RenderEngineType *CTX_data_engine_type(const bContext *C)
diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index 22188d25df5..80329a1d328 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -42,7 +42,6 @@
 #include "BKE_layer.h"
 #include "BKE_main.h"
 #include "BKE_node.h"
-#include "BKE_workspace.h"
 #include "BKE_object.h"
 
 #include "DNA_group_types.h"
@@ -130,17 +129,22 @@ ViewLayer *BKE_view_layer_default_render(const Scene 
*scene)
        return scene->view_layers.first;
 }
 
-/**
- * Returns the ViewLayer to be used for drawing, outliner, and other context 
related areas.
- */
-ViewLayer *BKE_view_layer_from_workspace_get(const struct Scene *scene, const 
struct WorkSpace *workspace)
+/* Returns view layer with matching name, or NULL if not found. */
+ViewLayer *BKE_view_layer_find(const Scene *scene, const char *layer_name)
 {
-       return BKE_workspace_view_layer_get(workspace, scene);
+       for (ViewLayer *view_layer = scene->view_layers.first; view_layer; 
view_layer = view_layer->next) {
+               if (STREQ(view_layer->name, layer_name)) {
+                       return view_layer;
+               }
+       }
+
+       return NULL;
 }
 
 /**
- * This is a placeholder to know which areas of the code need to be addressed 
for the Workspace changes.
- * Never use this, you should either use BKE_view_layer_from_workspace_get or 
get ViewLayer explicitly.
+ * This is a placeholder to know which areas of the code need to be addressed
+ * for the Workspace changes. Never use this, you should typically get the
+ * active layer from the context or window.
  */
 ViewLayer *BKE_view_layer_context_active_PLACEHOLDER(const Scene *scene)
 {
@@ -418,9 +422,15 @@ void BKE_view_layer_rename(Main *bmain, Scene *scene, 
ViewLayer *view_layer, con
                }
        }
 
-       /* fix all the animation data and workspace which may link to this */
+       /* fix all the animation data and windows which may link to this */
        BKE_animdata_fix_paths_rename_all(NULL, "view_layers", oldname, 
view_layer->name);
-       BKE_workspace_view_layer_rename(bmain, scene, oldname, 
view_layer->name);
+
+       wmWindowManager *wm = bmain->wm.first;
+       for (wmWindow *win = wm->windows.first; win; win = win->next) {
+               if (win->scene == scene && STREQ(win->view_layer_name, 
oldname)) {
+                       STRNCPY(win->view_layer_name, view_layer->name);
+               }
+       }
 
        /* Dependency graph uses view layer name based lookups. */
        DEG_id_tag_update(&scene->id, 0);
diff --git a/source/blender/blenkernel/intern/library_query.c 
b/source/blender/blenkernel/intern/library_query.c
index 54b73dad982..93fdd3349bf 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -936,10 +936,6 @@ void BKE_library_foreach_ID_link(Main *bmain, ID *id, 
LibraryIDLinkCallback call
                                        /* allow callback to set a different 
screen */
                                        BKE_workspace_layout_screen_set(layout, 
screen);
                                }
-
-                               for (WorkSpaceSceneRelation *relation = 
workspace->scene_layer_relations.first; relation; relation = relation->next) {
-                                       CALLBACK_INVOKE(relation->scene, 
IDWALK_CB_NOP);
-                               }
                                break;
                        }
                        case ID_GD:
diff --git a/source/blender/blenkernel/intern/workspace.c 
b/source/blender/blenkernel/intern/workspace.c
index f0f57e8e56c..783baebd525 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -157,7 +157,6 @@ WorkSpace *BKE_workspace_add(Main *bmain, const char *name)
 void BKE_workspace_free(WorkSpace *workspace)
 {
        BKE_workspace_relations_free(&workspace->hook_layout_relations);
-       BLI_freelistN(&workspace->scene_layer_relations);
 
        BLI_freelistN(&workspace->owner_ids);
        BLI_freelistN(&workspace->layouts);
@@ -267,48 +266,9 @@ void BKE_workspace_relations_free(
        }
 }
 
-void BKE_workspace_scene_relations_free_invalid(
-        WorkSpace *workspace)
-{
-       for (WorkSpaceSceneRelation *relation = 
workspace->scene_layer_relations.first, *relation_next; relation; relation = 
relation_next) {
-               relation_next = relation->next;
-
-               if (relation->scene == NULL) {
-                       BLI_freelinkN(&workspace->scene_layer_relations, 
relation);
-               }
-               else if (!BLI_findstring(&relation->scene->view_layers, 
relation->view_layer, offsetof(ViewLayer, name))) {
-                       BLI_freelinkN(&workspace->scene_layer_relations, 
relation);
-               }
-       }
-}
-
 /* -------------------------------------------------------------------- */
 /* General Utils */
 
-void BKE_workspace_view_layer_rename(
-        const Main *bmain,
-        const Scene *scene,
-        const char *old_name,
-        const char *new_name)
-{
-       for (WorkSpace *workspace = bmain->workspaces.first; workspace; 
workspace = workspace->id.next) {
-               for (WorkSpaceSceneRelation *relation = 
workspace->scene_layer_relations.first; relation; relation = relation->next) {
-                       if (relation->scene == scene && 
STREQ(relation->view_layer, old_name)) {
-                               STRNCPY(relation->view_layer, new_name);
-                       }
-               }
-       }
-}
-
-void BKE_workspace_view_layer_remove(
-        const Main *bmain,
-        const ViewLayer *UNUSED(view_layer))
-{
-       for (WorkSpace *workspace = bmain->workspaces.first; workspace; 
workspace = workspace->id.next) {
-               BKE_workspace_scene_relations_free_invalid(workspace);
-       }
-}
-
 WorkSpaceLayout *BKE_workspace_layout_find(
         const WorkSpace *workspace, const bScreen *screen)
 {
@@ -429,46 +389,6 @@ void BKE_workspace_active_screen_set(WorkSpaceInstanceHook 
*hook, WorkSpace *wor
        BKE_workspace_hook_layout_for_workspace_set(hook, workspace, layout);
 }
 
-Base *BKE_workspace_active_base_get(const WorkSpace *workspace, const Scene 
*scene)
-{
-       ViewLayer *view_layer = BKE_workspace_view_layer_get(workspace, scene);
-       return view_layer->basact;
-}
-
-ViewLayer *BKE_workspace_view_layer_exists(const WorkSpace *workspace, const 
Scene *scene)
-{
-       WorkSpaceSceneRelation *relation = 
BLI_findptr(&workspace->scene_layer_relations, scene, 
offsetof(WorkSpaceSceneRelation, scene));
-       return (relation) ? BLI_findstring(&scene->view_layers, 
relation->view_layer, offsetof(ViewLayer, name)) : NULL

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to