From 6b36f92065f054abd810d956169a87180677d4f7 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Mon, 18 Feb 2002 16:03:54 +0000 Subject: Passage des couleurs en gradients pour uniformiser --- generic/Draw.c | 91 +++++++++++++++++++++++++++++++--------------------------- 1 file changed, 48 insertions(+), 43 deletions(-) (limited to 'generic/Draw.c') diff --git a/generic/Draw.c b/generic/Draw.c index b0032b3..b019bb7 100644 --- a/generic/Draw.c +++ b/generic/Draw.c @@ -381,7 +381,7 @@ ReliefColorOfSegment(ZnReal x1, angle, RadianToDegrees(origin));*/ - return ZnGetGradientColor(wi->win, gradient, position, NULL); + return ZnGetGradientColor(gradient, position, NULL); } @@ -921,7 +921,7 @@ RenderPolygonRelief(WidgetInfo *wi, pd.wi = wi; pd.gradient = gradient; - pd.alpha = alpha*wi->alpha/100*65535/100; + pd.alpha = ZnComposeAlpha(alpha, wi->alpha); pd.smooth = smooth; glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); @@ -952,15 +952,16 @@ RenderPolyline(WidgetInfo *wi, int join_style, ZnLineEnd first_end, ZnLineEnd last_end, - XColor *color, - int alpha) + ZnGradient *gradient) { int num_clips = ZnListSize(wi->clip_stack); ZnPoint end_points[LINE_END_POINTS]; ZnBool need_rcaps, thin; int pass, i, k, m; ZnPoint c1, c2; - + XColor *color; + int alpha; + /* * The code below draws curves thiner than the min * of GL_ALIASED_LINE_WIDTH_RANGE and GL_ALIASED_POINT_SIZE_RANGE @@ -971,6 +972,8 @@ RenderPolyline(WidgetInfo *wi, */ thin = ((line_width <= wi->max_line_width) && (line_width <= wi->max_point_width)); + color = ZnGetGradientColor(gradient, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); glColor4us(color->red, color->green, color->blue, alpha); SetLineStyle(wi, line_style); glLineWidth(line_width); @@ -1068,22 +1071,25 @@ RenderPolyline(WidgetInfo *wi, void -RenderImage(struct _WidgetInfo *wi, - ImageBits *image, /* ImageBits or BitmapBits */ - XColor *color, - int alpha, - ZnPoint *origin) +RenderImage(WidgetInfo *wi, + ImageBits *image, /* ImageBits or BitmapBits */ + ZnGradient *gradient, + ZnPoint *origin, + ZnBool modulate) { ZnReal nx, ny; + XColor *color; + int alpha; - alpha = alpha*wi->alpha/100*65535/100; + color = ZnGetGradientColor(gradient, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); nx = origin->x + image->width; ny = origin->y + image->height; glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, image->texture); - if (color) { + if (modulate) { glColor4us(color->red, color->green, color->blue, alpha); } else { @@ -1114,11 +1120,11 @@ RenderTile(struct _WidgetInfo *wi, int alpha, num_clips = ZnListSize(wi->clip_stack); if (gradient) { - ZnGetGradientColor(wi->win, gradient, 0.0, &alpha); - alpha = alpha*wi->alpha/100*65535/100; + ZnGetGradientColor(gradient, 0.0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); } else { - alpha = 65535*wi->alpha/100; + alpha = ZnComposeAlpha(100, wi->alpha); } if (cb) { @@ -1283,7 +1289,6 @@ RenderGradient(struct _WidgetInfo *wi, { int alpha, angle, i, j; int type = gradient->type; - int num_shades = gradient->num_shades; XColor *color; ZnPoint p; ZnPoint dposa, dposb, dposc, dposd; @@ -1342,12 +1347,12 @@ RenderGradient(struct _WidgetInfo *wi, */ glBegin(GL_QUAD_STRIP); for (i = 0; i < gradient->num_colors; i++) { - color = gradient->colors[i]->shades[0]; - alpha = gradient->colors[i]->alpha*wi->alpha/100*65535/100; + color = gradient->colors[i].rgb; + alpha = ZnComposeAlpha(gradient->colors[i].alpha, wi->alpha); glColor4us(color->red, color->green, color->blue, alpha); - pos = gradient->colors[i]->position; - control = gradient->colors[i]->control; + pos = gradient->colors[i].position; + control = gradient->colors[i].control; dposa.x = (quad[1].x - quad[0].x)*pos/100.0; dposa.y = (quad[1].y - quad[0].y)*pos/100.0; p.x = quad[0].x + dposa.x; @@ -1361,11 +1366,11 @@ RenderGradient(struct _WidgetInfo *wi, glVertex2f(p.x, p.y); if ((control != 50.0) && (i != gradient->num_colors-1)) { - color = gradient->colors[i]->shades[num_shades/2]; - alpha = gradient->colors[i]->alpha*wi->alpha/100*65535/100; + color = gradient->colors[i].mid_rgb; + alpha = ZnComposeAlpha(gradient->colors[i].mid_alpha, wi->alpha); glColor4us(color->red, color->green, color->blue, alpha); - npos = gradient->colors[i+1]->position; + npos = gradient->colors[i+1].position; dposc.x = (quad[1].x - quad[0].x)*npos/100.0; dposc.y = (quad[1].y - quad[0].y)*npos/100.0; dcontrol.x = (dposc.x - dposa.x)*control/100.0; @@ -1396,16 +1401,16 @@ RenderGradient(struct _WidgetInfo *wi, genarc = GetCirclePoints(3, ZN_CIRCLE_FINE, 0, 360, &num_p, NULL); radiusx = 0; radiusy = 0; - color = gradient->colors[0]->shades[0]; - alpha = gradient->colors[0]->alpha*wi->alpha/100*65535/100; - control = gradient->colors[0]->control; + color = gradient->colors[0].rgb; + alpha = ZnComposeAlpha(gradient->colors[0].alpha, wi->alpha); + control = gradient->colors[0].control; for (j = 1; j < gradient->num_colors; j++) { - radius2x = quad[1].x*gradient->colors[j]->position/100.0; - radius2y = quad[1].y*gradient->colors[j]->position/100.0; + radius2x = quad[1].x*gradient->colors[j].position/100.0; + radius2y = quad[1].y*gradient->colors[j].position/100.0; if ((control != 50) && (j != gradient->num_colors-1)) { glBegin(GL_QUAD_STRIP); - color2 = gradient->colors[j-1]->shades[num_shades/2]; - alpha2 = gradient->colors[j-1]->alpha*wi->alpha/100*65535/100; + color2 = gradient->colors[j-1].mid_rgb; + alpha2 = ZnComposeAlpha(gradient->colors[j-1].mid_alpha, wi->alpha); radius3x = radiusx + (radius2x-radiusx)*control/100.0; radius3y = radiusy + (radius2y-radiusy)*control/100.0; for (i = 0; i < num_p; i++) { @@ -1425,8 +1430,8 @@ RenderGradient(struct _WidgetInfo *wi, glEnd(); } glBegin(GL_QUAD_STRIP); - color2 = gradient->colors[j]->shades[0]; - alpha2 = gradient->colors[j]->alpha*wi->alpha/100*65535/100; + color2 = gradient->colors[j].rgb; + alpha2 = ZnComposeAlpha(gradient->colors[j].alpha, wi->alpha); for (i = 0; i < num_p; i++) { x = quad[0].x+genarc[i].x*radiusx; y = quad[0].y+genarc[i].y*radiusy; @@ -1442,7 +1447,7 @@ RenderGradient(struct _WidgetInfo *wi, radiusy = radius2y; color = color2; alpha = alpha2; - control = gradient->colors[j]->control; + control = gradient->colors[j].control; } } else if (type == ZN_PATH_GRADIENT) { @@ -1468,22 +1473,22 @@ RenderGradient(struct _WidgetInfo *wi, glBegin(GL_QUAD_STRIP); p.x = p.y = pp.x = pp.y = 0; - control = gradient->colors[0]->control; - position = gradient->colors[0]->position; - alpha = gradient->colors[0]->alpha*wi->alpha/100*65535/100; - color = gradient->colors[0]->shades[0]; + control = gradient->colors[0].control; + position = gradient->colors[0].position; + alpha = ZnComposeAlpha(gradient->colors[0].alpha, wi->alpha); + color = gradient->colors[0].rgb; glColor4us(color->red, color->green, color->blue, alpha); glVertex2f(quad[0].x+p.x, quad[0].y+p.y); glVertex2f(quad[0].x+pp.x, quad[0].y+pp.y); for (j = 0; j < gradient->num_colors-1; j++) { - position = gradient->colors[j+1]->position; + position = gradient->colors[j+1].position; p2.x = (points[i].x-quad[0].x)*position/100.0; p2.y = (points[i].y-quad[0].y)*position/100.0; pp2.x = (points[ii].x-quad[0].x)*position/100.0; pp2.y = (points[ii].y-quad[0].y)*position/100.0; if (control != 50) { - color = gradient->colors[j]->shades[num_shades/2]; - alpha = gradient->colors[j]->alpha*wi->alpha/100*65535/100; + color = gradient->colors[j].mid_rgb; + alpha = ZnComposeAlpha(gradient->colors[j].mid_alpha, wi->alpha); p3.x = p.x+(p2.x-p.x)*control/100.0; p3.y = p.y+(p2.y-p.y)*control/100.0; pp3.x = pp.x+(pp2.x-pp.x)*control/100.0; @@ -1492,9 +1497,9 @@ RenderGradient(struct _WidgetInfo *wi, glVertex2f(quad[0].x+p3.x, quad[0].y+p3.y); glVertex2f(quad[0].x+pp3.x, quad[0].y+pp3.y); } - control = gradient->colors[j+1]->control; - alpha = gradient->colors[j+1]->alpha*wi->alpha/100*65535/100; - color = gradient->colors[j+1]->shades[0]; + control = gradient->colors[j+1].control; + alpha = ZnComposeAlpha(gradient->colors[j+1].alpha, wi->alpha); + color = gradient->colors[j+1].rgb; p = p2; pp = pp2; glColor4us(color->red, color->green, color->blue, alpha); -- cgit v1.1