[Bf-blender-cvs] [4db51cf] temp-ui-widget-refactor: Add widget type for preview widget

Julian Eisel noreply at git.blender.org
Mon Aug 3 01:02:41 CEST 2015


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(




More information about the Bf-blender-cvs mailing list