[Bf-blender-cvs] [9571a2b27fe] topbar: Add ScrAreaMap struct wrapping screen-areas, -edges and -vertices

Julian Eisel noreply at git.blender.org
Thu Apr 19 15:24:33 CEST 2018


Commit: 9571a2b27febc798562856baa1e13ad2afc45cb5
Author: Julian Eisel
Date:   Thu Apr 19 12:42:58 2018 +0200
Branches: topbar
https://developer.blender.org/rB9571a2b27febc798562856baa1e13ad2afc45cb5

Add ScrAreaMap struct wrapping screen-areas, -edges and -vertices

Global areas will need to use the edge and vertex lists in future too.
Once the topbar branch is merged, we can also change bScreen to use this
struct, avoiding code duplication.

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

M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/screen/area.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/makesdna/DNA_windowmanager_types.h
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index f459773f1ef..119a8418677 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6909,8 +6909,8 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
 		/* we need to restore a pointer to this later when reading workspaces, so store in global oldnew-map */
 		oldnewmap_insert(fd->globmap, hook, win->workspace_hook, 0);
 
-		link_list(fd, &win->global_areas);
-		for (ScrArea *area = win->global_areas.first; area; area = area->next) {
+		link_list(fd, &win->global_areas.areabase);
+		for (ScrArea *area = win->global_areas.areabase.first; area; area = area->next) {
 			direct_link_area(fd, area);
 		}
 
@@ -6986,7 +6986,7 @@ static void lib_link_windowmanager(FileData *fd, Main *main)
 				/* deprecated, but needed for versioning (will be NULL'ed then) */
 				win->screen = newlibadr(fd, NULL, win->screen);
 	
-				for (ScrArea *area = win->global_areas.first; area; area = area->next) {
+				for (ScrArea *area = win->global_areas.areabase.first; area; area = area->next) {
 					lib_link_area(fd, &wm->id, area);
 				}
 			}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 0f7a4b7e6ae..75a602ac428 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2967,7 +2967,7 @@ static void write_windowmanager(WriteData *wd, wmWindowManager *wm)
 		writestruct(wd, DATA, WorkSpaceInstanceHook, 1, win->workspace_hook);
 		writestruct(wd, DATA, Stereo3dFormat, 1, win->stereo3d_format);
 
-		write_global_areas(wd, &win->global_areas);
+		write_global_areas(wd, &win->global_areas.areabase);
 
 		/* data is written, clear deprecated data again */
 		win->screen = NULL;
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 2007b9a8cbc..71d2847bb6c 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -136,9 +136,11 @@ int     ED_region_global_size_y(void);
 
 /** Iterate over all areas visible in the screen (screen as in everything visible in the window, not just bScreen) */
 #define ED_screen_areas_iter(win, screen, area_name)     \
-	for (ScrArea *area_name = (win)->global_areas.first ? (win)->global_areas.first : screen->areabase.first; \
+	for (ScrArea *area_name = (win)->global_areas.areabase.first ? \
+	                                  (win)->global_areas.areabase.first : \
+	                                  screen->areabase.first; \
 	     area_name != NULL;                              \
-	     area_name = (area_name == (win)->global_areas.last) ? (screen)->areabase.first : area_name->next)
+	     area_name = (area_name == (win)->global_areas.areabase.last) ? (screen)->areabase.first : area_name->next)
 
 /* screens */
 void    ED_screens_initialize(struct wmWindowManager *wm);
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index c641499f39f..cd747ee225f 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -2258,7 +2258,7 @@ int ED_area_global_size_y(const wmWindow *win, const ScrArea *area)
 
 bool ED_area_is_global(const wmWindow *win, const ScrArea *area)
 {
-	return BLI_findindex(&win->global_areas, area) != -1;
+	return BLI_findindex(&win->global_areas.areabase, area) != -1;
 }
 
 /**
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index fbca5eda5a5..3b5bd54344d 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -686,7 +686,7 @@ static void screen_vertices_scale(
 
 	/* Global areas have a fixed size that only changes with the DPI. Here we ensure that exactly this size is set.
 	 * TODO Assumes global area to be top-aligned. Should be made more generic */
-	for (ScrArea *area = win->global_areas.first; area; area = area->next) {
+	for (ScrArea *area = win->global_areas.areabase.first; area; area = area->next) {
 		/* width */
 		area->v1->vec.x = area->v2->vec.x = 0;
 		area->v3->vec.x = area->v4->vec.x = window_size_x - 1;
@@ -928,7 +928,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
 	for (sa = screen->areabase.first; sa; sa = sa->next) {
 		ED_area_exit(C, sa);
 	}
-	for (sa = window->global_areas.first; sa; sa = sa->next) {
+	for (sa = window->global_areas.areabase.first; sa; sa = sa->next) {
 		ED_area_exit(C, sa);
 	}
 
@@ -1101,7 +1101,7 @@ void ED_screen_global_topbar_area_create(const bContext *C, wmWindow *win, const
 		sa->fixed_height = size_y;
 		sa->headertype = HEADERTOP;
 
-		BLI_addhead(&win->global_areas, sa);
+		BLI_addhead(&win->global_areas.areabase, sa);
 
 		BLI_addhead(&sa->spacedata, sl);
 		sa->regionbase = sl->regionbase;
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 939ff9eb075..eaf4641ba9e 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -50,7 +50,8 @@ struct wmTooltipState;
 
 typedef struct bScreen {
 	ID id;
-	
+
+	/* TODO Should become ScrAreaMap now. */
 	ListBase vertbase;					/* screens have vertices/edges to define areas */
 	ListBase edgebase;
 	ListBase areabase;
@@ -98,6 +99,12 @@ typedef struct ScrEdge {
 	int pad;
 } ScrEdge;
 
+typedef struct ScrAreaMap {
+	ListBase vertbase;  /* ScrVert - screens have vertices/edges to define areas */
+	ListBase edgebase;  /* ScrEdge */
+	ListBase areabase;  /* ScrArea */
+} ScrAreaMap;
+
 typedef struct Panel {		/* the part from uiBlock that needs saved in file */
 	struct Panel *next, *prev;
 
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index 112af7531ca..5849d0426fe 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -32,6 +32,7 @@
 #define __DNA_WINDOWMANAGER_TYPES_H__
 
 #include "DNA_listBase.h"
+#include "DNA_screen_types.h"
 #include "DNA_vec_types.h"
 #include "DNA_userdef_types.h"
 
@@ -228,7 +229,7 @@ typedef struct wmWindow {
 
 	/** Global areas aren't part of the screen, but part of the window directly.
 	 * \note Code assumes global areas with fixed height, fixed width not supported yet */
-	ListBase global_areas;
+	ScrAreaMap global_areas;
 
 	struct Stereo3dFormat *stereo3d_format; /* properties for stereoscopic displays */
 
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 35a95c39545..70ef4e1f4d1 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -208,7 +208,7 @@ void wm_window_free(bContext *C, wmWindowManager *wm, wmWindow *win)
 			CTX_wm_window_set(C, NULL);
 	}
 
-	for (ScrArea *sa = win->global_areas.first, *sa_next; sa; sa = sa_next) {
+	for (ScrArea *sa = win->global_areas.areabase.first, *sa_next; sa; sa = sa_next) {
 		sa_next = sa->next;
 
 		MEM_freeN(sa->v1);
@@ -217,7 +217,7 @@ void wm_window_free(bContext *C, wmWindowManager *wm, wmWindow *win)
 		MEM_freeN(sa->v4);
 
 		BKE_screen_area_free(sa);
-		BLI_freelinkN(&win->global_areas, sa);
+		BLI_freelinkN(&win->global_areas.areabase, sa);
 	}
 
 	/* end running jobs, a job end also removes its timer */
@@ -2113,7 +2113,7 @@ int WM_window_screen_pixels_y(const wmWindow *win)
 {
 	short screen_size_y = WM_window_pixels_y(win);
 
-	for (ScrArea *sa = win->global_areas.first; sa; sa = sa->next) {
+	for (ScrArea *sa = win->global_areas.areabase.first; sa; sa = sa->next) {
 		screen_size_y -= ED_area_global_size_y(win, sa);
 	}



More information about the Bf-blender-cvs mailing list