From ff0d3a7b22ecf1aca742e1bd76b50a1e5fd20e3d Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Sat, 12 Aug 2023 11:15:23 -0700 Subject: [PATCH 1/5] UI: Highlight Selected Enum This PR highlights the currently-selected item in emum lists. --- source/blender/editors/interface/interface.cc | 64 ++++++++++--------- .../editors/interface/interface_widgets.cc | 34 +++++----- 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/source/blender/editors/interface/interface.cc b/source/blender/editors/interface/interface.cc index b56c59cb8a1..a43dada8136 100644 --- a/source/blender/editors/interface/interface.cc +++ b/source/blender/editors/interface/interface.cc @@ -4290,6 +4290,7 @@ static void ui_def_but_rna__menu(bContext * /*C*/, uiLayout *layout, void *but_p uiBlock *block = uiLayoutGetBlock(layout); uiPopupBlockHandle *handle = block->handle; uiBut *but = (uiBut *)but_p; + const int current_value = RNA_property_enum_get(&but->rnapoin, but->rnaprop); /* see comment in ui_item_enum_expand, re: `uiname`. */ const EnumPropertyItem *item_array; @@ -4436,38 +4437,43 @@ static void ui_def_but_rna__menu(bContext * /*C*/, uiLayout *layout, void *but_p icon = ICON_BLANK1; } + uiBut *item_but; if (icon) { - uiDefIconTextButI(block, - UI_BTYPE_BUT_MENU, - B_NOP, - icon, - item->name, - 0, - 0, - UI_UNIT_X * 5, - UI_UNIT_Y, - &handle->retvalue, - item->value, - 0.0, - 0, - -1, - item->description); + item_but = uiDefIconTextButI(block, + UI_BTYPE_BUT_MENU, + B_NOP, + icon, + item->name, + 0, + 0, + UI_UNIT_X * 5, + UI_UNIT_Y, + &handle->retvalue, + item->value, + 0.0, + 0, + -1, + item->description); } else { - uiDefButI(block, - UI_BTYPE_BUT_MENU, - B_NOP, - item->name, - 0, - 0, - UI_UNIT_X * 5, - UI_UNIT_X, - &handle->retvalue, - item->value, - 0.0, - 0, - -1, - item->description); + item_but = uiDefButI(block, + UI_BTYPE_BUT_MENU, + B_NOP, + item->name, + 0, + 0, + UI_UNIT_X * 5, + UI_UNIT_X, + &handle->retvalue, + item->value, + 0.0, + 0, + -1, + item->description); + } + item_but->flag |= UI_BUT_LIST_ITEM; + if (item->value == current_value) { + item_but->flag |= UI_BUT_ACTIVE_DEFAULT; } } } diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index 228a3ce1139..f1afb330059 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -2727,27 +2727,29 @@ static void widget_state_menu_item(uiWidgetType *wt, { wt->wcol = *(wt->wcol_theme); - /* active and disabled (not so common) */ if ((state->but_flag & UI_BUT_DISABLED) && (state->but_flag & UI_ACTIVE)) { - /* draw the backdrop at low alpha, helps navigating with keys - * when disabled items are active */ + /* Hovering over disabled item. */ wt->wcol.text[3] = 128; color_blend_v3_v3(wt->wcol.inner, wt->wcol.text, 0.5f); wt->wcol.inner[3] = 64; } - else { - /* regular active */ - if (state->but_flag & UI_ACTIVE) { - copy_v3_v3_uchar(wt->wcol.text, wt->wcol.text_sel); - } - else if (state->but_flag & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) { - /* regular disabled */ - color_blend_v3_v3(wt->wcol.text, wt->wcol.inner, 0.5f); - } - - if (state->but_flag & UI_ACTIVE) { - copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel); - } + else if (state->but_flag & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) { + /* Regular disabled. */ + color_blend_v3_v3(wt->wcol.text, wt->wcol.inner, 0.5f); + } + else if ((state->but_flag & UI_BUT_LIST_ITEM) && + (state->but_flag & (UI_BUT_ACTIVE_DEFAULT | UI_SELECT))) + { + /* Enum List currently-selected item. */ + copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel); + copy_v4_v4_uchar(wt->wcol.text, wt->wcol.text_sel); + } + else if (state->but_flag & UI_ACTIVE) { + /* Regular hover. */ + color_blend_v3_v3(wt->wcol.inner, wt->wcol.text, 0.3f); + copy_v3_v3_uchar(wt->wcol.text, wt->wcol.text_sel); + wt->wcol.inner[3] = 255; + wt->wcol.text[3] = 255; } } -- 2.30.2 From 251fd8f62e72d00bdff6ac99a3fb328c3c176df8 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Thu, 17 Aug 2023 12:58:59 -0700 Subject: [PATCH 2/5] Change of hover color blend --- source/blender/editors/interface/interface_widgets.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index 000914e9557..31a3e634729 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -2746,7 +2746,7 @@ static void widget_state_menu_item(uiWidgetType *wt, } else if (state->but_flag & UI_ACTIVE) { /* Regular hover. */ - color_blend_v3_v3(wt->wcol.inner, wt->wcol.text, 0.3f); + color_blend_v3_v3(wt->wcol.inner, wt->wcol.text, 0.2f); copy_v3_v3_uchar(wt->wcol.text, wt->wcol.text_sel); wt->wcol.inner[3] = 255; wt->wcol.text[3] = 255; -- 2.30.2 From ddddda0ead50ad7511bef65e7ae0f8e88f3d7310 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Wed, 30 Aug 2023 12:08:44 -0700 Subject: [PATCH 3/5] Adding Selected Menu Item, as seen in Viewport Lighting Matcaps --- source/blender/editors/interface/interface_widgets.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index 31a3e634729..fd312117b7b 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -2737,10 +2737,9 @@ static void widget_state_menu_item(uiWidgetType *wt, /* Regular disabled. */ color_blend_v3_v3(wt->wcol.text, wt->wcol.inner, 0.5f); } - else if ((state->but_flag & UI_BUT_LIST_ITEM) && - (state->but_flag & (UI_BUT_ACTIVE_DEFAULT | UI_SELECT))) + else if (state->but_flag & (UI_BUT_ACTIVE_DEFAULT | UI_SELECT)) { - /* Enum List currently-selected item. */ + /* Currently-selected item. */ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel); copy_v4_v4_uchar(wt->wcol.text, wt->wcol.text_sel); } -- 2.30.2 From 34dfb786060be827c83d79c68f7672e50f680a23 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Thu, 31 Aug 2023 12:53:55 -0700 Subject: [PATCH 4/5] Treat UI_BUT_ICON_PREVIEW menu items specially --- .../blender/editors/interface/interface_widgets.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index fd312117b7b..4720425b65f 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -2737,9 +2737,17 @@ static void widget_state_menu_item(uiWidgetType *wt, /* Regular disabled. */ color_blend_v3_v3(wt->wcol.text, wt->wcol.inner, 0.5f); } - else if (state->but_flag & (UI_BUT_ACTIVE_DEFAULT | UI_SELECT)) + else if ((state->but_flag & UI_BUT_LIST_ITEM) && + state->but_flag & (UI_BUT_ACTIVE_DEFAULT | UI_SELECT)) { - /* Currently-selected item. */ + /* Currently-selected list item. */ + copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel); + copy_v4_v4_uchar(wt->wcol.text, wt->wcol.text_sel); + } + else if ((state->but_flag & (UI_SELECT | UI_BUT_ICON_PREVIEW)) == + (UI_SELECT | UI_BUT_ICON_PREVIEW)) + { + /* Currently-selected list or menu item that is large preview. */ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel); copy_v4_v4_uchar(wt->wcol.text, wt->wcol.text_sel); } -- 2.30.2 From 3af876b011bc52feb00e0c629084b5f02ccdf3e9 Mon Sep 17 00:00:00 2001 From: Harley Acheson Date: Fri, 1 Sep 2023 11:28:02 -0700 Subject: [PATCH 5/5] Just a comment change. --- source/blender/editors/interface/interface_widgets.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index c6d9093e4ba..05b4bd0eee2 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -2747,7 +2747,7 @@ static void widget_state_menu_item(uiWidgetType *wt, else if ((state->but_flag & (UI_SELECT | UI_BUT_ICON_PREVIEW)) == (UI_SELECT | UI_BUT_ICON_PREVIEW)) { - /* Currently-selected list or menu item that is large preview. */ + /* Currently-selected list or menu item that is large icon preview. */ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel); copy_v4_v4_uchar(wt->wcol.text, wt->wcol.text_sel); } -- 2.30.2