From a180b754eb40637a5d37eeb0ae60066f5a6f93d8 Mon Sep 17 00:00:00 2001 From: George Vogiatzis Date: Fri, 5 Apr 2019 13:48:26 +0200 Subject: Interface: New region type 'Footer', used by text editor * It can be hidden by dragging it up/down. * It can be at the top or bottom, independent of the header. * It uses the color theme from the header. * It does not change its color, when the area becomes active. Currently, it is used in the text editor to display the file path. Differential Revision: https://developer.blender.org/D4601 --- .../blender/editors/interface/interface_context_menu.c | 3 +++ source/blender/editors/interface/interface_handlers.c | 2 +- .../editors/interface/interface_region_menu_popup.c | 18 +++++++++++++----- .../editors/interface/interface_region_popover.c | 15 +++++++++++---- source/blender/editors/interface/resources.c | 8 ++++---- 5 files changed, 32 insertions(+), 14 deletions(-) (limited to 'source/blender/editors/interface') diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c index b5eb6302f81..4ca92fbb386 100644 --- a/source/blender/editors/interface/interface_context_menu.c +++ b/source/blender/editors/interface/interface_context_menu.c @@ -847,6 +847,9 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but) else if (ar->regiontype == RGN_TYPE_NAV_BAR) { uiItemMenuF(layout, IFACE_("Navigation Bar"), ICON_NONE, ED_screens_navigation_bar_tools_menu_create, NULL); } + else if (ar->regiontype == RGN_TYPE_FOOTER) { + uiItemMenuF(layout, IFACE_("Footer"), ICON_NONE, ED_screens_footer_tools_menu_create, NULL); + } } MenuType *mt = WM_menutype_find("WM_MT_button_context", true); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 208c1a90b89..07be2253969 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -1784,7 +1784,7 @@ static bool ui_but_drag_init( /* Initialize alignment for single row/column regions, * otherwise we use the relative position of the first other button dragged over. */ - if (ELEM(data->region->regiontype, RGN_TYPE_NAV_BAR, RGN_TYPE_HEADER)) { + if (ELEM(data->region->regiontype, RGN_TYPE_NAV_BAR, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) { int lock_axis = -1; if (ELEM(data->region->alignment, RGN_ALIGN_LEFT, RGN_ALIGN_RIGHT)) { lock_axis = 0; diff --git a/source/blender/editors/interface/interface_region_menu_popup.c b/source/blender/editors/interface/interface_region_menu_popup.c index a20c4fe9379..0fe847caa20 100644 --- a/source/blender/editors/interface/interface_region_menu_popup.c +++ b/source/blender/editors/interface/interface_region_menu_popup.c @@ -278,11 +278,19 @@ static uiBlock *ui_block_func_POPUP(bContext *C, uiPopupBlockHandle *handle, voi /* for a header menu we set the direction automatic */ if (!pup->slideout && flip) { ScrArea *sa = CTX_wm_area(C); - if (sa && ED_area_header_alignment(sa) == RGN_ALIGN_BOTTOM) { - ARegion *ar = CTX_wm_region(C); - if (ar && ar->regiontype == RGN_TYPE_HEADER) { - UI_block_direction_set(block, UI_DIR_UP); - UI_block_order_flip(block); + ARegion *ar = CTX_wm_region(C); + if (sa && ar) { + if (ar->regiontype == RGN_TYPE_HEADER) { + if (ED_area_header_alignment(sa) == RGN_ALIGN_BOTTOM) { + UI_block_direction_set(block, UI_DIR_UP); + UI_block_order_flip(block); + } + } + if (ar->regiontype == RGN_TYPE_FOOTER) { + if (ED_area_footer_alignment(sa) == RGN_ALIGN_BOTTOM) { + UI_block_direction_set(block, UI_DIR_UP); + UI_block_order_flip(block); + } } } } diff --git a/source/blender/editors/interface/interface_region_popover.c b/source/blender/editors/interface/interface_region_popover.c index 0b1d3f19919..7ca6db2ca21 100644 --- a/source/blender/editors/interface/interface_region_popover.c +++ b/source/blender/editors/interface/interface_region_popover.c @@ -180,10 +180,17 @@ static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, v * see the values of the buttons below changing. */ UI_block_direction_set(block, UI_DIR_UP | UI_DIR_CENTER_X); } - else if (sa && ED_area_header_alignment(sa) == RGN_ALIGN_BOTTOM) { - /* Prefer popover from header to be positioned into the editor. */ - if (ar && ar->regiontype == RGN_TYPE_HEADER) { - UI_block_direction_set(block, UI_DIR_UP | UI_DIR_CENTER_X); + /* Prefer popover from header to be positioned into the editor. */ + else if (sa && ar) { + if (ar->regiontype == RGN_TYPE_HEADER){ + if (ED_area_header_alignment(sa) == RGN_ALIGN_BOTTOM) { + UI_block_direction_set(block, UI_DIR_UP | UI_DIR_CENTER_X); + } + } + if (ar->regiontype == RGN_TYPE_FOOTER) { + if (ED_area_footer_alignment(sa) == RGN_ALIGN_BOTTOM) { + UI_block_direction_set(block, UI_DIR_UP | UI_DIR_CENTER_X); + } } } } diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 72739b99e14..8d908375c1b 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -173,7 +173,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) else if (theme_regionid == RGN_TYPE_CHANNELS) { cp = ts->list; } - else if (theme_regionid == RGN_TYPE_HEADER) { + else if (ELEM(theme_regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) { cp = ts->header; } else if (theme_regionid == RGN_TYPE_NAV_BAR) { @@ -207,7 +207,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) else if (theme_regionid == RGN_TYPE_CHANNELS) { cp = ts->list_text; } - else if (theme_regionid == RGN_TYPE_HEADER) { + else if (ELEM(theme_regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) { cp = ts->header_text; } else { @@ -221,7 +221,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) else if (theme_regionid == RGN_TYPE_CHANNELS) { cp = ts->list_text_hi; } - else if (theme_regionid == RGN_TYPE_HEADER) { + else if (ELEM(theme_regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) { cp = ts->header_text_hi; } else { @@ -235,7 +235,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) else if (theme_regionid == RGN_TYPE_CHANNELS) { cp = ts->list_title; } - else if (theme_regionid == RGN_TYPE_HEADER) { + else if (ELEM(theme_regionid, RGN_TYPE_HEADER, RGN_TYPE_FOOTER)) { cp = ts->header_title; } else { -- cgit v1.2.3