Commit: cd54183679c9eb98fee36ddc53af763729259267
Author: Julian Eisel
Date:   Mon Mar 6 18:16:07 2017 +0100
Branches: temp-workspace-multi-window
https://developer.blender.org/rBcd54183679c9eb98fee36ddc53af763729259267

Wrap screen-layout data into own struct

Makes it easier to pass around.

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

M       source/blender/blenkernel/BKE_workspace.h
M       source/blender/blenkernel/intern/workspace.c
M       source/blender/blenloader/intern/versioning_280.c
M       source/blender/editors/include/ED_screen.h
M       source/blender/editors/workspace/screen_edit.c
M       source/blender/editors/workspace/screen_ops.c
M       source/blender/editors/workspace/workspace_edit.c
M       source/blender/editors/workspace/workspace_layout_edit.c
M       source/blender/makesdna/DNA_screen_types.h
M       source/blender/makesdna/dna_workspace_types.h
M       source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/blenkernel/BKE_workspace.h 
b/source/blender/blenkernel/BKE_workspace.h
index ac8bb9875c..e6e416320a 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -31,6 +31,7 @@
 struct bScreen;
 struct ListBase;
 struct Main;
+struct ScreenLayoutData;
 struct TransformOrientation;
 struct WorkSpace;
 
@@ -60,7 +61,7 @@ void BKE_workspace_remove(WorkSpace *workspace, struct Main 
*bmain);
 WorkSpaceLayout *BKE_workspace_layout_add_from_type(WorkSpace *workspace, 
WorkSpaceLayoutType *type,
                                                     struct bScreen *screen) 
ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT;
 WorkSpaceLayoutType *BKE_workspace_layout_type_add(WorkSpace *workspace, const 
char *name,
-                                                   struct ListBase *vertbase, 
struct ListBase *areabase) ATTR_NONNULL();
+                                                   struct ScreenLayoutData 
layout_blueprint) ATTR_NONNULL();
 void BKE_workspace_layout_remove(WorkSpace *workspace, WorkSpaceLayout 
*layout, struct Main *bmain) ATTR_NONNULL();
 WorkSpaceHook *BKE_workspace_hook_new(void) ATTR_WARN_UNUSED_RESULT;
 void BKE_workspace_hook_delete(struct Main *bmain, WorkSpaceHook *hook) 
