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