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
        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to