diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2013-11-26 13:29:36 +0400 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2013-11-26 13:41:19 +0400 |
commit | 0570bdc13d297a80c702a69f72bf28f8d4e2e9b5 (patch) | |
tree | a48f10eb46414e65c95fb01b2d1d31eb6c0691d0 /source/blender/editors | |
parent | a6188afaf341780e69d59bf76aa5154a09a7b553 (diff) |
Fix own regression in rB254aa8f3a0fb: Titles and sub-titles in menus were drawn shifted to the right.
Reported by plasmasolution over IRC, thanks.
Also fixes wrong handling of "sub-titles" with icons in EnumO menus (they were just treated as text-only ones).
Dev notes: in fact, that clean up commit revealed kind of an "hidden bug that happend to work well"
(or at least, a very bad hack): with titles without icon, code used to use uiItemL with ICON_NONE.
However, as the root layout is a menu one, internal ui code would add a dummy blank icon,
and set UI_HAS_ICON flag for the label button. But in the affected menus, code afterward assigned
UI_TEXT_LEFT to but->flag, thus erasing the (internal) UI_HAS_ICON. As UI_TEXT_LEFT was moved to
but->drawflag, the internal flag was no more erased, and the fake icon was drawn, creating that
shift-to-the-right effect. Turns out we do not even have to set UI_TEXT_LEFT in these cases,
just add label buttons without icon is enough!
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/interface/interface_layout.c | 12 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 20 |
2 files changed, 20 insertions, 12 deletions
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 28055ba6c26..3cd022bc640 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -908,9 +908,15 @@ void uiItemsFullEnumO(uiLayout *layout, const char *opname, const char *propname block->flag |= UI_BLOCK_NO_FLIP; } - uiItemL(column, item->name, ICON_NONE); - but = block->buttons.last; - but->drawflag = UI_BUT_TEXT_LEFT; + if (item->icon) { + uiItemL(column, item->name, item->icon); + but = block->buttons.last; + } + else { + /* Do not use uiItemL here, as our root layout is a menu one, it will add a fake blank icon! */ + but = uiDefBut(block, LABEL, 0, item->name, 0, 0, UI_UNIT_X * 5, UI_UNIT_Y, NULL, + 0.0, 0.0, 0, 0, ""); + } ui_but_tip_from_enum_item(but, item); } else { /* XXX bug here, colums draw bottom item badly */ diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 984904acb26..b4d99b90cf3 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -1791,7 +1791,6 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a uiBlock *block = uiLayoutGetBlock(layout); uiPopupBlockHandle *handle = block->handle; uiLayout *split, *column = NULL; - uiBut *bt; MenuData *md; MenuEntry *entry; const char *instr = arg_str; @@ -1800,7 +1799,7 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a int nbr_entries_nosepr = 0; uiBlockSetFlag(block, UI_BLOCK_MOVEMOUSE_QUIT); - + /* compute menu data */ md = decompose_menu_string(instr); @@ -1838,9 +1837,8 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a uiItemL(layout, md->title, md->titleicon); } else { - uiItemL(layout, md->title, ICON_NONE); - bt = block->buttons.last; - bt->drawflag = UI_BUT_TEXT_LEFT; + /* Do not use uiItemL here, as our root layout is a menu one, it will add a fake blank icon! */ + uiDefBut(block, LABEL, 0, md->title, 0, 0, UI_UNIT_X * 5, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); } } @@ -1874,9 +1872,13 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a if (entry->sepr) { if (entry->str[0]) { - uiItemL(column, entry->str, entry->icon); - bt = block->buttons.last; - bt->drawflag = UI_BUT_TEXT_LEFT; + if (entry->icon) { + uiItemL(column, entry->str, entry->icon); + } + else { + /* Do not use uiItemL here, as our root layout is a menu one, it will add a fake blank icon! */ + uiDefBut(block, LABEL, 0, entry->str, 0, 0, UI_UNIT_X * 5, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); + } } else { uiItemS(column); @@ -1891,7 +1893,7 @@ static void ui_block_func_MENUSTR(bContext *UNUSED(C), uiLayout *layout, void *a UI_UNIT_X * 5, UI_UNIT_X, &handle->retvalue, (float) entry->retval, 0.0, 0, -1, ""); } } - + menudata_free(md); } |