diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-04-25 22:01:36 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-04-25 22:02:50 +0300 |
commit | 7a67bb7018b8be7b54ece0048a22df34923efe68 (patch) | |
tree | 433d2e77fe2ed8e9fd29db15f5d5996ff7ee25fa /source | |
parent | 700012b66e87390a9eee33d4437a073cb8e42076 (diff) |
UI: workaround for text & icon alignment
Blender's icons weren't written to draw different sizes.
For now ifdef in a hack to show toolbar icons larger.
Diffstat (limited to 'source')
5 files changed, 41 insertions, 4 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index a9fb328ab8b..67dd2630da3 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -1229,4 +1229,9 @@ void UI_widgetbase_draw_cache_begin(void); void UI_widgetbase_draw_cache_flush(void); void UI_widgetbase_draw_cache_end(void); +/* Special drawing for toolbar, mainly workarounds for inflexible icon sizing. */ +#define USE_TOOLBAR_HACK + +bool UI_but_is_tool(const uiBut *but); + #endif /* __UI_INTERFACE_H__ */ diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h index 8b436942fdd..5af2bcb27a1 100644 --- a/source/blender/editors/include/UI_interface_icons.h +++ b/source/blender/editors/include/UI_interface_icons.h @@ -49,6 +49,8 @@ typedef struct IconFile { #define ICON_DEFAULT_HEIGHT 16 #define ICON_DEFAULT_WIDTH 16 +#define ICON_DEFAULT_HEIGHT_TOOLBAR 38 + #define ICON_DEFAULT_HEIGHT_SCALE ((int)(UI_UNIT_Y * 0.8f)) #define ICON_DEFAULT_WIDTH_SCALE ((int)(UI_UNIT_X * 0.8f)) diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 5bfbe47f609..5e628bf797d 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -10232,3 +10232,18 @@ void ui_but_clipboard_free(void) { curvemapping_free_data(&but_copypaste_curve); } + +bool UI_but_is_tool(const uiBut *but) +{ + /* very evil! */ + if (but->optype != NULL) { + static wmOperatorType *ot = NULL; + if (ot == NULL) { + ot = WM_operatortype_find("WM_OT_tool_set", false); + } + if (but->optype == ot) { + return true; + } + } + return false; +} diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c index e81ab44150f..e2d28fc7986 100644 --- a/source/blender/editors/interface/interface_icons.c +++ b/source/blender/editors/interface/interface_icons.c @@ -1226,14 +1226,15 @@ static void icon_draw_size( /* We need to flush widget base first to ensure correct ordering. */ UI_widgetbase_draw_cache_flush(); +#ifdef USE_TOOLBAR_HACK /* TODO(campbell): scale icons up for toolbar, we need a way to detect larger buttons and do this automatic. */ { - /* Icons are currently 38 aligned, scale from 16 -> 38. */ - float scale = 2.375f; + float scale = (float)ICON_DEFAULT_HEIGHT_TOOLBAR / (float)ICON_DEFAULT_HEIGHT; y = (y + (h / 2)) - ((h * scale) / 2); w *= scale; h *= scale; } +#endif /* This could re-generate often if rendered at different sizes in the one interface. * TODO(campbell): support caching multiple sizes. */ diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 87320d9ccc8..b7f327e7fb1 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2004,12 +2004,26 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiB } /* Icons on the left with optional text label on the right */ else if (but->flag & UI_HAS_ICON || show_menu_icon) { + const bool is_tool = UI_but_is_tool(but); + const BIFIconID icon = (but->flag & UI_HAS_ICON) ? but->icon + but->iconadd : ICON_NONE; - const float icon_size = ICON_DEFAULT_WIDTH_SCALE; + int icon_size_init = is_tool ? ICON_DEFAULT_HEIGHT_TOOLBAR : ICON_DEFAULT_HEIGHT; + const float icon_size = icon_size_init / (but->block->aspect / UI_DPI_FAC); + +#ifdef USE_TOOLBAR_HACK + if (is_tool) { + /* pass (even if its a menu toolbar) */ + but->drawflag |= UI_BUT_TEXT_LEFT; + but->drawflag |= UI_BUT_ICON_LEFT; + } +#endif /* menu item - add some more padding so menus don't feel cramped. it must * be part of the button so that this area is still clickable */ - if (ui_block_is_pie_menu(but->block)) { + if (is_tool) { + /* pass (even if its a menu toolbar) */ + } + else if (ui_block_is_pie_menu(but->block)) { if (but->dt == UI_EMBOSS_RADIAL) rect->xmin += 0.3f * U.widget_unit; } |