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:
authorCampbell Barton <ideasman42@gmail.com>2018-07-08 12:57:59 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-07-08 23:17:42 +0300
commitaed82dafff8f7f0f30a7b7c1c7180d13ec52b052 (patch)
tree0395b0969069c8972b607758b725d6f616940705 /source/blender/windowmanager
parent907dd3d34a2f876622da1b4561df939a7d5836e9 (diff)
Icons: support for drawing event icons
Use for drawing modal operator header keys.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 19889f57261..4f5578e452d 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -4546,14 +4546,43 @@ bool WM_window_modal_keymap_status_draw(
if (!items[i].identifier[0]) {
continue;
}
- char buf[UI_MAX_DRAW_STR];
- int available_len = sizeof(buf);
- char *p = buf;
- WM_modalkeymap_operator_items_to_string_buf(ot, items[i].value, true, UI_MAX_SHORTCUT_STR, &available_len, &p);
- p -= 1;
- if (p > buf) {
- BLI_snprintf(p, available_len, ": %s", items[i].name);
- uiItemL(row, buf, 0);
+
+ bool show_text = true;
+
+ {
+ /* warning: O(n^2) */
+ wmKeyMapItem *kmi = NULL;
+ for (kmi = keymap->items.first; kmi; kmi = kmi->next) {
+ if (kmi->propvalue == items[i].value) {
+ break;
+ }
+ }
+ if (kmi != NULL) {
+ if (kmi->val == KM_RELEASE) {
+ /* Assume release events just disable something which was toggled on. */
+ continue;
+ }
+ int icon_mod[4];
+ int icon = UI_icon_from_keymap_item(kmi, icon_mod);
+ if (icon != 0) {
+ for (int j = 0; j < ARRAY_SIZE(icon_mod) && icon_mod[j]; j++) {
+ uiItemL(row, "", icon_mod[j]);
+ }
+ uiItemL(row, items[i].name, icon);
+ show_text = false;
+ }
+ }
+ }
+ if (show_text) {
+ char buf[UI_MAX_DRAW_STR];
+ int available_len = sizeof(buf);
+ char *p = buf;
+ WM_modalkeymap_operator_items_to_string_buf(ot, items[i].value, true, UI_MAX_SHORTCUT_STR, &available_len, &p);
+ p -= 1;
+ if (p > buf) {
+ BLI_snprintf(p, available_len, ": %s", items[i].name);
+ uiItemL(row, buf, 0);
+ }
}
}
return true;