[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47232] branches/soc-2011-tomato/source/ blender/editors/mask/mask_draw.c: minor mask draw code refactor

Campbell Barton ideasman42 at gmail.com
Wed May 30 17:23:17 CEST 2012


Revision: 47232
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47232
Author:   campbellbarton
Date:     2012-05-30 15:23:17 +0000 (Wed, 30 May 2012)
Log Message:
-----------
minor mask draw code refactor

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/editors/mask/mask_draw.c

Modified: branches/soc-2011-tomato/source/blender/editors/mask/mask_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/mask/mask_draw.c	2012-05-30 15:14:18 UTC (rev 47231)
+++ branches/soc-2011-tomato/source/blender/editors/mask/mask_draw.c	2012-05-30 15:23:17 UTC (rev 47232)
@@ -49,19 +49,41 @@
 
 #include "mask_intern.h"  /* own include */
 
-static void set_spline_color(MaskObject *maskobj, MaskSpline *spline)
+static void mask_spline_color_get(MaskObject *maskobj, MaskSpline *spline, const int is_sel,
+                                  unsigned char r_rgb[4])
 {
-	if ((spline->flag & SELECT) && (maskobj->restrictflag & MASK_RESTRICT_SELECT) == 0) {
-		if (maskobj->act_spline == spline)
-			glColor3f(1.0f, 1.0f, 1.0f);
-		else
-			glColor3f(1.0f, 0.0f, 0.0f);
+	if (is_sel) {
+		if (maskobj->act_spline == spline) {
+			r_rgb[0] = r_rgb[1] = r_rgb[2] = 255;
+		}
+		else {
+			r_rgb[0] = 255;
+			r_rgb[1] = r_rgb[2] = 0;
+		}
 	}
 	else {
-		glColor3f(0.5f, 0.0f, 0.0f);
+		r_rgb[0] = 128;
+		r_rgb[1] = r_rgb[2] = 0;
 	}
+
+	r_rgb[3] = 255;
 }
 
+static void mask_spline_feather_color_get(MaskObject *UNUSED(maskobj), MaskSpline *UNUSED(spline), const int is_sel,
+                                          unsigned char r_rgb[4])
+{
+	if (is_sel) {
+		r_rgb[1] = 255;
+		r_rgb[0] = r_rgb[2] = 0;
+	}
+	else {
+		r_rgb[1] = 128;
+		r_rgb[0] = r_rgb[2] = 0;
+	}
+
+	r_rgb[3] = 255;
+}
+
 #if 0
 static void draw_spline_parents(MaskObject *UNUSED(maskobj), MaskSpline *spline)
 {
@@ -99,6 +121,8 @@
 /* return non-zero if spline is selected */
 static void draw_spline_points(MaskObject *maskobj, MaskSpline *spline)
 {
+	const int is_spline_sel = (spline->flag & SELECT) && (maskobj->restrictflag & MASK_RESTRICT_SELECT) == 0;
+	unsigned char rgb_spline[4];
 	MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline);
 
 	int i, hsize, tot_feather_point;
@@ -111,6 +135,8 @@
 
 	glPointSize(hsize);
 
+	mask_spline_color_get(maskobj, spline, is_spline_sel, rgb_spline);
+
 	/* feather points */
 	feather_points = fp = BKE_mask_spline_feather_points(spline, &tot_feather_point);
 	for (i = 0; i < spline->tot_point; i++) {
@@ -165,7 +191,7 @@
 
 		/* draw handle segment */
 		if (has_handle) {
-			set_spline_color(maskobj, spline);
+			glColor3ubv(rgb_spline);
 
 			glBegin(GL_LINES);
 			glVertex3fv(vert);
@@ -208,33 +234,43 @@
 	glPointSize(1.0f);
 }
 
-static void draw_spline_curve_lines(const float *points, int tot_point, int closed)
+/* #define USE_XOR */
+
+static void draw_curve_dashed(MaskSpline *spline, float *points, int tot_point, const unsigned char rgb_sel[4])
 {
-	glEnableClientState(GL_VERTEX_ARRAY);
-	glVertexPointer(2, GL_FLOAT, 0, points);
-	glDrawArrays(closed ? GL_LINE_LOOP : GL_LINE_STRIP, 0, tot_point);
-	glDisableClientState(GL_VERTEX_ARRAY);
-}
+	const int draw_method = (spline->flag & MASK_SPLINE_CYCLIC) ? GL_LINE_LOOP : GL_LINE_STRIP;
 
-static void draw_dashed_curve(MaskSpline *spline, float *points, int tot_point)
-{
+	glEnable(GL_LINE_STIPPLE);
+
+#ifdef USE_XOR
 	glEnable(GL_COLOR_LOGIC_OP);
 	glLogicOp(GL_OR);
+#endif
 
-	draw_spline_curve_lines(points, tot_point, spline->flag & MASK_SPLINE_CYCLIC);
+	glColor4ubv(rgb_sel);
+	glLineStipple(3, 0xaaaa);
+	glEnableClientState(GL_VERTEX_ARRAY);
+	glVertexPointer(2, GL_FLOAT, 0, points);
+	glDrawArrays(draw_method, 0, tot_point);
 
+#ifdef USE_XOR
 	glDisable(GL_COLOR_LOGIC_OP);
-	glLineStipple(3, 0xaaaa);
-	glEnable(GL_LINE_STIPPLE);
+#endif
 
-	glColor3f(0.0f, 0.0f, 0.0f);
-	draw_spline_curve_lines(points, tot_point, spline->flag & MASK_SPLINE_CYCLIC);
+	glColor4ub(0, 0, 0, 255);
+	glLineStipple(3, 0x5555);
+	glDrawArrays(draw_method, 0, tot_point);
+	glDisableClientState(GL_VERTEX_ARRAY);
 
 	glDisable(GL_LINE_STIPPLE);
 }
 
-static void draw_spline_curve(MaskObject *maskobj, MaskSpline *spline)
+static void draw_spline_curve(MaskObject *maskobj, MaskSpline *spline,
+                              const char use_smooth, const char draw_type)
 {
+	unsigned char rgb_tmp[4];
+
+	const int is_spline_sel = (spline->flag & SELECT) && (maskobj->restrictflag & MASK_RESTRICT_SELECT) == 0;
 	float *diff_points, *feather_points;
 	int tot_diff_point, tot_feather_point;
 
@@ -243,24 +279,34 @@
 	if (!diff_points)
 		return;
 
+	if (use_smooth) {
+		glEnable(GL_LINE_SMOOTH);
+		glEnable(GL_BLEND);
+		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+	}
+
 	feather_points = BKE_mask_spline_feather_differentiated_points(spline, &tot_feather_point);
 
 	/* draw feather */
-	if ((spline->flag & SELECT) && (maskobj->restrictflag & MASK_RESTRICT_SELECT) == 0)
-		glColor3f(0.0f, 1.0f, 0.0f);
-	else
-		glColor3f(0.0f, 0.5f, 0.0f);
-	draw_dashed_curve(spline, feather_points, tot_feather_point);
+	mask_spline_feather_color_get(maskobj, spline, is_spline_sel, rgb_tmp);
+	draw_curve_dashed(spline, feather_points, tot_feather_point, rgb_tmp);
+	MEM_freeN(feather_points);
 
 	/* draw main curve */
-	set_spline_color(maskobj, spline);
-	draw_dashed_curve(spline, diff_points, tot_diff_point);
+	mask_spline_color_get(maskobj, spline, is_spline_sel, rgb_tmp);
+	draw_curve_dashed(spline, diff_points, tot_diff_point, rgb_tmp);
+	MEM_freeN(diff_points);
 
-	MEM_freeN(diff_points);
-	MEM_freeN(feather_points);
+	if (use_smooth) {
+		glDisable(GL_LINE_SMOOTH);
+		glDisable(GL_BLEND);
+	}
+
+	(void)draw_type;
 }
 
-static void draw_maskobjs(Mask *mask)
+static void draw_maskobjs(Mask *mask,
+                          const char use_smooth, const char draw_type)
 {
 	MaskObject *maskobj;
 
@@ -274,7 +320,7 @@
 		for (spline = maskobj->splines.first; spline; spline = spline->next) {
 
 			/* draw curve itself first... */
-			draw_spline_curve(maskobj, spline);
+			draw_spline_curve(maskobj, spline, use_smooth, draw_type);
 
 //			draw_spline_parents(maskobj, spline);
 
@@ -288,7 +334,7 @@
 				void *back = spline->points_deform;
 
 				spline->points_deform = NULL;
-				draw_spline_curve(maskobj, spline);
+				draw_spline_curve(maskobj, spline, use_smooth, draw_type);
 //				draw_spline_parents(maskobj, spline);
 				draw_spline_points(maskobj, spline);
 				spline->points_deform = back;
@@ -304,5 +350,5 @@
 	if (!mask)
 		return;
 
-	draw_maskobjs(mask);
+	draw_maskobjs(mask, FALSE, 0);
 }




More information about the Bf-blender-cvs mailing list