[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