From 9d8fa4f959ff704e113d70ed713d1b8aec0ef014 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Sat, 6 Jun 2009 13:35:04 +0000 Subject: 2.5 Several usablity tweaks: - Search menu allows ScrollWheel to view items - Tooltip on button on bottom of window showed wrong - Tooltips were popping up while draggin (MMB) or scrolling (wheel). Now they stay away. - Stolen from Gimp (blame venomgfx for hint!): ScrollWheel allows to go over menu items and use number buttons, only on mouse-over. Note for devs: the WM_event_add_mousemove() call (to add a fake event to bring UI back alive after view changes) now works much more reliably. It ensures the mouse move is only handled after all notifiers/redraws were done. --- .../blender/editors/interface/interface_regions.c | 44 +++++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'source/blender/editors/interface/interface_regions.c') diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 8ea686dfbd6..222c3fe892d 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -225,6 +225,44 @@ void ui_set_name_menu(uiBut *but, int value) menudata_free(md); } +int ui_step_name_menu(uiBut *but, int step) +{ + MenuData *md; + int value= ui_get_but_val(but); + int i; + + md= decompose_menu_string(but->str); + for (i=0; initems; i++) + if (md->items[i].retval==value) + break; + + if(step==1) { + /* skip separators */ + for(; initems-1; i++) { + if(md->items[i+1].retval != -1) { + value= md->items[i+1].retval; + break; + } + } + } + else { + if(i>0) { + /* skip separators */ + for(; i>0; i--) { + if(md->items[i-1].retval != -1) { + value= md->items[i-1].retval; + break; + } + } + } + } + + menudata_free(md); + + return value; +} + + /******************** Creating Temporary regions ******************/ ARegion *ui_add_temporary_region(bScreen *sc) @@ -354,8 +392,8 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but) } } if(y1 < 0) { - y1 += 36; - y2 += 36; + y1 += 56*aspect; + y2 += 56*aspect; } /* widget rect, in region coords */ @@ -506,9 +544,11 @@ void ui_searchbox_event(bContext *C, ARegion *ar, uiBut *but, wmEvent *event) uiSearchboxData *data= ar->regiondata; switch(event->type) { + case WHEELUPMOUSE: case UPARROWKEY: ui_searchbox_select(C, ar, but, -1); break; + case WHEELDOWNMOUSE: case DOWNARROWKEY: ui_searchbox_select(C, ar, but, 1); break; -- cgit v1.2.3