From 47552fbc2ab589fd522ee343948a8891eb11d8bd Mon Sep 17 00:00:00 2001 From: lecoanet Date: Mon, 12 Nov 2001 09:44:39 +0000 Subject: 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. --- generic/Rectangle.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'generic/Rectangle.c') 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 { -- cgit v1.1