aboutsummaryrefslogtreecommitdiff
path: root/generic/Draw.c
diff options
context:
space:
mode:
authorlecoanet2001-06-27 08:37:09 +0000
committerlecoanet2001-06-27 08:37:09 +0000
commit76e82090dd6eda66b6247bd6c5980e3b7a56c3ff (patch)
treee0fe884fa6ca62b0fc7ecdf61759c66af6c5353c /generic/Draw.c
parentaf7f21c4c8676b8a66b2b1c22a847ae08817b34a (diff)
downloadtkzinc-76e82090dd6eda66b6247bd6c5980e3b7a56c3ff.zip
tkzinc-76e82090dd6eda66b6247bd6c5980e3b7a56c3ff.tar.gz
tkzinc-76e82090dd6eda66b6247bd6c5980e3b7a56c3ff.tar.bz2
tkzinc-76e82090dd6eda66b6247bd6c5980e3b7a56c3ff.tar.xz
correction de bugs sur les degrade reliefs
Diffstat (limited to 'generic/Draw.c')
-rw-r--r--generic/Draw.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/generic/Draw.c b/generic/Draw.c
index ce48b3d..cc5378c 100644
--- a/generic/Draw.c
+++ b/generic/Draw.c
@@ -321,27 +321,42 @@ ReliefColorOfSegment(ZnReal x1,
WidgetInfo *wi)
{
ZnReal angle, angle_step, origin, position;
- int num_colors;
+ int num_colors, color_index;
num_colors = RELIEF_STEPS*2+1;
- angle_step = 2*M_PI / num_colors;
+ angle_step = M_PI / (num_colors-1);
origin = -(DegreesToRadian(wi->light_angle))-(angle_step/2.0);
if (relief == RELIEF_BEVEL_IN) {
origin += M_PI;
}
- angle = (ProjectionToAngle(y1 - y2, x2 - x1) + M_PI - origin);
+ angle = ProjectionToAngle(y1 - y2, x2 - x1) + M_PI - origin;
while (angle < 0.0) {
angle += 2*M_PI;
}
while (angle > 2*M_PI) {
angle -= 2*M_PI;
}
- position = (angle/angle_step)*(100/num_colors);
- /*printf("position %g, angle %g, origin %g\n",
- position,
- RadianToDegrees(angle),
- RadianToDegrees(origin));*/
+
+ color_index = (int) (angle/angle_step);
+ if (color_index > num_colors-1) {
+ color_index = 2*(num_colors-1)-color_index;
+ }
+ if ((color_index < 0) || (color_index >= num_colors)) {
+ printf("Color index out of gradient (should not happen).\n");
+ if (color_index < 0) {
+ color_index = 0;
+ }
+ if (color_index >= num_colors) {
+ color_index = num_colors-1;
+ }
+ }
+ position = 100*color_index/num_colors;
+ /*printf("position %g, angle %g(%g), origin %g\n",
+ position,
+ RadianToDegrees(angle),
+ angle,
+ RadianToDegrees(origin));*/
return ZnPixel(ZnGetGradientColor(wi->win, gradient, position));
}