Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYevgeny Makarov <jenkm>2021-01-28 14:33:46 +0300
committerJulian Eisel <julian@blender.org>2021-01-28 14:33:46 +0300
commit6f054f5ac73a1a6bff434efb1e15aea40c2e0647 (patch)
tree84ededb0f6877e6bbdc94ae57ff542e1e0772e0a
parentc0d2b10c5947f49b316d39b66fb18ff6ab21a82a (diff)
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
-rw-r--r--source/blender/editors/interface/interface_handlers.c10
-rw-r--r--source/blender/editors/interface/interface_widgets.c19
2 files changed, 25 insertions, 4 deletions
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 1d2393ece8d..d246dfadefa 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 89720cbf17e..0c3448b987d 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -2254,20 +2254,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;
}
}