Commit: 9b3bd5582be99e26b6c3651f66db516982bc8461
Author: Bastien Montagne
Date:   Wed Apr 2 13:09:43 2014 +0200
https://developer.blender.org/rB9b3bd5582be99e26b6c3651f66db516982bc8461

Replace resize code of image scopes by use of new GRIP button.

This deduplicates/simplifies some code. Also cleanup up a bit scopes UI code!

Use new GRIP button for uiList grab-resize.

This allows us to greatly simplifies the code, and get rid of a few hacks in 
uiList event handling!

Note autosize mode of uiList is now trigered by any value of list_grip below a 
given threshold, rather than the fixed zero value...

Reviewers: brecht

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D343

===================================================================

M       source/blender/editors/interface/interface_draw.c
M       source/blender/editors/interface/interface_handlers.c
M       source/blender/editors/interface/interface_layout.c
M       source/blender/editors/interface/interface_templates.c
M       source/blender/editors/space_clip/clip_buttons.c
M       source/blender/makesdna/DNA_screen_types.h

===================================================================

diff --git a/source/blender/editors/interface/interface_draw.c 
b/source/blender/editors/interface/interface_draw.c
index 13551d9..2d13159 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -444,24 +444,11 @@ void ui_draw_but_IMAGE(ARegion *UNUSED(ar), uiBut *but, 
uiWidgetColors *UNUSED(w
 
 static void draw_scope_end(const rctf *rect, GLint *scissor)
 {
-       float scaler_x1, scaler_x2;
-       
        /* restore scissortest */
        glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
-       
+
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-       
-       /* scale widget */
-       scaler_x1 = rect->xmin + BLI_rctf_size_x(rect) / 2 - SCOPE_RESIZE_PAD;
-       scaler_x2 = rect->xmin + BLI_rctf_size_x(rect) / 2 + SCOPE_RESIZE_PAD;
-       
-       glColor4f(0.f, 0.f, 0.f, 0.25f);
-       fdrawline(scaler_x1, rect->ymin - 4, scaler_x2, rect->ymin - 4);
-       fdrawline(scaler_x1, rect->ymin - 7, scaler_x2, rect->ymin - 7);
-       glColor4f(1.f, 1.f, 1.f, 0.25f);
-       fdrawline(scaler_x1, rect->ymin - 5, scaler_x2, rect->ymin - 5);
-       fdrawline(scaler_x1, rect->ymin - 8, scaler_x2, rect->ymin - 8);
-       
+
        /* outline */
        glColor4f(0.f, 0.f, 0.f, 0.5f);
        uiSetRoundBox(UI_CNR_ALL);
@@ -539,7 +526,7 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wcol)
        
        rect.xmin = (float)recti->xmin + 1;
        rect.xmax = (float)recti->xmax - 1;
-       rect.ymin = (float)recti->ymin + SCOPE_RESIZE_PAD + 2;
+       rect.ymin = (float)recti->ymin + 1;
        rect.ymax = (float)recti->ymax - 1;
        
        w = BLI_rctf_size_x(&rect);
@@ -588,7 +575,7 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wcol)
                        histogram_draw_one(0.0, 0.0, 1.0, 0.75, rect.xmin, 
rect.ymin, w, h, hist->data_b, res, is_line);
        }
        
-       /* outline, scale gripper */
+       /* outline */
        draw_scope_end(&rect, scissor);
 }
 
@@ -610,7 +597,7 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wcol),
        
        rect.xmin = (float)recti->xmin + 1;
        rect.xmax = (float)recti->xmax - 1;
-       rect.ymin = (float)recti->ymin + SCOPE_RESIZE_PAD + 2;
+       rect.ymin = (float)recti->ymin + 1;
        rect.ymax = (float)recti->ymax - 1;
 
        if (scopes->wavefrm_yfac < 0.5f)
@@ -629,14 +616,13 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wcol),
                        colorsycc_alpha[c][i] = colorsycc[c][i] * alpha;
                }
        }
-                       
+
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        
        glColor4f(0.f, 0.f, 0.f, 0.3f);
        uiSetRoundBox(UI_CNR_ALL);
        uiDrawBox(GL_POLYGON, rect.xmin - 1, rect.ymin - 1, rect.xmax + 1, 
rect.ymax + 1, 3.0f);
-       
 
        /* need scissor test, waveform can draw outside of boundary */
        glGetIntegerv(GL_VIEWPORT, scissor);
@@ -694,7 +680,7 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wcol),
                        glScalef(w, h, 0.f);
                        glVertexPointer(2, GL_FLOAT, 0, scopes->waveform_1);
                        glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
