[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20678] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Sat Jun 6 15:53:05 CEST 2009


Missing info:

> - Stolen from Gimp (blame venomgfx for hint!): ScrollWheel allows
>   to go over menu items and use number buttons, only on mouse-over.

It is ALT+Scrollwheel. Keymap entries for UI is a future issue btw...

-Ton-

------------------------------------------------------------------------
Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The Netherlands

On 6 Jun, 2009, at 15:35, Ton Roosendaal wrote:

> Revision: 20678
>            
> http://projects.blender.org/plugins/scmsvn/viewcvs.php? 
> view=rev&root=bf-blender&revision=20678
> Author:   ton
> Date:     2009-06-06 15:35:04 +0200 (Sat, 06 Jun 2009)
>
> Log Message:
> -----------
> 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.
>
> Modified Paths:
> --------------
>      
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_handlers.c
>      
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_intern.h
>      
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_regions.c
>      
> branches/blender2.5/blender/source/blender/editors/screen/ 
> screen_edit.c
>      
> branches/blender2.5/blender/source/blender/makesdna/ 
> DNA_windowmanager_types.h
>      
> branches/blender2.5/blender/source/blender/windowmanager/intern/ 
> wm_event_system.c
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_handlers.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_handlers.c	2009-06-06 13:24:06 UTC (rev 20677)
> +++  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_handlers.c	2009-06-06 13:35:04 UTC (rev 20678)
> @@ -1245,6 +1245,8 @@
>  	int mx, my, changed= 0, inbox=0, retval= WM_UI_HANDLER_CONTINUE;
>
>  	switch(event->type) {
> +		case WHEELUPMOUSE:
> +		case WHEELDOWNMOUSE:
>  		case MOUSEMOVE:
>  			if(data->searchbox)
>  				ui_searchbox_event(C, data->searchbox, but, event);
> @@ -1760,7 +1762,16 @@
>  	ui_window_to_block(data->region, block, &mx, &my);
>
>  	if(data->state == BUTTON_STATE_HIGHLIGHT) {
> -		if(event->val==KM_PRESS) {
> +		/* XXX hardcoded keymap check.... */
> +		if(event->type == WHEELDOWNMOUSE && event->alt) {
> +			mx= but->x1;
> +			click= 1;
> +		}
> +		else if(event->type == WHEELUPMOUSE && event->alt) {
> +			mx= but->x2;
> +			click= 1;
> +		}
> +		else if(event->val==KM_PRESS) {
>  			if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) &&  
> event->shift) {
>  				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
>  				retval= WM_UI_HANDLER_BREAK;
> @@ -1774,6 +1785,7 @@
>  			else if(ELEM(event->type, PADENTER, RETKEY) &&  
> event->val==KM_PRESS)
>  				click= 1;
>  		}
> +		
>  	}
>  	else if(data->state == BUTTON_STATE_NUM_EDITING) {
>  		if(event->type == ESCKEY) {
> @@ -1961,7 +1973,16 @@
>  	ui_window_to_block(data->region, block, &mx, &my);
>
>  	if(data->state == BUTTON_STATE_HIGHLIGHT) {
> -		if(event->val==KM_PRESS) {
> +		/* XXX hardcoded keymap check.... */
> +		if(event->type == WHEELDOWNMOUSE && event->alt) {
> +			mx= but->x1;
> +			click= 2;
> +		}
> +		else if(event->type == WHEELUPMOUSE && event->alt) {
> +			mx= but->x2;
> +			click= 2;
> +		}
> +		else if(event->val==KM_PRESS) {
>  			if(ELEM3(event->type, LEFTMOUSE, PADENTER, RETKEY) &&  
> event->shift) {
>  				button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
>  				retval= WM_UI_HANDLER_BREAK;
> @@ -2004,7 +2025,7 @@
>  	}
>
>  	if(click) {
> -		if (event->ctrl) {
> +		if (event->ctrl || click==2) {
>  			/* nudge slider to the left or right */
>  			float f, tempf, softmin, softmax, softrange;
>  			int temp;
> @@ -2062,6 +2083,21 @@
>  			button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
>  			return WM_UI_HANDLER_BREAK;
>  		}
> +		else if(ELEM3(but->type, MENU, ICONROW, ICONTEXTROW)) {
> +			
> +			if(event->type == WHEELDOWNMOUSE && event->alt) {
> +				data->value= ui_step_name_menu(but, -1);
> +				button_activate_state(C, but, BUTTON_STATE_EXIT);
> +				ui_apply_button(C, but->block, but, data, 1);
> +				return WM_UI_HANDLER_BREAK;
> +			}
> +			else if(event->type == WHEELUPMOUSE && event->alt) {
> +				data->value= ui_step_name_menu(but, 1);
> +				button_activate_state(C, but, BUTTON_STATE_EXIT);
> +				ui_apply_button(C, but->block, but, data, 1);
> +				return WM_UI_HANDLER_BREAK;
> +			}
> +		}
>  	}
>
>  	return WM_UI_HANDLER_CONTINUE;
> @@ -3232,6 +3268,7 @@
>  	
>  	if(data->state == BUTTON_STATE_HIGHLIGHT) {
>  		switch(event->type) {
> +			
>  			case MOUSEMOVE:
>  				/* verify if we are still over the button, if not exit */
>  				if(!ui_mouse_inside_button(ar, but, event->x, event->y)) {
> @@ -3265,6 +3302,15 @@
>
>  				retval= WM_UI_HANDLER_CONTINUE;
>  				break;
> +			case WHEELUPMOUSE:
> +			case WHEELDOWNMOUSE:
> +			case MIDDLEMOUSE:
> +				/* XXX hardcoded keymap check... but anyway, while view changes,  
> tooltips should be removed */
> +				if(data->tooltiptimer) {
> +					WM_event_remove_window_timer(data->window, data->tooltiptimer);
> +					data->tooltiptimer= NULL;
> +				}
> +				/* pass on purposedly */
>  			default:
>  				/* handle button type specific events */
>  				retval= ui_do_button(C, block, but, event);
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_intern.h
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_intern.h	2009-06-06 13:24:06 UTC (rev 20677)
> +++  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_intern.h	2009-06-06 13:35:04 UTC (rev 20678)
> @@ -371,6 +371,7 @@
>  void ui_popup_block_free(struct bContext *C, uiPopupBlockHandle  
> *handle);
>
>  void ui_set_name_menu(uiBut *but, int value);
> +int ui_step_name_menu(uiBut *but, int step);
>
>  struct AutoComplete;
>  struct AutoComplete *autocomplete_begin(char *startname, int maxlen);
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_regions.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_regions.c	2009-06-06 13:24:06 UTC (rev 20677)
> +++  
> branches/blender2.5/blender/source/blender/editors/interface/ 
> interface_regions.c	2009-06-06 13:35:04 UTC (rev 20678)
> @@ -225,6 +225,44 @@
>  	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; i<md->nitems; i++)
> +		if (md->items[i].retval==value)
> +			break;
> +	
> +	if(step==1) {
> +		/* skip separators */
> +		for(; i<md->nitems-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 @@
>  		}
>  	}
>  	if(y1 < 0) {
> -		y1 += 36;
> -		y2 += 36;
> +		y1 += 56*aspect;
> +		y2 += 56*aspect;
>  	}
>
>  	/* widget rect, in region coords */
> @@ -506,9 +544,11 @@
>  	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;
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/screen/ 
> screen_edit.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/screen/ 
> screen_edit.c	2009-06-06 13:24:06 UTC (rev 20677)
> +++  
> branches/blender2.5/blender/source/blender/editors/screen/ 
> screen_edit.c	2009-06-06 13:35:04 UTC (rev 20678)
> @@ -1283,6 +1283,9 @@
>  		
>  		ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C));
>  		WM_event_add_notifier(C, NC_WINDOW, NULL);
> +		
> +		/* makes button hilites work */
> +		WM_event_add_mousemove(C);
>  	}
>  }
>
>
> Modified:  
> branches/blender2.5/blender/source/blender/makesdna/ 
> DNA_windowmanager_types.h
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/makesdna/ 
> DNA_windowmanager_types.h	2009-06-06 13:24:06 UTC (rev 20677)
> +++  
> branches/blender2.5/blender/source/blender/makesdna/ 
> DNA_windowmanager_types.h	2009-06-06 13:35:04 UTC (rev 20678)
> @@ -97,7 +97,7 @@
>  	short active;		/* set to 1 if an active window, for quick rejects */
>  	short cursor;		/* current mouse cursor type */
>  	short lastcursor;	/* for temp waitcursor */
> -	short pad2;
> +	short addmousemove;	/* internal: tag this for extra mousemove event,  
> makes cursors/buttons active on UI switching */
>  	int pad3;
>  	
>  	struct wmEvent *eventstate;	/* storage for event system */
>
> Modified:  
> branches/blender2.5/blender/source/blender/windowmanager/intern/ 
> wm_event_system.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/windowmanager/intern/ 
> wm_event_system.c	2009-06-06 13:24:06 UTC (rev 20677)
> +++  
> branches/blender2.5/blender/source/blender/windowmanager/intern/ 
> wm_event_system.c	2009-06-06 13:35:04 UTC (rev 20678)
> @@ -1088,6 +1088,17 @@
>  			wm_event_free(event);
>  			
>  		}
> +		
> +		/* only add mousemove when queue was read entirely */
> +		if(win->addmousemove) {
> +			wmEvent event= *(win->eventstate);
> +			event.type= MOUSEMOVE;
> +			event.prevx= event.x;
> +			event.prevy= event.y;
> +			wm_event_add(win, &event);
> +			win->addmousemove= 0;
> +		}
> +		
>  		CTX_wm_window_set(C, NULL);
>  	}
>  }
> @@ -1238,11 +1249,8 @@
>  void WM_event_add_mousemove(bContext *C)
>  {
>  	wmWindow *window= CTX_wm_window(C);
> -	wmEvent event= *(window->eventstate);
> -	event.type= MOUSEMOVE;
> -	event.prevx= event.x;
> -	event.prevy= event.y;
> -	wm_event_add(window, &event);
> +	
> +	window->addmousemove= 1;
>  }
>
>  /* for modal callbacks, check configuration for how to interpret exit  
> with tweaks  */
>
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>




More information about the Bf-blender-cvs mailing list