Commit: 4db51cf00e0d2d95c1c8def74b1e1c20676bcc04
Author: Julian Eisel
Date:   Mon Aug 3 00:29:31 2015 +0200
Branches: temp-ui-widget-refactor
https://developer.blender.org/rB4db51cf00e0d2d95c1c8def74b1e1c20676bcc04

Add widget type for preview widget

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

M       source/blender/editors/interface/interface.c
M       source/blender/editors/interface/interface_intern.h
M       source/blender/editors/interface/interface_widgets.c
M       source/blender/editors/interface/widgets/widgets.c
M       source/blender/editors/interface/widgets/widgets.h
M       
source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
M       source/blender/editors/interface/widgets/widgets_draw/widgets_draw.c
M       
source/blender/editors/interface/widgets/widgets_draw/widgets_draw_intern.h

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

diff --git a/source/blender/editors/interface/interface.c 
b/source/blender/editors/interface/interface.c
index d11c195..c7b9bdb 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1380,7 +1380,7 @@ void UI_block_draw(const bContext *C, uiBlock *block)
                        /* XXX: figure out why invalid coordinates happen when 
closing render window */
                        /* and material preview is redrawn in main window (temp 
fix for bug #23848) */
                        if (rect.xmin < rect.xmax && rect.ymin < rect.ymax)
-                               ui_draw_but(C, ar, &style, but, &rect);
+                               ui_draw_but(ar, &style, but, &rect);
                }
        }
        
diff --git a/source/blender/editors/interface/interface_intern.h 
b/source/blender/editors/interface/interface_intern.h
index b7f870e..5e3e517 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -615,7 +615,7 @@ void ui_draw_search_back(struct uiStyle *style, uiBlock 
*block, rcti *rect);
 bool ui_link_bezier_points(const rcti *rect, float coord_array[][2], int 
resol);
 void ui_draw_link_bezier(const rcti *rect);
 
-extern void ui_draw_but(const struct bContext *C, ARegion *ar, struct uiStyle 
*style, uiBut *but, rcti *rect);
+extern void ui_draw_but(ARegion *ar, struct uiStyle *style, uiBut *but, rcti 
*rect);
 /* theme color init */
 struct ThemeUI;
 void ui_widget_color_init(struct ThemeUI *tui);
diff --git a/source/blender/editors/interface/interface_widgets.c 
b/source/blender/editors/interface/interface_widgets.c
index 1f2e235..c96ecda 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -153,28 +153,6 @@ static void round_box_shade_col4_r(unsigned char r_col[4], 
const char col1[4], c
        r_col[3] = (faci * col1[3] + facm * col2[3]) / 256;
 }
 
-static void widget_verts_to_triangle_strip(uiWidgetDrawBase *wtb, const int 
totvert, float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2])
-{
-       int a;
-       for (a = 0; a < totvert; a++) {
-               copy_v2_v2(triangle_strip[a * 2], wtb->outer_v[a]);
-               copy_v2_v2(triangle_strip[a * 2 + 1], wtb->inner_v[a]);
-       }
-       copy_v2_v2(triangle_strip[a * 2], wtb->outer_v[0]);
-       copy_v2_v2(triangle_strip[a * 2 + 1], wtb->inner_v[0]);
-}
-
-static void widget_drawbase_outline(uiWidgetDrawBase *wtb)
-{
-       float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2]; /* + 2 because the 
last pair is wrapped */
-       widget_verts_to_triangle_strip(wtb, wtb->totvert, triangle_strip);
-
-       glEnableClientState(GL_VERTEX_ARRAY);
-       glVertexPointer(2, GL_FLOAT, 0, triangle_strip);
-       glDrawArrays(GL_TRIANGLE_STRIP, 0, wtb->totvert * 2 + 2);
-       glDisableClientState(GL_VERTEX_ARRAY);
-}
-
 /* *********************** widget types ************************************* 
*/
 
 static struct uiWidgetStateColors wcol_state_colors = {
@@ -872,36 +850,6 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const 
rcti *rect, const rcti *s
        }
 }
 