ATTR_NONNULL();
@@ -126,8 +127,9 @@ WorkSpaceLayoutType 
*BKE_workspace_active_layout_type_get(const WorkSpace *works
 void                 BKE_workspace_active_layout_type_set(WorkSpace 
*workspace, WorkSpaceLayoutType *layout_type) SETTER_ATTRS;
 struct ListBase *BKE_workspace_layout_types_get(WorkSpace *workspace) 
GETTER_ATTRS;
 const char      *BKE_workspace_layout_type_name_get(const WorkSpaceLayoutType 
*layout_type) GETTER_ATTRS;
-struct ListBase *BKE_workspace_layout_type_vertbase_get(const 
WorkSpaceLayoutType *type) GETTER_ATTRS;
-struct ListBase *BKE_workspace_layout_type_areabase_get(const 
WorkSpaceLayoutType *type) GETTER_ATTRS;
+struct ScreenLayoutData 
BKE_workspace_layout_type_blueprint_get(WorkSpaceLayoutType *type) GETTER_ATTRS;
+struct ListBase *BKE_workspace_layout_type_vertbase_get(WorkSpaceLayoutType 
*type) GETTER_ATTRS;
+struct ListBase *BKE_workspace_layout_type_areabase_get(WorkSpaceLayoutType 
*type) GETTER_ATTRS;
 WorkSpaceLayoutType *BKE_workspace_layout_type_next_get(WorkSpaceLayoutType 
*layout_type) GETTER_ATTRS;
 WorkSpaceLayout *BKE_workspace_new_layout_get(const WorkSpace *workspace) 
GETTER_ATTRS;
 void             BKE_workspace_new_layout_set(WorkSpace *workspace, 
WorkSpaceLayout *layout) SETTER_ATTRS;
diff --git a/source/blender/blenkernel/intern/workspace.c 
b/source/blender/blenkernel/intern/workspace.c
index 3250e7acad..12714217db 100644
--- a/source/blender/blenkernel/intern/workspace.c
+++ b/source/blender/blenkernel/intern/workspace.c
@@ -114,14 +114,13 @@ WorkSpaceLayout 
*BKE_workspace_layout_add_from_type(WorkSpace *workspace, WorkSp
        return layout;
 }
 
-WorkSpaceLayoutType *BKE_workspace_layout_type_add(WorkSpace *workspace, const 
char *name,
-                                                   ListBase *vertbase, 
ListBase *areabase)
+WorkSpaceLayoutType *BKE_workspace_layout_type_add(
+        WorkSpace *workspace, const char *name, ScreenLayoutData 
layout_blueprint)
 {
        WorkSpaceLayoutType *layout_type = MEM_mallocN(sizeof(*layout_type), 
__func__);
 
        layout_type->name = name; /* XXX should probably copy name */
-       layout_type->vertbase = vertbase;
-       layout_type->areabase = areabase;
+       layout_type->layout_blueprint = layout_blueprint;
        BLI_addhead(&workspace->layout_types, layout_type);
 
        return layout_type;
@@ -157,7 +156,8 @@ void BKE_workspace_hook_delete(Main *bmain, WorkSpaceHook 
*hook)
 void BKE_workspace_change_prepare(Main *bmain, WorkSpaceHook *workspace_hook, 
WorkSpace *workspace_new)
 {
        for (WorkSpaceLayoutType *type = workspace_new->layout_types.first; 
type; type = type->next) {
-               bScreen *screen = BKE_screen_create_from_screen_data(bmain, 
type->vertbase, type->areabase, type->name);
+               bScreen *screen = BKE_screen_create_from_screen_data(bmain, 
&type->layout_blueprint.vertbase,
+                                                                    
&type->layout_blueprint.areabase, type->name);
                WorkSpaceLayout *layout = 
BKE_workspace_layout_add_from_type(workspace_new, type, screen);
 
                BLI_addtail(&workspace_hook->layouts, layout);
@@ -345,13 +345,18 @@ const char *BKE_workspace_layout_type_name_get(const 
WorkSpaceLayoutType *layout
        return layout_type->name;
 }
 
-ListBase *BKE_workspace_layout_type_vertbase_get(const WorkSpaceLayoutType 
*type)
+ScreenLayoutData BKE_workspace_layout_type_blueprint_get(WorkSpaceLayoutType 
*type)
 {
-       return type->vertbase;
+       return type->layout_blueprint;
 }
-ListBase *BKE_workspace_layout_type_areabase_get(const WorkSpaceLayoutType 
*type)
+
+ListBase *BKE_workspace_layout_type_vertbase_get(WorkSpaceLayoutType *type)
+{
+       return &type->layout_blueprint.vertbase;
+}
+ListBase *BKE_workspace_layout_type_areabase_get(WorkSpaceLayoutType *type)
 {
-       return type->areabase;
+       return &type->layout_blueprint.areabase;
 }
 
 WorkSpaceLayoutType *BKE_workspace_layout_type_next_get(WorkSpaceLayoutType 
*layout_type)
diff --git a/source/blender/blenloader/intern/versioning_280.c 
b/source/blender/blenloader/intern/versioning_280.c
index fe4d6eeee0..b7f86dba2b 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -64,8 +64,9 @@ static void do_version_workspaces_before_lib_link(Main *main)
 
        for (bScreen *screen = main->screen.first; screen; screen = 
screen->id.next) {
                WorkSpace *ws = BKE_workspace_add(main, screen->id.name + 2);
-               WorkSpaceLayoutType *layout_type = 
BKE_workspace_layout_type_add(ws, screen->id.name + 2,
-                                                                               
 &screen->vertbase, &screen->areabase);
+               WorkSpaceLayoutType *layout_type = 
BKE_workspace_layout_type_add(ws, screen->id.name + 2, (ScreenLayoutData){
+                                                                               
     .vertbase = screen->vertbase,
+                                                                               
     .areabase = screen->areabase});
 
                BKE_workspace_active_layout_type_set(ws, layout_type);
 
diff --git a/source/blender/editors/include/ED_screen.h 
b/source/blender/editors/include/ED_screen.h
index 6c83ec458f..a81f271f05 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -131,7 +131,7 @@ bool ED_workspace_change(struct bContext *C, struct 
wmWindowManager *wm, struct
                          struct WorkSpace *ws_new) ATTR_NONNULL();
 struct WorkSpace *ED_workspace_duplicate(struct WorkSpace *workspace_old, 
struct Main *bmain, struct wmWindow *win);
 void ED_workspace_layout_add(struct WorkSpace *workspace, ListBase *windows, 
const char *name,
-                             ListBase *vertbase, ListBase *areabase) 
ATTR_NONNULL();
+                             ScreenLayoutData layout_blueprint) ATTR_NONNULL();
 struct WorkSpaceLayout *ED_workspace_layout_duplicate(struct WorkSpace 
*workspace,
                                                       const struct 
WorkSpaceLayout *layout_old,
                                                       struct wmWindowManager 
*wm) ATTR_NONNULL();
diff --git a/source/blender/editors/workspace/screen_edit.c 
b/source/blender/editors/workspace/screen_edit.c
index 0a7f10b3e7..c4d33e9ca5 100644
--- a/source/blender/editors/workspace/screen_edit.c
+++ b/source/blender/editors/workspace/screen_edit.c
@@ -1542,7 +1542,8 @@ ScrArea *ED_screen_state_toggle(bContext *C, wmWindow 
*win, ScrArea *sa, const s
                oldscreen->state = state;
                BLI_snprintf(newname, sizeof(newname), "%s-%s", 
oldscreen->id.name + 2, "nonnormal");
 
-               ED_workspace_layout_add(workspace, &wm->windows, newname, 
&oldscreen->vertbase, &oldscreen->areabase);
+               ED_workspace_layout_add(workspace, &wm->windows, newname, 
(ScreenLayoutData){
+                                           .vertbase = oldscreen->vertbase, 
.areabase = oldscreen->areabase});
                layout_new = BKE_workspace_active_layout_get(workspace);
 
                sc = BKE_workspace_layout_screen_get(layout_new);
diff --git a/source/blender/editors/workspace/screen_ops.c 
b/source/blender/editors/workspace/screen_ops.c
index fd33be24a2..03a4db1aef 100644
--- a/source/blender/editors/workspace/screen_ops.c
+++ b/source/blender/editors/workspace/screen_ops.c
@@ -1025,7 +1025,8 @@ static int area_dupli_invoke(bContext *C, wmOperator *op, 
const wmEvent *event)
        WM_window_set_active_workspace(newwin, workspace_new);
 
        /* allocs new screen and adds to newly created window, using window 
size */
-       ED_workspace_layout_add(workspace_new, &wm->windows, sc->id.name + 2, 
&sc->vertbase, &sc->areabase);
+       ED_workspace_layout_add(workspace_new, &wm->windows, sc->id.name + 2, 
(ScreenLayoutData){
+                                   .vertbase = sc->vertbase, .areabase = 
sc->areabase});
        layout_new = BKE_workspace_active_layout_get(workspace_new);
        newsc = BKE_workspace_layout_screen_get(layout_new);
        WM_window_set_active_layout(newwin, layout_new);
diff --git a/source/blender/editors/workspace/workspace_edit.c 
b/source/blender/editors/workspace/workspace_edit.c
index 2d9144128f..1955300c9e 100644
--- a/source/blender/editors/workspace/workspace_edit.c
+++ b/source/blender/editors/workspace/workspace_edit.c
@@ -161,10 +161,10 @@ WorkSpace *ED_workspace_duplicate(WorkSpace 
*workspace_old, Main *bmain, wmWindo
        WorkSpaceLayoutType *layout_type_act_new = NULL;
        BKE_workspace_layout_type_iter_begin(layout_type_old, 
layout_types_old->first)
        {
+               ScreenLayoutData layout_blueprint = 
BKE_workspace_layout_type_blueprint_get(layout_type_old);
                const char *name = 
BKE_workspace_layout_type_name_get(layout_type_old);
-               ListBase *vertbase = 
BKE_workspace_layout_type_vertbase_get(layout_type_act_old);
-               ListBase *areabase = 
BKE_workspace_layout_type_areabase_get(layout_type_act_old);
-               WorkSpaceLayoutType *layout_type_new = 
BKE_workspace_layout_type_add(workspace_new, name, vertbase, areabase);
+               /* XXX should duplicate the listbases */
+               WorkSpaceLayoutType *layout_type_new = 
BKE_workspace_layout_type_add(workspace_new, name, layout_blueprint);
 
                if (layout_type_old == layout_type_act_old) {
                        la

@@ 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