[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