aboutsummaryrefslogtreecommitdiff
path: root/generic/Rectangle.c
diff options
context:
space:
mode:
authorlecoanet2001-11-12 09:44:39 +0000
committerlecoanet2001-11-12 09:44:39 +0000
commit47552fbc2ab589fd522ee343948a8891eb11d8bd (patch)
tree85c1a58f2bcc8bc97984a675895854c549f1f3be /generic/Rectangle.c
parent1fef084373b5ad9bfb10db7c80b6c601f7507f0a (diff)
downloadtkzinc-47552fbc2ab589fd522ee343948a8891eb11d8bd.zip
tkzinc-47552fbc2ab589fd522ee343948a8891eb11d8bd.tar.gz
tkzinc-47552fbc2ab589fd522ee343948a8891eb11d8bd.tar.bz2
tkzinc-47552fbc2ab589fd522ee343948a8891eb11d8bd.tar.xz
Correction de l'attribut fillcolor qui doit forcer le
recalcul des la geometrie. Les d�grad�s radiaux sont sensibles � la forme globale du rectangle. Ajustements pour �viter les erreurs de positionnements des diff�rents �l�ments du rectangle. Correction du trac� du relief.
Diffstat (limited to 'generic/Rectangle.c')
-rw-r--r--generic/Rectangle.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/generic/Rectangle.c b/generic/Rectangle.c
index 841a48e..1c78971 100644
--- a/generic/Rectangle.c
+++ b/generic/Rectangle.c
@@ -92,7 +92,7 @@ static ZnAttrConfig rect_attrs[] = {
ZN_COORDS_FLAG, False },
{ ZN_CONFIG_GRADIENT, "-fillcolor", NULL,
Tk_Offset(RectangleItemStruct, fill_color), 0,
- ZN_DRAW_FLAG|ZN_BORDER_FLAG, False },
+ ZN_COORDS_FLAG|ZN_BORDER_FLAG, False },
{ ZN_CONFIG_BOOL, "-filled", NULL,
Tk_Offset(RectangleItemStruct, flags), FILLED_BIT, ZN_COORDS_FLAG, False },
{ ZN_CONFIG_PATTERN, "-fillpattern", NULL,
@@ -467,24 +467,32 @@ ComputeCoordinates(Item item,
}
}
else if (rect->fill_color->type == ZN_RADIAL_GRADIENT) {
- ZnReal dist, new, x0, x, y0, y;
+ ZnReal dist, new, x, y, fact;
+ ZnPoint p1[4];
+ ZnBBox *bbox = &item->item_bounding_box;
+ ZnTransfo *transfo1;
if (!rect->grad_geo) {
rect->grad_geo = ZnMalloc(2*sizeof(ZnPoint));
}
ZnTransformPoint(wi->current_transfo, &rect->fill_color->g.p, &rect->grad_geo[0]);
- x0 = rect->grad_geo[0].x;
- y0 = rect->grad_geo[0].y;
+ transfo1 = ZnTransfoNew();
+ ZnTranslate(transfo1, -rect->grad_geo[0].x, -rect->grad_geo[0].y);
+ fact = (bbox->corner.x-bbox->orig.x)/(bbox->corner.y-bbox->orig.y);
+ ZnScale(transfo1, 1.0, fact);
+ ZnTransformPoints(transfo1, rect->dev, p1, 4);
dist = 0.0;
for (i = 0; i < 4; i++) {
- x = rect->dev[i].x;
- y = rect->dev[i].y;
- new = (x-x0)*(x-x0) + (y-y0)*(y-y0);
+ x = p1[i].x;
+ y = p1[i].y;
+ new = x*x+y*y;
if (new > dist) {
dist = new;
}
}
rect->grad_geo[1].x = sqrt(dist);
+ rect->grad_geo[1].y = rect->grad_geo[1].x / fact;
+ ZnTransfoFree(transfo1);
}
}
else {