aboutsummaryrefslogtreecommitdiff
path: root/generic/Draw.c
diff options
context:
space:
mode:
authorlecoanet2002-02-18 16:03:54 +0000
committerlecoanet2002-02-18 16:03:54 +0000
commit6b36f92065f054abd810d956169a87180677d4f7 (patch)
treed2d16c8be93c67d15670eccce326dba5276acda1 /generic/Draw.c
parent67dd05047282a179b5fac88564bb3494a69ecd23 (diff)
downloadtkzinc-6b36f92065f054abd810d956169a87180677d4f7.zip
tkzinc-6b36f92065f054abd810d956169a87180677d4f7.tar.gz
tkzinc-6b36f92065f054abd810d956169a87180677d4f7.tar.bz2
tkzinc-6b36f92065f054abd810d956169a87180677d4f7.tar.xz
Passage des couleurs en gradients pour uniformiser
Diffstat (limited to 'generic/Draw.c')
-rw-r--r--generic/Draw.c91
1 files changed, 48 insertions, 43 deletions
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);