diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 50c5c27b5c1..b5aeee3d3bc 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -4193,9 +4193,17 @@ static uiButExtraOpIcon *ui_but_extra_operator_icon_mouse_over_get(uiBut *but, return NULL; } + /* Same as in 'widget_draw_extra_icons', icon padding from the right edge. */ + xmax -= 0.2 * icon_size; + + /* Handle the padding space from the right edge as the last button. */ + if (x > xmax) { + return but->extra_op_icons.last; + } + /* Inverse order, from right to left. */ LISTBASE_FOREACH_BACKWARD (uiButExtraOpIcon *, op_icon, &but->extra_op_icons) { - if ((x > (xmax - icon_size)) && x < xmax) { + if ((x > (xmax - icon_size)) && x <= xmax) { return op_icon; } xmax -= icon_size; diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index c0c34b0a93d..868f62c89c9 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2257,20 +2257,33 @@ static void widget_draw_extra_icons(const uiWidgetColors *wcol, rcti *rect, float alpha) { - /* inverse order, from right to left. */ + const float icon_size = ICON_SIZE_FROM_BUTRECT(rect); + + /* Offset of icons from the right edge. Keep in sync + with 'ui_but_extra_operator_icon_mouse_over_get'. */ + if (!BLI_listbase_is_empty(&but->extra_op_icons)) { + /* Eyeballed. */ + rect->xmax -= 0.2 * icon_size; + } + + /* Inverse order, from right to left. */ LISTBASE_FOREACH_BACKWARD (uiButExtraOpIcon *, op_icon, &but->extra_op_icons) { rcti temp = *rect; float alpha_this = alpha; - temp.xmin = temp.xmax - (BLI_rcti_size_y(rect) * 1.08f); + temp.xmin = temp.xmax - icon_size; if (!op_icon->highlighted) { alpha_this *= 0.75f; } + /* Draw the icon at the center, and restore the flags after. */ + const int old_drawflags = but->drawflag; + UI_but_drawflag_disable(but, UI_BUT_ICON_LEFT); widget_draw_icon(but, op_icon->icon, alpha_this, &temp, wcol->text); + but->drawflag = old_drawflags; - rect->xmax -= ICON_SIZE_FROM_BUTRECT(rect); + rect->xmax -= icon_size; } }