From 6b36f92065f054abd810d956169a87180677d4f7 Mon Sep 17 00:00:00 2001 From: lecoanet Date: Mon, 18 Feb 2002 16:03:54 +0000 Subject: Passage des couleurs en gradients pour uniformiser --- generic/Triangles.c | 86 +++++++++++++++++++++++++++-------------------------- 1 file changed, 44 insertions(+), 42 deletions(-) (limited to 'generic/Triangles.c') diff --git a/generic/Triangles.c b/generic/Triangles.c index 183146d..d8596b4 100644 --- a/generic/Triangles.c +++ b/generic/Triangles.c @@ -70,7 +70,7 @@ typedef struct _TrianglesItemStruct { static ZnAttrConfig tr_attrs[] = { - { ZN_CONFIG_COLORS, "-colors", NULL, + { ZN_CONFIG_GRADIENTS, "-colors", NULL, Tk_Offset(TrianglesItemStruct, colors), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-composerotation", NULL, Tk_Offset(TrianglesItemStruct, header.flags), COMPOSE_ROTATION_BIT, @@ -108,12 +108,12 @@ Init(Item item, int *argc, Tcl_Obj *CONST *args[]) { - WidgetInfo *wi = item->wi; - TrianglesItem tr = (TrianglesItem) item; - Tcl_Obj **elems; - int i, num_elems; - ZnPoint p; - ZnGradientColor *colors; + WidgetInfo *wi = item->wi; + TrianglesItem tr = (TrianglesItem) item; + Tcl_Obj **elems; + int i, num_elems; + ZnPoint p; + ZnGradient **grads; tr->dev_points.num_strips = 0; @@ -152,11 +152,10 @@ Init(Item item, (*argc)--; CLEAR(tr->flags, FAN_BIT); - tr->colors = ZnListNew(1, sizeof(ZnGradientColor)); + tr->colors = ZnListNew(1, sizeof(ZnGradient *)); ZnListAssertSize(tr->colors, 1); - colors = ZnListArray(tr->colors); - colors->alpha = 100; - colors->shades[0] = ZnGetColorByValue(wi->win, wi->fore_color); + grads = ZnListArray(tr->colors); + *grads = ZnGetGradientByValue(wi->fore_gradient); return ZN_OK; } @@ -172,18 +171,17 @@ Init(Item item, static void Clone(Item item) { - WidgetInfo *wi = item->wi; TrianglesItem tr = (TrianglesItem) item; if (tr->colors) { - int i, num_colors; - ZnGradientColor *colors; + int i, num_grads; + ZnGradient **grads; tr->colors = ZnListDuplicate(tr->colors); - num_colors = ZnListSize(tr->colors); - colors = ZnListArray(tr->colors); - for (i = 0; i < num_colors; i++, colors++) { - colors->shades[0] = ZnGetColorByValue(wi->win, colors->shades[0]); + num_grads = ZnListSize(tr->colors); + grads = ZnListArray(tr->colors); + for (i = 0; i < num_grads; i++, grads++) { + *grads = ZnGetGradientByValue(*grads); } } @@ -214,13 +212,13 @@ Destroy(Item item) ZnFree(tr->dev_points.strips->points); } if (tr->colors) { - int i, num_colors; - ZnGradientColor *colors; + int i, num_grads; + ZnGradient **grads; - num_colors = ZnListSize(tr->colors); - colors = ZnListArray(tr->colors); - for (i = 0; i < num_colors; i++, colors++) { - ZnFreeColor(colors->shades[0]); + num_grads = ZnListSize(tr->colors); + grads = ZnListArray(tr->colors); + for (i = 0; i < num_grads; i++, grads++) { + ZnFreeGradient(*grads); } ZnListFree(tr->colors); } @@ -405,11 +403,11 @@ ToArea(Item item, static void Draw(Item item) { - WidgetInfo *wi = item->wi; - TrianglesItem tr = (TrianglesItem) item; - int i, num_points, last_color_index; - ZnPoint *points; - ZnGradientColor *colors; + WidgetInfo *wi = item->wi; + TrianglesItem tr = (TrianglesItem) item; + int i, num_points, last_color_index; + ZnPoint *points; + ZnGradient **grads; if (tr->dev_points.num_strips == 0) { return; @@ -418,7 +416,7 @@ Draw(Item item) points = tr->dev_points.strips->points; num_points = tr->dev_points.strips->num_points; - colors = ZnListArray(tr->colors); + grads = ZnListArray(tr->colors); last_color_index = ZnListSize(tr->colors)-1; XSetFillStyle(wi->dpy, wi->gc, FillSolid); @@ -432,7 +430,8 @@ Draw(Item item) } for (i = 0; i < num_points-2; i++, xpoints++) { if (i <= last_color_index) { - XSetForeground(wi->dpy, wi->gc, ZnPixel(colors[i].shades[0])); + XSetForeground(wi->dpy, wi->gc, + ZnPixel(ZnGetGradientColor(grads[i], 0, NULL))); } XFillPolygon(wi->dpy, wi->draw_buffer, wi->gc, xpoints, 3, Convex, CoordModeOrigin); @@ -450,7 +449,8 @@ Draw(Item item) points += 3; for (i = 0; i < num_points-2; i++, points++) { if (i <= last_color_index) { - XSetForeground(wi->dpy, wi->gc, ZnPixel(colors[i].shades[0])); + XSetForeground(wi->dpy, wi->gc, + ZnPixel(ZnGetGradientColor(grads[i], 0.0, NULL))); } XFillPolygon(wi->dpy, wi->draw_buffer, wi->gc, tri, 3, Convex, CoordModeOrigin); @@ -472,13 +472,14 @@ Draw(Item item) static void Render(Item item) { - WidgetInfo *wi = item->wi; - TrianglesItem tr = (TrianglesItem) item; - int i, num_points, last_color_index; - ZnPoint *points; - ZnGradientColor *colors; - int alpha; - + WidgetInfo *wi = item->wi; + TrianglesItem tr = (TrianglesItem) item; + int i, num_points, last_color_index; + ZnPoint *points; + ZnGradient **grads; + int alpha; + XColor *color; + if (tr->dev_points.num_strips == 0) { return; } @@ -486,7 +487,7 @@ Render(Item item) points = tr->dev_points.strips->points; num_points = tr->dev_points.strips->num_points; - colors = ZnListArray(tr->colors); + grads = ZnListArray(tr->colors); last_color_index = ZnListSize(tr->colors)-1; glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); @@ -499,8 +500,9 @@ Render(Item item) for (i = 0; i < num_points; i++, points++) { if (i <= last_color_index) { - alpha = (colors[i].alpha*wi->alpha/100)*65535/100; - glColor4us(colors[i].shades[0]->red, colors[i].shades[0]->green, colors[i].shades[0]->blue, alpha); + color = ZnGetGradientColor(grads[i], 0.0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); } glVertex2f(points->x, points->y); } -- cgit v1.1