[Bf-blender-cvs] [60ec6a5] UI-graphical-redesign: Better drawing for checkboxes (perfectly round + anti-aliasing)

Julian Eisel noreply at git.blender.org
Tue Jun 9 01:47:45 CEST 2015


Commit: 60ec6a541901bdd6fb05e51efa5239117b38d4e6
Author: Julian Eisel
Date:   Tue Jun 9 00:30:26 2015 +0200
Branches: UI-graphical-redesign
https://developer.blender.org/rB60ec6a541901bdd6fb05e51efa5239117b38d4e6

Better drawing for checkboxes (perfectly round + anti-aliasing)

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

M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/interface_widgets.c

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

diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 13e2cdd..92e5b4a 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -220,7 +220,7 @@ typedef struct uiSubBut {
 	struct uiSubBut *next, *prev;
 
 	uiSubButType type;
-	uiSubButAlign align; /* alignment within subbut */
+	uiSubButAlign align; /* alignment within but */
 
 	int width, height;
 	rcti rect;           /* block relative coords */
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 9017ec0..5316b23 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -251,6 +251,21 @@ static void ui_draw_anti_circle(float rad)
 	glDisable(GL_BLEND);
 }
 
+static void ui_draw_anti_circle_rect(const rcti *rect)
+{
+	const int size_x = BLI_rcti_size_x(rect);
+	const int size_y = BLI_rcti_size_y(rect);
+	const float rad = size_y / 2;
+
+	glPushMatrix();
+
+	/* origin is center of the rect */
+	glTranslatef(rect->xmin + size_x / 2, rect->ymin + size_y / 2, 0.0f);
+	ui_draw_anti_circle(rad);
+
+	glPopMatrix();
+}
+
 static void widget_init(uiWidgetBase *wtb)
 {
 	wtb->totvert = wtb->halfwayvert = 0;
@@ -3522,8 +3537,6 @@ static void widget_optionbut(uiWidgetColors *wcol, rcti *rect, int state, int UN
 {
 	uiWidgetBase wtb;
 	rcti recttemp = *rect;
-	float rad;
-	int delta;
 
 	widget_init(&wtb);
 
@@ -3531,29 +3544,27 @@ static void widget_optionbut(uiWidgetColors *wcol, rcti *rect, int state, int UN
 	recttemp.xmax = recttemp.xmin + BLI_rcti_size_y(&recttemp);
 
 	/* smaller */
-	delta = 1 + BLI_rcti_size_y(&recttemp) / 10;
-	recttemp.xmin += delta;
-	recttemp.ymin += delta;
-	recttemp.xmax -= delta;
-	recttemp.ymax -= delta;
+	BLI_rcti_scale(&recttemp, 0.8f);
 
-	/* half rounded */
-	rad = wcol->roundness * U.widget_unit;
-	round_box_edges(&wtb, UI_CNR_ALL, &recttemp, rad);
+	/* draw inner */
+	glColor4ubv((unsigned char *)wcol->inner);
+	ui_draw_anti_circle_rect(&recttemp);
 
-	/* some offset for decoration */
+	/* adjust recttemp for decoration */
 	BLI_rcti_translate(&recttemp, -0.1f * U.widget_unit, -0.1f * U.widget_unit);
-	BLI_rcti_resize(&recttemp, 0.8f * BLI_rcti_size_x(&recttemp), 0.8f * BLI_rcti_size_y(&recttemp));
+	BLI_rcti_scale(&recttemp, 0.9f);
 
 	/* decoration */
 	if (state & UI_SELECT) {
 		widget_check_trias(&wtb.tria1, &recttemp);
 	}
 
+	/* disable inner as this was already drawn */
+	wtb.draw_inner = false;
 	widgetbase_draw(&wtb, wcol);
 
 	/* text space */
-	rect->xmin += BLI_rcti_size_y(rect) * 0.5 + delta;
+	rect->xmin += BLI_rcti_size_y(rect) * 0.7f;
 	rect->ymin += 0.1f * U.widget_unit;
 }




More information about the Bf-blender-cvs mailing list