-                                       
+
                        glDisableClientState(GL_VERTEX_ARRAY);
                        glPopMatrix();
 
@@ -755,10 +741,9 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wcol),
                                fdrawline(rect.xmin + w + 2 + c * 2, min, 
rect.xmin + w + 2 + c * 2, max);
                        }
                }
-               
        }
        
-       /* outline, scale gripper */
+       /* outline */
        draw_scope_end(&rect, scissor);
 }
 
@@ -840,7 +825,7 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wco
        
        rect.xmin = (float)recti->xmin + 1;
        rect.xmax = (float)recti->xmax - 1;
-       rect.ymin = (float)recti->ymin + SCOPE_RESIZE_PAD + 2;
+       rect.ymin = (float)recti->ymin + 1;
        rect.ymax = (float)recti->ymax - 1;
        
        w = BLI_rctf_size_x(&rect);
@@ -850,7 +835,7 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wco
        diam = (w < h) ? w : h;
        
        alpha = scopes->vecscope_alpha * scopes->vecscope_alpha * 
scopes->vecscope_alpha;
-                       
+
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        
@@ -906,9 +891,9 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wco
                glPopMatrix();
        }
 
-       /* outline, scale gripper */
+       /* outline */
        draw_scope_end(&rect, scissor);
-               
+
        glDisable(GL_BLEND);
 }
 
@@ -1505,7 +1490,7 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wc
 
        rect.xmin = (float)recti->xmin + 1;
        rect.xmax = (float)recti->xmax - 1;
-       rect.ymin = (float)recti->ymin + SCOPE_RESIZE_PAD + 2;
+       rect.ymin = (float)recti->ymin + 1;
        rect.ymax = (float)recti->ymax - 1;
 
        width  = BLI_rctf_size_x(&rect) + 1;
@@ -1616,7 +1601,7 @@ void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, 
uiWidgetColors *UNUSED(wc
                uiDrawBox(GL_POLYGON, rect.xmin - 1, rect.ymin, rect.xmax + 1, 
rect.ymax + 1, 3.0f);
        }
 
-       /* outline, scale gripper */
+       /* outline */
        draw_scope_end(&rect, scissor);
 
        glDisable(GL_BLEND);
