[Bf-blender-cvs] [3e1f83a1dc7] blender2.8: WM: split panel drawing into layout and draw

Campbell Barton noreply at git.blender.org
Mon Jun 11 18:40:19 CEST 2018


Commit: 3e1f83a1dc787ec518a6fa25a855f935b4a8b9b9
Author: Campbell Barton
Date:   Mon Jun 11 18:23:36 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB3e1f83a1dc787ec518a6fa25a855f935b4a8b9b9

WM: split panel drawing into layout and draw

This matches changes made to the header.

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

M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/screen/area.c
M	source/blender/makesdna/DNA_screen_types.h

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

diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index cd1fb1f91d8..504e910d043 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -76,15 +76,22 @@ void    ED_region_tag_redraw_partial(struct ARegion *ar, const struct rcti *rct)
 void    ED_region_tag_redraw_overlay(struct ARegion *ar);
 void    ED_region_tag_redraw_no_rebuild(struct ARegion *ar);
 void    ED_region_tag_refresh_ui(struct ARegion *ar);
-void    ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
-void    ED_region_panels(
-            const struct bContext *C, struct ARegion *ar,
-            const char *contexts[], int contextnr,
-            const bool vertical);
-void    ED_region_header_init(struct ARegion *ar);
-void    ED_region_header(const struct bContext *C, struct ARegion *ar);
-void    ED_region_header_layout(const struct bContext *C, struct ARegion *ar);
-void    ED_region_header_draw(const struct bContext *C, struct ARegion *ar);
+
+void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
+void ED_region_panels(
+        const struct bContext *C, struct ARegion *ar,
+        const char *contexts[], int contextnr, const bool vertical);
+void ED_region_panels_layout(
+        const struct bContext *C, struct ARegion *ar,
+        const char *contexts[], int contextnr, const bool vertical);
+void ED_region_panels_draw(
+        const struct bContext *C, struct ARegion *ar);
+
+void ED_region_header_init(struct ARegion *ar);
+void ED_region_header(const struct bContext *C, struct ARegion *ar);
+void ED_region_header_layout(const struct bContext *C, struct ARegion *ar);
+void ED_region_header_draw(const struct bContext *C, struct ARegion *ar);
+
 void    ED_region_cursor_set(struct wmWindow *win, struct ScrArea *sa, struct ARegion *ar);
 void    ED_region_toggle_hidden(struct bContext *C, struct ARegion *ar);
 void    ED_region_visibility_change_update(struct bContext *C, struct ARegion *ar);
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index f73ce24c24b..110e428ffff 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -1891,13 +1891,16 @@ static void ed_panel_draw(const bContext *C,
  * Matching against any of these strings will draw the panel.
  * Can be NULL to skip context checks.
  */
-void ED_region_panels(const bContext *C, ARegion *ar, const char *contexts[], int contextnr, const bool vertical)
+void ED_region_panels_layout(
+        const bContext *C, ARegion *ar,
+        const char *contexts[], int contextnr, const bool vertical)
 {
+	ar->runtime.category = NULL;
+
 	const WorkSpace *workspace = CTX_wm_workspace(C);
 	ScrArea *sa = CTX_wm_area(C);
 	PanelType *pt;
 	View2D *v2d = &ar->v2d;
-	View2DScrollers *scrollers;
 	int x, y, w, em;
 	bool is_context_new = 0;
 	int scroll;
@@ -2059,6 +2062,15 @@ void ED_region_panels(const bContext *C, ARegion *ar, const char *contexts[], in
 #endif
 	}
 
+	if (use_category_tabs) {
+		ar->runtime.category = category;
+	}
+}
+
+void ED_region_panels_draw(const bContext *C, ARegion *ar)
+{
+	View2D *v2d = &ar->v2d;
+
 	region_clear_color(C, ar, (ar->type->regionid == RGN_TYPE_PREVIEW) ? TH_PREVIEW_BACK : TH_BACK);
 
 	/* reset line width for drawing tabs */
@@ -2073,16 +2085,27 @@ void ED_region_panels(const bContext *C, ARegion *ar, const char *contexts[], in
 	/* restore view matrix */
 	UI_view2d_view_restore(C);
 
-	if (use_category_tabs) {
-		UI_panel_category_draw_all(ar, category);
+	/* Set in layout. */
+	if (ar->runtime.category) {
+		UI_panel_category_draw_all(ar, ar->runtime.category);
 	}
 
 	/* scrollers */
-	scrollers = UI_view2d_scrollers_calc(C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY);
+	View2DScrollers *scrollers = UI_view2d_scrollers_calc(
+	        C, v2d, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY, V2D_ARG_DUMMY);
 	UI_view2d_scrollers_draw(C, v2d, scrollers);
 	UI_view2d_scrollers_free(scrollers);
 }
 
+void ED_region_panels(
+        const bContext *C, ARegion *ar,
+        const char *contexts[], int contextnr, const bool vertical)
+{
+	/* TODO: remove? */
+	ED_region_panels_layout(C, ar, contexts, contextnr, vertical);
+	ED_region_panels_draw(C, ar);
+}
+
 void ED_region_panels_init(wmWindowManager *wm, ARegion *ar)
 {
 	wmKeyMap *keymap;
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 91bf1bbddbd..c7a35490d5b 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -309,6 +309,12 @@ typedef struct ScrArea {
 	ScrArea_Runtime runtime;
 } ScrArea;
 
+
+typedef struct ARegion_Runtime {
+	/* Panel category to use between 'layout' and 'draw'. */
+	const char *category;
+} ARegion_Runtime;
+
 typedef struct ARegion {
 	struct ARegion *next, *prev;
 	
@@ -347,6 +353,8 @@ typedef struct ARegion {
 
 	char *headerstr;			/* use this string to draw info */
 	void *regiondata;			/* XXX 2.50, need spacedata equivalent? */
+
+	ARegion_Runtime runtime;
 } ARegion;
 
 /* area->flag */



More information about the Bf-blender-cvs mailing list