-static void widget_draw_extra_mask(const bContext *C, uiBut *but, uiWidgetType 
*wt, rcti *rect)
-{
-       uiWidgetDrawBase wtb;
-       const float rad = 0.25f * U.widget_unit;
-       unsigned char col[4];
-       
-       /* state copy! */
-       wt->wcol = *(wt->wcol_theme);
-       
-       widget_drawbase_init(&wtb);
-       
-       if (but->block->drawextra) {
-               /* note: drawextra can change rect +1 or -1, to match round 
errors of existing previews */
-               but->block->drawextra(C, but->poin, but->block->drawextra_arg1, 
but->block->drawextra_arg2, rect);
-               
-               /* make mask to draw over image */
-               UI_GetThemeColor3ubv(TH_BACK, col);
-               glColor3ubv(col);
-               
-               round_box__edges(&wtb, UI_CNR_ALL, rect, 0.0f, rad);
-               widget_drawbase_outline(&wtb);
-       }
-       
-       /* outline */
-       widget_drawbase_roundboxedges_set(&wtb, UI_CNR_ALL, rect, rad);
-       wtb.draw_outline = true;
-       wtb.draw_inner = false;
-       widget_drawbase_draw(&wtb, &wt->wcol);
-}
-
 
 static int widget_roundbox_set(uiBut *but, rcti *rect)
 {
@@ -961,7 +909,7 @@ static int widget_roundbox_set(uiBut *but, rcti *rect)
 }
 
 /* conversion from old to new buttons, so still messy */
