From c40c2b5ab7ed9b8ecc5421130a844706bd6ff311 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sun, 13 May 2018 18:23:21 +0200 Subject: UI: fix popovers not properly working with scroll arrows for long menus. --- .../blender/editors/interface/interface_widgets.c | 29 ++++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'source/blender/editors/interface/interface_widgets.c') diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 6c558bcc961..7053f2833c3 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -4621,16 +4621,8 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct } } -void ui_draw_menu_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect) +static void ui_draw_clip_tri(uiBlock *block, rcti *rect, uiWidgetType *wt) { - uiWidgetType *wt = widget_type(UI_WTYPE_MENU_BACK); - - wt->state(wt, 0); - if (block) - wt->draw(&wt->wcol, rect, block->flag, block->direction); - else - wt->draw(&wt->wcol, rect, 0, 0); - if (block) { float draw_color[4]; unsigned char *color = (unsigned char *)wt->wcol.text; @@ -4651,6 +4643,19 @@ void ui_draw_menu_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect) } } +void ui_draw_menu_back(uiStyle *UNUSED(style), uiBlock *block, rcti *rect) +{ + uiWidgetType *wt = widget_type(UI_WTYPE_MENU_BACK); + + wt->state(wt, 0); + if (block) + wt->draw(&wt->wcol, rect, block->flag, block->direction); + else + wt->draw(&wt->wcol, rect, 0, 0); + + ui_draw_clip_tri(block, rect, wt); +} + /** * Similar to 'widget_menu_back', however we can't use the widget preset system * because we need to pass in the original location so we know where to show the arrow. @@ -4708,17 +4713,19 @@ static void ui_draw_popover_back_impl( void ui_draw_popover_back(ARegion *ar, uiStyle *UNUSED(style), uiBlock *block, rcti *rect) { + uiWidgetType *wt = widget_type(UI_WTYPE_MENU_BACK); + if (block) { float mval_origin[2] = {block->mx, block->my}; ui_window_to_block_fl(ar, block, &mval_origin[0], &mval_origin[1]); ui_draw_popover_back_impl(&wcol_menu_back, rect, block->direction, mval_origin); } else { - uiWidgetType *wt = widget_type(UI_WTYPE_MENU_BACK); - wt->state(wt, 0); wt->draw(&wt->wcol, rect, 0, 0); } + + ui_draw_clip_tri(block, rect, wt); } static void draw_disk_shaded( -- cgit v1.2.3