diff options
Diffstat (limited to 'generic/Reticle.c')
-rw-r--r-- | generic/Reticle.c | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/generic/Reticle.c b/generic/Reticle.c index 1224e05..469bf9b 100644 --- a/generic/Reticle.c +++ b/generic/Reticle.c @@ -52,25 +52,25 @@ typedef struct _ReticleItemStruct { ItemStruct header; /* Public data */ - ZnPoint pos; /* Origin world coordinates */ - ZnColor line_color; /* circle color */ - ZnColor bright_line_color; /* intermediate circle color */ - ZnDim first_radius; /* first world radius */ - ZnDim step_size; /* step world size */ - int period; /* bright circle period */ - int num_circles; /* num cercles max */ - LineStyle line_style; /* circles lines styles */ - LineStyle bright_line_style; + ZnPoint pos; /* Origin world coordinates */ + ZnGradient *line_color; /* circle color */ + ZnGradient *bright_line_color; /* intermediate circle color */ + ZnDim first_radius; /* first world radius */ + ZnDim step_size; /* step world size */ + int period; /* bright circle period */ + int num_circles; /* num cercles max */ + LineStyle line_style; /* circles lines styles */ + LineStyle bright_line_style; /* Private data */ - ZnPoint dev; /* item device coordinate */ - ZnDim first_radius_dev; /* first device radius */ - ZnDim step_size_dev; /* steps device size */ + ZnPoint dev; /* item device coordinate */ + ZnDim first_radius_dev; /* first device radius */ + ZnDim step_size_dev; /* steps device size */ } ReticleItemStruct, *ReticleItem; static ZnAttrConfig reticle_attrs[] = { - { ZN_CONFIG_COLOR, "-brightlinecolor", NULL, + { ZN_CONFIG_GRADIENT, "-brightlinecolor", NULL, Tk_Offset(ReticleItemStruct, bright_line_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_LINE_STYLE, "-brightlinestyle", NULL, Tk_Offset(ReticleItemStruct, bright_line_style), 0, ZN_DRAW_FLAG, False }, @@ -86,7 +86,7 @@ static ZnAttrConfig reticle_attrs[] = { { ZN_CONFIG_DIM, "-firstradius", NULL, Tk_Offset(ReticleItemStruct, first_radius), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-linecolor", NULL, + { ZN_CONFIG_GRADIENT, "-linecolor", NULL, Tk_Offset(ReticleItemStruct, line_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_LINE_STYLE, "-linestyle", NULL, Tk_Offset(ReticleItemStruct, line_style), 0, ZN_DRAW_FLAG, False }, @@ -135,8 +135,8 @@ Init(Item item, SET(item->flags, COMPOSE_SCALE_BIT); item->priority = DEFAULT_RETICLE_PRIORITY; item->part_sensitive = 0; - reticle->line_color = ZnGetColorByValue(wi->win, wi->fore_color); - reticle->bright_line_color = ZnGetColorByValue(wi->win, wi->fore_color); + reticle->line_color = ZnGetGradientByValue(wi->fore_gradient); + reticle->bright_line_color = ZnGetGradientByValue(wi->fore_gradient); reticle->first_radius = DEFAULT_RETICLE_STEP_SIZE; reticle->step_size = DEFAULT_RETICLE_STEP_SIZE; reticle->period = DEFAULT_RETICLE_PERIOD; @@ -167,9 +167,8 @@ Clone(Item item) WidgetInfo *wi = item->wi; ReticleItem reticle = (ReticleItem) item; - reticle->line_color = ZnGetColorByValue(wi->win, reticle->line_color); - reticle->bright_line_color = ZnGetColorByValue(wi->win, - reticle->bright_line_color); + reticle->line_color = ZnGetGradientByValue(reticle->line_color); + reticle->bright_line_color = ZnGetGradientByValue(reticle->bright_line_color); } @@ -185,8 +184,8 @@ Destroy(Item item) { ReticleItem reticle = (ReticleItem) item; - ZnFreeColor(reticle->line_color); - ZnFreeColor(reticle->bright_line_color); + ZnFreeGradient(reticle->line_color); + ZnFreeGradient(reticle->bright_line_color); } @@ -338,7 +337,7 @@ Draw(Item item) while (radius <= radius_max_dev) { SetLineStyle(wi, reticle->line_style); - values.foreground = ZnPixel(reticle->line_color); + values.foreground = ZnPixel(ZnGetGradientColor(reticle->line_color, 0, NULL)); values.line_width = 0; values.fill_style = FillSolid; XChangeGC(wi->dpy, wi->gc, GCForeground | GCLineWidth | GCFillStyle, &values); @@ -361,7 +360,7 @@ Draw(Item item) (reticle->dev.y >= wi->damaged_area.orig.y - radius) && (reticle->dev.y <= wi->damaged_area.corner.y + radius)) { SetLineStyle(wi, reticle->bright_line_style); - values.foreground = ZnPixel(reticle->bright_line_color); + values.foreground = ZnPixel(ZnGetGradientColor(reticle->bright_line_color, 0, NULL)); values.line_width = 0; values.fill_style = FillSolid; XChangeGC(wi->dpy, wi->gc, GCForeground | GCLineWidth | GCFillStyle, &values); @@ -394,7 +393,8 @@ Render(Item item) unsigned int i, j; ZnPoint *genarc; int num_p, alpha; - + XColor *color; + xo = reticle->dev.x; yo = reticle->dev.y; /* Compute radius max */ @@ -430,13 +430,13 @@ Render(Item item) (reticle->num_circles - 1) * reticle->step_size_dev); } - alpha = 65535*wi->alpha/100; genarc = GetCirclePoints(3, ZN_CIRCLE_FINEST, 0, 360, &num_p, NULL); glLineWidth(1); while (radius <= radius_max_dev) { SetLineStyle(wi, reticle->line_style); - glColor4us(reticle->line_color->red, reticle->line_color->green, - reticle->line_color->blue, alpha); + color = ZnGetGradientColor(reticle->line_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); for (i = 1; (radius <= radius_max_dev && i < reticle->period); i++) { if ((xo >= wi->damaged_area.orig.x - radius) && (xo <= wi->damaged_area.corner.x + radius) && @@ -458,8 +458,9 @@ Render(Item item) (yo >= wi->damaged_area.orig.y - radius) && (yo <= wi->damaged_area.corner.y + radius)) { SetLineStyle(wi, reticle->bright_line_style); - glColor4us(reticle->bright_line_color->red, reticle->bright_line_color->green, - reticle->bright_line_color->blue, alpha); + color = ZnGetGradientColor(reticle->bright_line_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); glBegin(GL_LINE_LOOP); for (j = 0; j < num_p; j++) { x = xo + genarc[j].x * radius; |