[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