[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20830] branches/blender2.5/blender/source /blender/editors: UI:

Brecht Van Lommel brecht at blender.org
Fri Jun 12 15:53:08 CEST 2009


Revision: 20830
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20830
Author:   blendix
Date:     2009-06-12 15:53:08 +0200 (Fri, 12 Jun 2009)

Log Message:
-----------
UI:
* Immediately do updates when working in the color picker popup.
* Fix for color picking wrongly getting cancelled sometimes.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
    branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c

Modified: branches/blender2.5/blender/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-12 13:19:20 UTC (rev 20829)
+++ branches/blender2.5/blender/source/blender/editors/include/UI_interface.h	2009-06-12 13:53:08 UTC (rev 20830)
@@ -96,6 +96,7 @@
 #define UI_RETURN_CANCEL	1       /* cancel all menus cascading */
 #define UI_RETURN_OK        2       /* choice made */
 #define UI_RETURN_OUT       4       /* left the menu */
+#define UI_RETURN_UPDATE    8       /* update the button that opened */
 
 	/* block->flag bits 12-15 are identical to but->flag bits */
 

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-12 13:19:20 UTC (rev 20829)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c	2009-06-12 13:53:08 UTC (rev 20830)
@@ -3362,7 +3362,8 @@
 				uiBut *bt= ui_but_find_mouse_over(ar, event->x, event->y);
 
 				if(bt && bt->active != data) {
-					data->cancel= 1;
+					if(but->type != COL) /* exception */
+						data->cancel= 1;
 					button_activate_state(C, but, BUTTON_STATE_EXIT);
 				}
 				break;
@@ -3391,7 +3392,7 @@
 	return retval;
 }
 
