diff options
author | lecoanet | 2001-11-12 09:44:39 +0000 |
---|---|---|
committer | lecoanet | 2001-11-12 09:44:39 +0000 |
commit | 47552fbc2ab589fd522ee343948a8891eb11d8bd (patch) | |
tree | 85c1a58f2bcc8bc97984a675895854c549f1f3be /generic/Rectangle.c | |
parent | 1fef084373b5ad9bfb10db7c80b6c601f7507f0a (diff) | |
download | tkzinc-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.c | 22 |
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 { |