-void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, 
rcti *rect)
+void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
 {
        bTheme *btheme = UI_GetTheme();
        ThemeUI *tui = &btheme->tui;
@@ -1106,7 +1054,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle 
*style, uiBut *but, rct
                                break;
                        
                        case UI_BTYPE_EXTRA:
-                               widget_draw_extra_mask(C, but, 
WidgetTypeInit(UI_WTYPE_BOX), rect);
+                               wt = WidgetTypeInit(UI_WTYPE_EXTRA);
                                break;
                                
                        case UI_BTYPE_HSVCUBE:
diff --git a/source/blender/editors/interface/widgets/widgets.c 
b/source/blender/editors/interface/widgets/widgets.c
index 30ed9ba..0cb8cbd 100644
--- a/source/blender/editors/interface/widgets/widgets.c
+++ b/source/blender/editors/interface/widgets/widgets.c
@@ -89,6 +89,10 @@ uiWidgetType *WidgetTypeInit(const uiWidgetTypeEnum type)
                        wt.draw_type = draw_style->exec;
                        break;
 
+               case UI_WTYPE_EXTRA:
+                       wt.draw_type = draw_style->extra_mask;
+                       break;
+
                case UI_WTYPE_FILENAME:
                        break;
 
diff --git a/source/blender/editors/interface/widgets/widgets.h 
b/source/blender/editors/interface/widgets/widgets.h
index b0beafe..b4ddcaa 100644
--- a/source/blender/editors/interface/widgets/widgets.h
+++ b/source/blender/editors/interface/widgets/widgets.h
@@ -74,6 +74,7 @@ typedef enum {
 
        /* specials */
        UI_WTYPE_ICON,
+       UI_WTYPE_EXTRA,
        UI_WTYPE_SWATCH,
        UI_WTYPE_RGB_PICKER,
        UI_WTYPE_UNITVEC,
@@ -120,6 +121,7 @@ typedef struct uiWidgetDrawStyle {
                         *checkbox,
                         *colorband,
                         *exec,
+                        *extra_mask,
                         *filename,
                         *hsv_circle,
                         *hsv_cube,
diff --git 
a/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c 
b/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
index 98c2ed4..498b70a 100644
--- a/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
+++ b/source/blender/editors/interface/widgets/widgets_draw/drawstyle_classic.c
@@ -253,6 +253,37 @@ static void widget_roundbut(uiWidgetColors *wcol, rcti 
*rect, int UNUSED(state),
        widget_drawbase_draw(&wtb, wcol);
 }
 
+static void widget_draw_extra_mask(uiBut *but, uiWidgetColors *wcol, rcti 
*rect,
+                                    int UNUSED(state), int 
UNUSED(roundboxalign))
+{
+       uiWidgetDrawBase wtb;
+       const float rad = 0.25f * U.widget_unit;
+       unsigned char col[4];
+
+       widget_drawbase_init(&wtb);
+
+       if (but->block->drawextra) {
+               BLI_assert(but->block->evil_C);
+
+               /* note: drawextra can change rect +1 or -1, to match round 
errors of existing previews */
+               but->block->drawextra(but->block->evil_C, but->poin, 
but->block->drawextra_arg1,
+                                     but->block->drawextra_arg2, rect);
+
+               /* make mask to draw over image */
+               UI_GetThemeColor3ubv(TH_BACK, col);
+               glColor3ubv(col);
+
+               round_box__edges(&wtb, UI_CNR_ALL, rect, 0.0f, rad);
+               widget_drawbase_outline(&wtb);
+       }
+
+       /* outline */
+       widget_drawbase_roundboxedges_set(&wtb, UI_CNR_ALL, rect, rad);
+       wtb.draw_outline = true;
+       wtb.draw_inner = false;
+       widget_drawbase_draw(&wtb, wcol);
+}
+
 static void widget_hsv_circle(
         uiBut *but, uiWidgetColors *wcol, rcti *rect,
         int UNUSED(state), int UNUSED(roundboxalign))
@@ -1286,6 +1317,13 @@ uiWidgetDrawType drawtype_classic_exec = {
        /* text */   widget_draw_text_icon,
 };
 
+uiWidgetDrawType drawtype_classic_extra_mask = {
+       /* state */  widget_state_nothing,
+       /* draw */   NULL,
+       /* custom */ widget_draw_extra_mask,
+       /* text */   widget_draw_text_icon,
+};
+
 uiWidgetDrawType drawtype_classic_hsv_circle = {
        /* state */  NULL,
        /* draw */   NULL,
@@ -1509,6 +1547,7 @@ uiWidgetDrawStyle WidgetStyle_Classic = {
        /* checkbox */          &drawtype_classic_checkbox,
        /* colorband */         &drawtype_classic_colorband,
        /* exec */              &drawtype_classic_exec,
+       /* extra_mask */        &drawtype_classic_extra_mask,
        /* filename */          NULL, /* not used (yet?) */
        /* hsv_circle */        &drawtype_classic_hsv_circle,
        /* hsv_cube */          &drawtype_classic_hsv_cube,
diff --git 
a/source/blender/editors/interface/widgets/widgets_draw/widgets_draw.c 
b/source/blender/editors/interface/widgets/widgets_draw/widgets_draw.c
index ce7b450..484d0d0 100644
--- a/source/blender/editors/interface/widgets/widgets_draw/widgets_draw.c
+++ b/source/blender/editors/interface/widgets/widgets_draw/widgets_draw.c
@@ -548,6 +548,17 @@ static void widget_trias_draw(uiWidgetDrawBaseTrias *tria)
        glDisableClientState(GL_VERTEX_ARRAY);
 }
 
+void widget_drawbase_outline(uiWidgetDrawBase *wtb)
+{
+       float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2]; /* + 2 because the 
last pair is wrapped */
+       widget_verts_to_triangle_strip(wtb, wtb->totvert, triangle_strip);
+
+       glEnableClientState(GL_VERTEX_ARRAY);
+       glVertexPointer(2, GL_FLOAT, 0, triangle_strip);
+       glDrawArrays(GL_TRIANGLE_STRIP, 0, wtb->totvert * 2 + 2);
+       glDisableClientState(GL_VERTEX_ARRAY);
+}
+
 void widget_drawbase_draw(uiWidgetDrawBase *wtb, uiWidgetColors *wcol)
 {
        int j, a;
diff --git 
a/source/blender/editors/interface/widgets/widgets_draw/widgets_draw_intern.h 
b/source/blender/editors/interface/widgets/widgets_draw/widgets_draw_intern.h
index 584aba1..8079004 100644
--- 
a/source/blender/editors/interface/widgets/widgets_draw/widgets_draw_intern.h
+++ 
b/source/blender/editors/interface/widgets/widgets_draw/widgets_draw_intern.h
@@ -89,6 +89,7 @@ void widget_drawbase_menu_trias(uiWidgetDrawBaseTrias *tria, 
const rcti *rect);
 void widget_drawbase_check_trias(uiWidgetDrawBaseTrias *tria, const rcti 
*rect);
 void widget_drawbase_softshadow(const rcti *rect, int roundboxalign, const 
float radin);
 void widget_drawbase_draw(uiWidgetDrawBase *wtb, struct uiWidgetColors *wcol);
+void widget_drawbase_outline(uiWidgetDrawBase *wtb);
 void widget_drawbase_scroll_circle(uiWidgetDrawBaseTrias *tria, const rcti 
*rect, float triasize, char where);
 void ui_hsv_cursor(float x, float y);
 void ui_draw_colorband_handle(

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

Reply via email to