-static void ui_handle_button_closed_submenu(bContext *C, wmEvent *event, uiBut *but)
+static void ui_handle_button_return_submenu(bContext *C, wmEvent *event, uiBut *but)
 {
 	uiHandleButtonData *data;
 	uiPopupBlockHandle *menu;
@@ -3400,12 +3401,19 @@
 	menu= data->menu;
 
 	/* copy over return values from the closing menu */
-	if(menu->menuretval == UI_RETURN_OK) {
+	if(menu->menuretval == UI_RETURN_OK || menu->menuretval == UI_RETURN_UPDATE) {
 		if(but->type == COL)
 			VECCOPY(data->vec, menu->retvec)
 		else if(ELEM3(but->type, MENU, ICONROW, ICONTEXTROW))
 			data->value= menu->retvalue;
 	}
+
+	if(menu->menuretval == UI_RETURN_UPDATE) {
+		if(data->interactive) ui_apply_button(C, but->block, but, data, 1);
+		else ui_check_but(but);
+
+		menu->menuretval= 0;
+	}
 	
 	/* now change button state or exit, which will close the submenu */
 	if(ELEM(menu->menuretval, UI_RETURN_OK, UI_RETURN_CANCEL)) {
@@ -3716,7 +3724,7 @@
 	 * buttons inside this region. disabled inside check .. not sure
 	 * anymore why it was there? but i meant enter enter didn't work
 	 * for example when mouse was not over submenu */
-	if((/*inside &&*/ !menu->menuretval && retval == WM_UI_HANDLER_CONTINUE) || event->type == TIMER) {
+	if((/*inside &&*/ (!menu->menuretval || menu->menuretval == UI_RETURN_UPDATE) && retval == WM_UI_HANDLER_CONTINUE) || event->type == TIMER) {
 		but= ui_but_find_activated(ar);
 
 		if(but) {
@@ -3746,7 +3754,7 @@
 		return retval;
 }
 
-static int ui_handle_menu_closed_submenu(bContext *C, wmEvent *event, uiPopupBlockHandle *menu)
+static int ui_handle_menu_return_submenu(bContext *C, wmEvent *event, uiPopupBlockHandle *menu)
 {
 	ARegion *ar;
 	uiBut *but;
@@ -3771,10 +3779,15 @@
 				menu->butretval= data->retval;
 			}
 		}
+		else if(submenu->menuretval == UI_RETURN_UPDATE)
+			menu->menuretval = UI_RETURN_UPDATE;
 
 		/* now let activated button in this menu exit, which
 		 * will actually close the submenu too */
-		ui_handle_button_closed_submenu(C, event, but);
+		ui_handle_button_return_submenu(C, event, but);
+
+		if(submenu->menuretval == UI_RETURN_UPDATE)
+			submenu->menuretval = 0;
 	}
 
 	/* for cases where close does not cascade, allow the user to
@@ -3808,7 +3821,7 @@
 	/* now handle events for our own menu */
 	if(retval == WM_UI_HANDLER_CONTINUE || event->type == TIMER) {
 		if(submenu && submenu->menuretval)
-			retval= ui_handle_menu_closed_submenu(C, event, menu);
+			retval= ui_handle_menu_return_submenu(C, event, menu);
 		else
 			retval= ui_handle_menu_event(C, event, menu, (submenu == NULL));
 	}
@@ -3901,7 +3914,7 @@
 			/* handle events for the activated button */
 			if(retval == WM_UI_HANDLER_CONTINUE || event->type == TIMER) {
 				if(data->menu->menuretval)
-					ui_handle_button_closed_submenu(C, event, but);
+					ui_handle_button_return_submenu(C, event, but);
 				else
 					ui_handle_button_event(C, event, but);
 			}

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-12 13:19:20 UTC (rev 20829)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c	2009-06-12 13:53:08 UTC (rev 20830)
@@ -1480,6 +1480,7 @@
 {
 	wmWindow *win= CTX_wm_window(C);
 	uiBut *but1= (uiBut *)bt1;
+	uiPopupBlockHandle *popup= but1->block->handle;
 	float *col= (float *)col1;
 	float *fp, hsv[3];
 	
@@ -1495,13 +1496,26 @@
 	rgb_to_hsv(col[0], col[1], col[2], hsv, hsv+1, hsv+2);
 	ui_update_block_buts_hsv(but1->block, hsv);
 	update_picker_hex(but1->block, col);
+
+	if(popup)
+		popup->menuretval= UI_RETURN_UPDATE;
 }
 
+static void do_hsv_cb(bContext *C, void *bt1, void *unused)
+{
+	uiBut *but1= (uiBut *)bt1;
+	uiPopupBlockHandle *popup= but1->block->handle;
+
+	if(popup)
+		popup->menuretval= UI_RETURN_UPDATE;
+}
+
 /* bt1 is num but, hsv1 is pointer to original color in hsv space*/
 /* callback to handle changes in num-buts in picker */
 static void do_palette1_cb(bContext *C, void *bt1, void *hsv1)
 {
 	uiBut *but1= (uiBut *)bt1;
+	uiPopupBlockHandle *popup= but1->block->handle;
 	float *hsv= (float *)hsv1;
 	float *fp= NULL;
 	
@@ -1514,6 +1528,9 @@
 		rgb_to_hsv(fp[0], fp[1], fp[2], hsv, hsv+1, hsv+2);
 	} 
 	ui_update_block_buts_hsv(but1->block, hsv);
+
+	if(popup)
+		popup->menuretval= UI_RETURN_UPDATE;
 }
 
 /* bt1 is num but, col1 is pointer to original color */
@@ -1521,6 +1538,7 @@
 static void do_palette2_cb(bContext *C, void *bt1, void *col1)
 {
 	uiBut *but1= (uiBut *)bt1;
+	uiPopupBlockHandle *popup= but1->block->handle;
 	float *rgb= (float *)col1;
 	float *fp= NULL;
 	
@@ -1533,14 +1551,21 @@
 		hsv_to_rgb(fp[0], fp[1], fp[2], rgb, rgb+1, rgb+2);
 	} 
 	ui_update_block_buts_hsv(but1->block, fp);
+
+	if(popup)
+		popup->menuretval= UI_RETURN_UPDATE;
 }
 
 static void do_palette_hex_cb(bContext *C, void *bt1, void *hexcl)
 {
 	uiBut *but1= (uiBut *)bt1;
+	uiPopupBlockHandle *popup= but1->block->handle;
 	char *hexcol= (char *)hexcl;
 	
 	ui_update_block_buts_hex(but1->block, hexcol);	
+
+	if(popup)
+		popup->menuretval= UI_RETURN_UPDATE;
 }
 
 /* used for both 3d view and image window */
@@ -1623,8 +1648,10 @@
 	
 	// the cube intersection
 	bt= uiDefButF(block, HSVCUBE, retval, "",	0,DPICK+BPICK,FPICK,FPICK, col, 0.0, 0.0, 2, 0, "");
+	uiButSetFunc(bt, do_hsv_cb, bt, NULL);
 
 	bt= uiDefButF(block, HSVCUBE, retval, "",	0,0,FPICK,BPICK, col, 0.0, 0.0, 3, 0, "");
+	uiButSetFunc(bt, do_hsv_cb, bt, NULL);
 
 	// palette
 	





More information about the Bf-blender-cvs mailing list