aboutsummaryrefslogtreecommitdiff
path: root/generic/Arc.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/Arc.c')
-rw-r--r--generic/Arc.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/generic/Arc.c b/generic/Arc.c
index f3699c8..43aeb5c 100644
--- a/generic/Arc.c
+++ b/generic/Arc.c
@@ -73,8 +73,7 @@ typedef struct _ArcItemStruct {
int angle_extent;
Pixmap line_pattern;
Pixmap fill_pattern;
- ZnColorGradient fill_color;
- ZnGradientGeom grad_geom;
+ ZnGradient *fill_color;
ZnColor line_color;
int line_width;
LineStyle line_style;
@@ -112,7 +111,7 @@ static ZnAttrConfig arc_attrs[] = {
Tk_Offset(ArcItemStruct, angle_extent), 0, ZN_COORDS_FLAG, False },
{ ZN_CONFIG_UINT, "-fillalpha", NULL,
Tk_Offset(ArcItemStruct, fill_alpha), 0, ZN_DRAW_FLAG, False },
- { ZN_CONFIG_GRADIENT_COLOR, "-fillcolor", NULL,
+ { ZN_CONFIG_GRADIENT, "-fillcolor", NULL,
Tk_Offset(ArcItemStruct, fill_color), 0, ZN_DRAW_FLAG, False },
{ ZN_CONFIG_BOOL, "-filled", NULL,
Tk_Offset(ArcItemStruct, flags), FILLED_BIT, ZN_COORDS_FLAG, False },
@@ -120,8 +119,6 @@ static ZnAttrConfig arc_attrs[] = {
Tk_Offset(ArcItemStruct, fill_pattern), 0, ZN_DRAW_FLAG, False },
{ ZN_CONFIG_LINE_END, "-firstend", NULL,
Tk_Offset(ArcItemStruct, first_end), 0, ZN_COORDS_FLAG, False },
- { ZN_CONFIG_GRADIENT_GEOM, "-gradient", NULL,
- Tk_Offset(ArcItemStruct, grad_geom), 0, ZN_COORDS_FLAG, False },
{ ZN_CONFIG_LINE_END, "-lastend", NULL,
Tk_Offset(ArcItemStruct, last_end), 0, ZN_COORDS_FLAG, False },
{ ZN_CONFIG_UINT, "-linealpha", NULL,
@@ -237,11 +234,10 @@ Init(Item item,
(*argc)--;
arc->fill_alpha = 255;
- arc->fill_color = ZnGetColorGradient(wi->interp, wi->win,
- ZnNameOfColor(wi->fore_color));
+ arc->fill_color = ZnGetGradient(wi->interp, wi->win,
+ ZnNameOfColor(wi->fore_color));
arc->line_alpha = 255;
arc->line_color = ZnGetColorByValue(wi->win, wi->fore_color);
- arc->grad_geom = NULL;
#ifdef LIBART
arc->outline_svp = arc->fill_svp = NULL;
#endif
@@ -286,10 +282,7 @@ Clone(Item item)
Tk_NameOfBitmap(wi->dpy, arc->fill_pattern));
}
arc->line_color = ZnGetColorByValue(wi->win, arc->line_color);
- arc->fill_color = ZnGetColorGradientByValue(arc->fill_color);
- if (arc->grad_geom) {
- arc->grad_geom = GradientGeomDuplicate(arc->grad_geom);
- }
+ arc->fill_color = ZnGetGradientByValue(arc->fill_color);
#ifdef LIBART
arc->outline_svp = arc->fill_svp = NULL;
#endif
@@ -340,11 +333,8 @@ Destroy(Item item)
if (arc->fill_pattern != ZnUnspecifiedPattern) {
Tk_FreeBitmap(wi->dpy, arc->fill_pattern);
}
- ZnFreeColorGradient(arc->fill_color);
+ ZnFreeGradient(arc->fill_color);
ZnFreeColor(arc->line_color);
- if (arc->grad_geom) {
- GradientGeomDelete(arc->grad_geom);
- }
}
@@ -534,7 +524,7 @@ ComputeCoordinates(Item item,
width_2 = (arc->coords[1].x - arc->coords[0].x)/2.0;
height_2 = (arc->coords[1].y - arc->coords[0].y)/2.0;
if (((angle >= PRECISION_LIMIT) && ((width_2 - height_2) > PRECISION_LIMIT)) ||
- arc->grad_geom || wi->render) {
+ !ZnGradientFlat(arc->fill_color) || wi->render) {
SET(arc->flags, USING_POLY_BIT);
if (!arc->render_shape) {
arc->render_shape = ZnListNew(4, sizeof(ZnPoint));
@@ -1067,14 +1057,15 @@ Draw(Item item)
/* Fill if requested */
if (ISSET(arc->flags, FILLED_BIT)) {
- if (arc->grad_geom) {
+ if (!ZnGradientFlat(arc->fill_color)) {
ZnPoly poly;
POLY_CONTOUR1(&poly, p, num_points);
- DrawPolygonGradient(wi, arc->grad_geom, arc->fill_color, &poly,
+ DrawPolygonGradient(wi, arc->fill_color, &poly,
&item->item_bounding_box);
}
else {
- values.foreground = ZnPixel(ZnColorGradientMidColor(wi->win, arc->fill_color));
+ values.foreground = ZnPixel(ZnGetGradientColor(wi->win,
+ arc->fill_color, 50.0));
values.arc_mode = ISSET(arc->flags, PIE_SLICE_BIT) ? ArcPieSlice : ArcChord;
if (arc->tile != ZnUnspecifiedImage) { /* Fill Tiled */
Pixmap pmap = GetImagePixmap(wi->win, arc->tile_name, arc->tile, NULL);
@@ -1232,7 +1223,7 @@ Render(Item item)
#ifdef LIBART
WidgetInfo *wi = item->wi;
ArcItem arc = (ArcItem) item;
- XColor *color = ZnColorGradientMidColor(wi->win, arc->fill_color);
+ XColor *color = ZnGetGradientColor(wi->win, arc->fill_color, 50.0);
ArtPixBuf *pixbuf = NULL;
if (arc->fill_svp != NULL) {