UI: don't flip contents of popovers, avoid closing when size changes.
This commit is contained in:
@@ -572,6 +572,9 @@ struct uiPopupBlockHandle {
|
|||||||
/* menu direction */
|
/* menu direction */
|
||||||
int direction;
|
int direction;
|
||||||
|
|
||||||
|
/* previous rect for refresh */
|
||||||
|
rctf prev_block_rect;
|
||||||
|
|
||||||
/* #ifdef USE_DRAG_POPUP */
|
/* #ifdef USE_DRAG_POPUP */
|
||||||
bool is_grab;
|
bool is_grab;
|
||||||
int grab_xy_prev[2];
|
int grab_xy_prev[2];
|
||||||
|
|||||||
@@ -95,12 +95,8 @@ static void ui_popover_create_block(bContext *C, uiPopover *pup, int opcontext)
|
|||||||
uiLayoutContextCopy(pup->layout, pup->but->context);
|
uiLayoutContextCopy(pup->layout, pup->but->context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
/* Some enums reversing is strange, currently we have no good way to
|
|
||||||
* reverse some enum's but not others, so reverse all so the first menu
|
|
||||||
* items are always close to the mouse cursor. */
|
|
||||||
pup->block->flag |= UI_BLOCK_NO_FLIP;
|
pup->block->flag |= UI_BLOCK_NO_FLIP;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, void *arg_pup)
|
static uiBlock *ui_block_func_POPOVER(bContext *C, uiPopupBlockHandle *handle, void *arg_pup)
|
||||||
|
|||||||
@@ -591,6 +591,17 @@ uiBlock *ui_popup_block_refresh(
|
|||||||
else {
|
else {
|
||||||
/* clip block with window boundary */
|
/* clip block with window boundary */
|
||||||
ui_popup_block_clip(window, block);
|
ui_popup_block_clip(window, block);
|
||||||
|
|
||||||
|
/* Avoid menu moving down and losing cursor focus by keeping it at
|
||||||
|
* the same height. */
|
||||||
|
if (block_old && handle->prev_block_rect.ymax > block->rect.ymax) {
|
||||||
|
float offset = handle->prev_block_rect.ymax - block->rect.ymax;
|
||||||
|
ui_block_translate(block, 0, offset);
|
||||||
|
block->rect.ymin = handle->prev_block_rect.ymin;
|
||||||
|
}
|
||||||
|
|
||||||
|
handle->prev_block_rect = block->rect;
|
||||||
|
|
||||||
/* the block and buttons were positioned in window space as in 2.4x, now
|
/* the block and buttons were positioned in window space as in 2.4x, now
|
||||||
* these menu blocks are regions so we bring it back to region space.
|
* these menu blocks are regions so we bring it back to region space.
|
||||||
* additionally we add some padding for the menu shadow or rounded menus */
|
* additionally we add some padding for the menu shadow or rounded menus */
|
||||||
|
|||||||
Reference in New Issue
Block a user