diff --git a/source/blender/editors/interface/interface_handlers.c 
b/source/blender/editors/interface/interface_handlers.c
index c911e0d..6f06544 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -3942,6 +3942,12 @@ static int ui_do_but_GRIP(bContext *C, uiBlock *block, 
uiBut *but, uiHandleButto
        int retval = WM_UI_HANDLER_CONTINUE;
        const bool horizontal = (BLI_rctf_size_x(&but->rect) < 
BLI_rctf_size_y(&but->rect));
 
+       /* Note: Having to store org point in window space and recompute it to 
block "space" each time
+        *       is not ideal, but this is a way to hack around behavior of 
ui_window_to_block(), which
+        *       returns different results when the block is inside a panel or 
not...
+        *       See T37739.
+        */
+
        mx = event->x;
        my = event->y;
        ui_window_to_block(data->region, block, &mx, &my);
@@ -4001,94 +4007,6 @@ static int ui_do_but_LISTROW(bContext *C, uiBut *but, 
uiHandleButtonData *data,
        return ui_do_but_EXIT(C, but, data, event);
 }
 
-
-static int ui_do_but_LISTBOX(bContext *C, uiBlock *block, uiBut *but, 
uiHandleButtonData *data, const wmEvent *event)
-{
-       uiList *ui_list = but->custom_data;
-       int *size = (int *)but->poin;
-       int mx, my, dragx, dragy;
-       int retval = WM_UI_HANDLER_CONTINUE;
-
-       /* Note: Having to store org point in window space and recompute it to 
block "space" each time
-        *       is not ideal, but this is a way to hack around behavior of 
ui_window_to_block(), which
-        *       returns different results when the block is inside a panel or 
not...
-        *       See T37739.
-        */
-       dragx = data->dragstartx;
-       dragy = data->dragstarty;
-       ui_window_to_block(data->region, block, &dragx, &dragy);
-
-       mx = event->x;
-       my = event->y;
-       ui_window_to_block(data->region, block, &mx, &my);
-
-       if (data->state == BUTTON_STATE_NUM_EDITING) {
-               if (event->type == ESCKEY) {
-                       if (event->val == KM_PRESS) {
-                               data->cancel = true;
-                               data->escapecancel = true;
-                               *size = (int)data->origvalue;
-                               button_activate_state(C, but, 
BUTTON_STATE_EXIT);
-                               ui_list->flag &= ~UILST_RESIZING;
-                               ED_region_tag_redraw(data->region);
-                       }
-               }
-               else if (event->type == LEFTMOUSE && event->val != KM_PRESS) {
-                       button_activate_state(C, but, BUTTON_STATE_EXIT);
-                       ui_list->flag &= ~UILST_RESIZING;
-                       ED_region_tag_redraw(data->region);
-               }
-               else if (event->type == MOUSEMOVE) {
-                       /* If we switched from dragged to auto size, suspend 
shrinking dragging and set dragstarty to a temp
-                        * refpoint.
-                        */
-                       if (data->draglastvalue > 0 && *size == 0) {
-                               data->draglastvalue = *size;
-                               data->dragstartx = data->dragstarty;  /* 
draglasty already used... */
-                               data->dragstarty = event->y;
-                       }
-                       else {
-                               int newsize = *size;
-                               int diff = dragy - my;
-
-                               diff = iroundf((float)diff / (float)UI_UNIT_Y);
-
-                               /* If we are not in autosize mode, default 
behavior... */
-                               if (*size > 0) {
-                                       /* list template will clamp, but we do 
not want to reach 0 aka autosize mode! */
-                                       newsize = data->dragstartvalue + diff;
-                               }
-                               /* If we are leaving autosize mode (growing 
dragging), restore to minimal size. */
-                               else if (diff > 0) {
-                                       /* We can't use ui_numedit_apply()... */
-                                       newsize = 
ui_list->dyn_data->visual_height_min;
-
-                                       /* Restore real dragstarty value! */
-                                       data->dragstarty = data->dragstartx;
-                               }
-
-                               /* Used to detect switch to/from autosize mode. 
*/
-                               data->draglastvalue = newsize;
-
-                               if (newsize != *size) {
-                                       *size = newsize;
-
-                                       /* We can't use ui_numedit_apply()... */
-                                       data->dragchange = true;
-                                       data->applied = 
data->applied_interactive = true;
-
-                                       ui_list->flag |= 
UILST_SCROLL_TO_ACTIVE_ITEM;
-                                       ED_region_tag_redraw(data->region);
-                               }
-                       }
-               }
-
-               retval = WM_UI_HANDLER_BREAK;
-       }
-
-       return retval;
-}
-
 static int ui_do_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data, 
const wmEvent *event)
 {
        
@@ -5279,40 +5197,22 @@ static int ui_do_but_CURVE(bContext *C, uiBlock *block, 
uiBut *but, uiHandleButt
        return WM_UI_HANDLER_CONTINUE;
 }
 
-static bool in_scope_resize_zone(uiBut *but, int UNUSED(x), int y)
-{
-       /* bottom corner return (x > but->rect.xmax - SCOPE_RESIZE_PAD) && (y < 
but->rect.ymin + SCOPE_RESIZE_PAD); */
-       return (y < but->rect.ymin + SCOPE_RESIZE_PAD);
-}
-
 static bool ui_numedit_but_HISTOGRAM(uiBut *but, uiHandleButtonData *data, int 
mx, int my)
 {
        Histogram *hist = (Histogram *)but->poin;
-       /* rcti rect; */
        bool changed = true;
-       float /* dx, */ dy; /* UNUSED */
-       
-       /* BLI_rcti_rctf_copy(&rect, &but->rect); */
-       
-       /* dx = mx - data->draglastx; */ /* UNUSED */
-       dy = my - data->draglasty;
+       float dy = my - data->draglasty;
+
+       /* scale histogram values (dy / 10 for better control) */
+       const float yfac = min_ff(powf(hist->ymax, 2.0f), 1.0f) * 0.5f;
+       hist->ymax += (dy * 0.1f) * yfac;
+
+       /* 0.1 allows us to see HDR colors up to 10 */
+       CLAMP(hist->ymax, 0.1f, 100.f);
 
-       if (in_scope_resize_zone(but, data->dragstartx, data->dragstarty)) {
-               /* resize histogram widget itself */
-               hist->height = (BLI_rctf_size_y(&but->rect) + (data->dragstarty 
- my)) / UI_DPI_FAC;
-       }
-       else {
-               /* scale histogram values (dy / 10 for better control) */
-               const float yfac = min_ff(powf(hist->ymax, 2.0f), 1.0f) * 0.5f;
-               hist->ymax += (dy * 0.1f) * yfac;
-       
-               /* 0.1 allows us to 

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to