fix for annoyance where header menus would get scroller arrows added because it would be clamped within the screen a few pixels.
This was caused from using theme shadow setting to clip the popups and a hard-coded value to translate the popup within screen bounds - these values should be the same.
This commit is contained in:
@@ -85,6 +85,9 @@ typedef struct uiLayout uiLayout;
|
||||
#define UI_MAX_DRAW_STR 400
|
||||
#define UI_MAX_NAME_STR 128
|
||||
|
||||
/* use for clamping popups within the screen */
|
||||
#define UI_SCREEN_MARGIN 10
|
||||
|
||||
/* uiBlock->dt */
|
||||
#define UI_EMBOSS 0 /* use widget style for drawing */
|
||||
#define UI_EMBOSSN 1 /* Nothing, only icon and/or text */
|
||||
|
||||
@@ -319,6 +319,7 @@ static void ui_popup_bounds_block(const bContext *C, uiBlock *block, eBlockBound
|
||||
wmWindow *window = CTX_wm_window(C);
|
||||
int startx, starty, endx, endy, width, height, oldwidth, oldheight;
|
||||
int oldbounds, xmax, ymax;
|
||||
const int margin = UI_SCREEN_MARGIN;
|
||||
|
||||
oldbounds = block->bounds;
|
||||
|
||||
@@ -356,20 +357,20 @@ static void ui_popup_bounds_block(const bContext *C, uiBlock *block, eBlockBound
|
||||
startx = window->eventstate->x + block->rect.xmin + (block->mx * width) / oldwidth;
|
||||
starty = window->eventstate->y + block->rect.ymin + (block->my * height) / oldheight;
|
||||
|
||||
if (startx < 10)
|
||||
startx = 10;
|
||||
if (starty < 10)
|
||||
starty = 10;
|
||||
if (startx < margin)
|
||||
startx = margin;
|
||||
if (starty < margin)
|
||||
starty = margin;
|
||||
|
||||
endx = startx + width;
|
||||
endy = starty + height;
|
||||
|
||||
if (endx > xmax) {
|
||||
endx = xmax - 10;
|
||||
endx = xmax - margin;
|
||||
startx = endx - width;
|
||||
}
|
||||
if (endy > ymax - 20) {
|
||||
endy = ymax - 20;
|
||||
if (endy > ymax - margin) {
|
||||
endy = ymax - margin;
|
||||
starty = endy - height;
|
||||
}
|
||||
|
||||
|
||||
@@ -1532,7 +1532,7 @@ static void ui_block_region_draw(const bContext *C, ARegion *ar)
|
||||
static void ui_popup_block_clip(wmWindow *window, uiBlock *block)
|
||||
{
|
||||
uiBut *bt;
|
||||
int width = UI_ThemeMenuShadowWidth();
|
||||
int width = UI_SCREEN_MARGIN;
|
||||
int winx, winy;
|
||||
|
||||
if (block->flag & UI_BLOCK_NO_WIN_CLIP) {
|
||||
|
||||
Reference in New Issue
Block a user