aboutsummaryrefslogtreecommitdiff
path: root/generic/Triangles.c
diff options
context:
space:
mode:
authorlecoanet2002-02-18 16:03:54 +0000
committerlecoanet2002-02-18 16:03:54 +0000
commit6b36f92065f054abd810d956169a87180677d4f7 (patch)
treed2d16c8be93c67d15670eccce326dba5276acda1 /generic/Triangles.c
parent67dd05047282a179b5fac88564bb3494a69ecd23 (diff)
downloadtkzinc-6b36f92065f054abd810d956169a87180677d4f7.zip
tkzinc-6b36f92065f054abd810d956169a87180677d4f7.tar.gz
tkzinc-6b36f92065f054abd810d956169a87180677d4f7.tar.bz2
tkzinc-6b36f92065f054abd810d956169a87180677d4f7.tar.xz
Passage des couleurs en gradients pour uniformiser
Diffstat (limited to 'generic/Triangles.c')
-rw-r--r--generic/Triangles.c86
1 files changed, 44 insertions, 42 deletions
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);
}