[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