From 76e82090dd6eda66b6247bd6c5980e3b7a56c3ff Mon Sep 17 00:00:00 2001 From: lecoanet Date: Wed, 27 Jun 2001 08:37:09 +0000 Subject: correction de bugs sur les degrade reliefs --- generic/Color.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) (limited to 'generic/Color.c') diff --git a/generic/Color.c b/generic/Color.c index 64707b5..57702c3 100644 --- a/generic/Color.c +++ b/generic/Color.c @@ -920,7 +920,7 @@ ZnGetGradientColor(Tk_Window tkwin, { int index, min, max; ZnGradientColor *color, *next_color; - XColor *shade; + XColor *shade=NULL; ZnReal tt; if (!grad->realized) { @@ -949,11 +949,13 @@ ZnGetGradientColor(Tk_Window tkwin, } index = (max + min) / 2; } + /*printf("color index %d ", index);*/ color = grad->colors[index]; next_color = grad->colors[index+1]; - tt = ((position - (ZnReal) color->position) / - (ZnReal) ((next_color->position - color->position) / grad->num_shades)); - index = REAL_TO_INT(tt); + tt = (grad->num_shades * (position - (ZnReal) color->position) / + (ZnReal) (next_color->position - color->position)); + index = (int) tt; + /*printf("shade index %d %g\n", index, tt);*/ shade = color->shades[index]; } @@ -1040,37 +1042,37 @@ ZnGetReliefGradient(Tcl_Interp *interp, */ tmp1 = (30 * (int) base->red)/100; tmp2 = ((int) base->red)/2; - light_color.red = MIN(tmp1, tmp2); + dark_color.red = MIN(tmp1, tmp2); tmp1 = (30 * (int) base->green)/100; tmp2 = ((int) base->green)/2; - light_color.green = MIN(tmp1, tmp2); + dark_color.green = MIN(tmp1, tmp2); tmp1 = (30 * (int) base->blue)/100; tmp2 = ((int) base->blue)/2; - light_color.blue = MIN(tmp1, tmp2); + dark_color.blue = MIN(tmp1, tmp2); tmp1 = MAX_INTENSITY;/*(170 * (int) base->red)/10;*/ if (tmp1 > MAX_INTENSITY) { tmp1 = MAX_INTENSITY; } tmp2 = (MAX_INTENSITY + (int) base->red)/2; - dark_color.red = MAX(tmp1, tmp2); + light_color.red = MAX(tmp1, tmp2); tmp1 = MAX_INTENSITY;/*(170 * (int) base->green)/10;*/ if (tmp1 > MAX_INTENSITY) { tmp1 = MAX_INTENSITY; } tmp2 = (MAX_INTENSITY + (int) base->green)/2; - dark_color.green = MAX(tmp1, tmp2); + light_color.green = MAX(tmp1, tmp2); tmp1 = MAX_INTENSITY;/*(170 * (int) base->blue)/10;*/ if (tmp1 > MAX_INTENSITY) { tmp1 = MAX_INTENSITY; } tmp2 = (MAX_INTENSITY + (int) base->blue)/2; - dark_color.blue = MAX(tmp1, tmp2); + light_color.blue = MAX(tmp1, tmp2); - sprintf(color_name, "#%2d%2d%2d|#%2d%2d%2d|#%2d%2d%2d%%%d", - light_color.red, light_color.green, light_color.blue, - base->red, base->green, base->blue, - dark_color.red, dark_color.green, dark_color.blue, + sprintf(color_name, "#%02x%02x%02x|#%02x%02x%02x 50|#%02x%02x%02x%%%d", + dark_color.red/256, dark_color.green/256, dark_color.blue/256, + base->red/256, base->green/256, base->blue/256, + light_color.red/256, light_color.green/256, light_color.blue/256, RELIEF_STEPS); return ZnGetGradient(interp, tkwin, color_name); -- cgit v1.1