[Bf-blender-cvs] [cd54183679] temp-workspace-multi-window: Wrap screen-layout data into own struct

Julian Eisel noreply at git.blender.org
Mon Mar 6 18:17:02 CET 2017


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




More information about the Bf-blender-cvs mailing list