Fix T83935: Superimposed icon's hotspot is misaligned
Now the icon's rect are drawn wider than it should be, and with overlapping, probably in order to compensate for the icon's offsets inside the rect. The solution is to draw icon's rect of the correct size and center the icon itself. And make the hotspot exactly match the icon's rect. The last/right button's hotspot also covers the extra padding on the right. Differential Revision: https://developer.blender.org/D9936 Reviewed by: Julian Eisel
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user