From 3e1f83a1dc787ec518a6fa25a855f935b4a8b9b9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 11 Jun 2018 18:23:36 +0200 Subject: WM: split panel drawing into layout and draw This matches changes made to the header. --- source/blender/editors/include/ED_screen.h | 25 ++++++++++++++-------- source/blender/editors/screen/area.c | 33 +++++++++++++++++++++++++----- source/blender/makesdna/DNA_screen_types.h | 8 ++++++++ 3 files changed, 52 insertions(+), 14 deletions(-) (limited to 'source/blender') 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 */ -- cgit v1.2.3