diff options
Diffstat (limited to 'generic/Track.c')
-rw-r--r-- | generic/Track.c | 180 |
1 files changed, 90 insertions, 90 deletions
diff --git a/generic/Track.c b/generic/Track.c index 4053cf6..74339d0 100644 --- a/generic/Track.c +++ b/generic/Track.c @@ -80,43 +80,42 @@ typedef struct _TrackItemStruct { ItemStruct header; /* Public data */ - unsigned char flags; - Pixmap symbol; /* item symbol */ - ZnColor symbol_color; - int label_angle; /* Label angle from track. */ - ZnDim label_distance; /* Label distance from track. */ - ZnDim label_dx; /* Label dx/dy from track. */ - ZnDim label_dy; - ZnAnchor label_anchor; - LeaderAnchors leader_anchors; /* Spec of the leader attachment */ - ZnColor leader_color; /* leader color */ - LineStyle leader_style; - LineShape leader_shape; - ZnLineEnd leader_first_end; - ZnLineEnd leader_last_end; - ZnDim leader_width; - ZnDim marker_size; /* world size of error circle */ - ZnColor marker_color; /* error circle color */ - LineStyle marker_style; /* error circle style */ - Pixmap marker_fill_pattern; /* error circle fill pattern */ - ZnColor connection_color; /* connection color */ - LineStyle connection_style; - ZnDim connection_width; - ZnColor speed_vector_color; /* s. v. color */ - int speed_vector_alpha; - int visible_history_size; /* Number of visible positions */ - ZnPoint pos; /* item world coordinates */ - ZnPoint speed_vector; /* s. v. slope in world coord */ - ZnDim speed_vector_width; - ZnColor history_color; + unsigned char flags; + Pixmap symbol; /* item symbol */ + ZnGradient *symbol_color; + int label_angle; /* Label angle from track. */ + ZnDim label_distance; /* Label distance from track. */ + ZnDim label_dx; /* Label dx/dy from track. */ + ZnDim label_dy; + ZnAnchor label_anchor; + LeaderAnchors leader_anchors; /* Spec of the leader attachment */ + ZnGradient *leader_color; /* leader color */ + LineStyle leader_style; + LineShape leader_shape; + ZnLineEnd leader_first_end; + ZnLineEnd leader_last_end; + ZnDim leader_width; + ZnDim marker_size; /* world size of error circle */ + ZnGradient *marker_color; /* error circle color */ + LineStyle marker_style; /* error circle style */ + Pixmap marker_fill_pattern; /* error circle fill pattern */ + ZnGradient *connection_color; /* connection color */ + LineStyle connection_style; + ZnDim connection_width; + ZnGradient *speed_vector_color; /* s. v. color */ + int visible_history_size; /* Number of visible positions */ + ZnPoint pos; /* item world coordinates */ + ZnPoint speed_vector; /* s. v. slope in world coord */ + ZnDim speed_vector_width; + ZnGradient *history_color; /* Private data */ - FieldSetStruct field_set; - ZnPoint dev; /* device coords of current pos */ - ZnPoint speed_vector_dev; /* s. v. end in device coord */ - ZnDim marker_size_dev; /* dev size of error circle */ - ZnList history; /* pos list */ - ZnList leader_points; + FieldSetStruct field_set; + ZnPoint dev; /* device coords of current pos */ + ZnPoint speed_vector_dev; /* s. v. end in device coord */ + ZnDim marker_size_dev; /* dev size of error circle */ + ZnList history; /* pos list */ + ZnList leader_points; } TrackItemStruct, *TrackItem; @@ -132,7 +131,7 @@ static ZnAttrConfig track_attrs[] = { { ZN_CONFIG_ITEM, "-connecteditem", NULL, Tk_Offset(TrackItemStruct, header.connected_item), 0, ZN_COORDS_FLAG|ZN_ITEM_FLAG, False }, - { ZN_CONFIG_COLOR, "-connectioncolor", NULL, + { ZN_CONFIG_GRADIENT, "-connectioncolor", NULL, Tk_Offset(TrackItemStruct, connection_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-connectionsensitive", NULL, Tk_Offset(TrackItemStruct, header.part_sensitive), PART_NUMBER_TO_BIT(CONNECTION), @@ -147,7 +146,7 @@ static ZnAttrConfig track_attrs[] = { Tk_Offset(TrackItemStruct, flags), MARKER_FILLED_BIT, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-frozenlabel", NULL, Tk_Offset(TrackItemStruct, flags), FROZEN_LABEL_BIT, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-historycolor", NULL, + { ZN_CONFIG_GRADIENT, "-historycolor", NULL, Tk_Offset(TrackItemStruct, history_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_ANCHOR, "-labelanchor", NULL, Tk_Offset(TrackItemStruct, label_anchor), 0, ZN_COORDS_FLAG, False }, @@ -170,7 +169,7 @@ static ZnAttrConfig track_attrs[] = { Tk_Offset(TrackItemStruct, flags), LAST_AS_FIRST_BIT, ZN_DRAW_FLAG, False }, { ZN_CONFIG_LEADER_ANCHORS, "-leaderanchors", NULL, Tk_Offset(TrackItemStruct, leader_anchors), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-leadercolor", NULL, + { ZN_CONFIG_GRADIENT, "-leadercolor", NULL, Tk_Offset(TrackItemStruct, leader_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_LINE_END, "-leaderfirstend", NULL, Tk_Offset(TrackItemStruct, leader_first_end), 0, ZN_COORDS_FLAG, False }, @@ -185,7 +184,7 @@ static ZnAttrConfig track_attrs[] = { Tk_Offset(TrackItemStruct, leader_shape), 0, ZN_COORDS_FLAG, False }, { ZN_CONFIG_DIM, "-leaderwidth", NULL, Tk_Offset(TrackItemStruct, leader_width), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-markercolor", NULL, + { ZN_CONFIG_GRADIENT, "-markercolor", NULL, Tk_Offset(TrackItemStruct, marker_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_PATTERN, "-markerfillpattern", NULL, Tk_Offset(TrackItemStruct, marker_fill_pattern), 0, ZN_DRAW_FLAG, False }, @@ -206,9 +205,7 @@ static ZnAttrConfig track_attrs[] = { Tk_Offset(TrackItemStruct, header.flags), SENSITIVE_BIT, ZN_REPICK_FLAG, False }, { ZN_CONFIG_POINT, "-speedvector", NULL, Tk_Offset(TrackItemStruct, speed_vector), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-speedvectoralpha", NULL, - Tk_Offset(TrackItemStruct, speed_vector_alpha), 0, ZN_DRAW_FLAG, False }, - { ZN_CONFIG_COLOR, "-speedvectorcolor", NULL, + { ZN_CONFIG_GRADIENT, "-speedvectorcolor", NULL, Tk_Offset(TrackItemStruct, speed_vector_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-speedvectormark", NULL, Tk_Offset(TrackItemStruct, flags), SV_MARK_BIT, ZN_COORDS_FLAG, False }, @@ -221,7 +218,7 @@ static ZnAttrConfig track_attrs[] = { Tk_Offset(TrackItemStruct, speed_vector_width), 0, ZN_COORDS_FLAG, False }, { ZN_CONFIG_PATTERN, "-symbol", NULL, Tk_Offset(TrackItemStruct, symbol), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-symbolcolor", NULL, + { ZN_CONFIG_GRADIENT, "-symbolcolor", NULL, Tk_Offset(TrackItemStruct, symbol_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-symbolsensitive", NULL, Tk_Offset(TrackItemStruct, header.part_sensitive), PART_NUMBER_TO_BIT(CURRENT_POSITION), @@ -247,7 +244,7 @@ static ZnAttrConfig wp_attrs[] = { { ZN_CONFIG_ITEM, "-connecteditem", NULL, Tk_Offset(TrackItemStruct, header.connected_item), 0, ZN_COORDS_FLAG|ZN_ITEM_FLAG, False }, - { ZN_CONFIG_COLOR, "-connectioncolor", NULL, + { ZN_CONFIG_GRADIENT, "-connectioncolor", NULL, Tk_Offset(TrackItemStruct, connection_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-connectionsensitive", NULL, Tk_Offset(TrackItemStruct, header.part_sensitive), PART_NUMBER_TO_BIT(CONNECTION), @@ -277,7 +274,7 @@ static ZnAttrConfig wp_attrs[] = { ZN_COORDS_FLAG|ZN_CLFC_FLAG, False }, { ZN_CONFIG_LEADER_ANCHORS, "-leaderanchors", NULL, Tk_Offset(TrackItemStruct, leader_anchors), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-leadercolor", NULL, + { ZN_CONFIG_GRADIENT, "-leadercolor", NULL, Tk_Offset(TrackItemStruct, leader_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_LINE_END, "-leaderfirstend", NULL, Tk_Offset(TrackItemStruct, leader_first_end), 0, ZN_COORDS_FLAG, False }, @@ -292,7 +289,7 @@ static ZnAttrConfig wp_attrs[] = { Tk_Offset(TrackItemStruct, leader_style), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_DIM, "-leaderwidth", NULL, Tk_Offset(TrackItemStruct, leader_width), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-markercolor", NULL, + { ZN_CONFIG_GRADIENT, "-markercolor", NULL, Tk_Offset(TrackItemStruct, marker_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_PATTERN, "-markerfillpattern", NULL, Tk_Offset(TrackItemStruct, marker_fill_pattern), 0, ZN_DRAW_FLAG, False }, @@ -311,7 +308,7 @@ static ZnAttrConfig wp_attrs[] = { Tk_Offset(TrackItemStruct, header.flags), SENSITIVE_BIT, ZN_REPICK_FLAG, False }, { ZN_CONFIG_PATTERN, "-symbol", NULL, Tk_Offset(TrackItemStruct, symbol), 0, ZN_COORDS_FLAG, False }, - { ZN_CONFIG_COLOR, "-symbolcolor", NULL, + { ZN_CONFIG_GRADIENT, "-symbolcolor", NULL, Tk_Offset(TrackItemStruct, symbol_color), 0, ZN_DRAW_FLAG, False }, { ZN_CONFIG_BOOL, "-symbolsensitive", NULL, Tk_Offset(TrackItemStruct, header.part_sensitive), PART_NUMBER_TO_BIT(CURRENT_POSITION), @@ -353,7 +350,7 @@ Init(Item item, SET(item->part_sensitive, PART_NUMBER_TO_BIT(LEADER)); SET(item->part_sensitive, PART_NUMBER_TO_BIT(CONNECTION)); SET(item->part_sensitive, PART_NUMBER_TO_BIT(SPEED_VECTOR)); - track->symbol_color = ZnGetColorByValue(wi->win, wi->fore_color); + track->symbol_color = ZnGetGradientByValue(wi->fore_gradient); track->symbol = Tk_GetBitmap(wi->interp, wi->win, Tk_GetUid("AtcSymbol15")); track->label_anchor = ZnAnchorCenter; track->label_angle = DEFAULT_LABEL_ANGLE; @@ -361,19 +358,18 @@ Init(Item item, SET(track->flags, POLAR_BIT); CLEAR(track->flags, FROZEN_LABEL_BIT); track->leader_anchors = NULL; - track->leader_color = ZnGetColorByValue(wi->win, wi->fore_color); + track->leader_color = ZnGetGradientByValue(wi->fore_gradient); track->leader_style = LINE_SIMPLE; track->leader_shape = LINE_STRAIGHT; track->leader_width = DEFAULT_LINE_WIDTH; - track->connection_color = ZnGetColorByValue(wi->win, wi->fore_color); + track->connection_color = ZnGetGradientByValue(wi->fore_gradient); track->connection_style = LINE_SIMPLE; track->connection_width = DEFAULT_LINE_WIDTH; - track->marker_color = ZnGetColorByValue(wi->win, wi->fore_color); + track->marker_color = ZnGetGradientByValue(wi->fore_gradient); track->marker_style = LINE_SIMPLE; track->marker_fill_pattern = ZnUnspecifiedPattern; - track->speed_vector_color = ZnGetColorByValue(wi->win, wi->fore_color); - track->speed_vector_alpha = 100; - track->history_color = ZnGetColorByValue(wi->win, wi->fore_color); + track->speed_vector_color = ZnGetGradientByValue(wi->fore_gradient); + track->history_color = ZnGetGradientByValue(wi->fore_gradient); CLEAR(track->flags, MARKER_FILLED_BIT); CLEAR(track->flags, SV_MARK_BIT); SET(track->flags, FILLED_HISTORY_BIT); @@ -467,12 +463,12 @@ Clone(Item item) /* * We get all shared resources, colors bitmaps. */ - track->symbol_color = ZnGetColorByValue(wi->win, track->symbol_color); - track->leader_color = ZnGetColorByValue(wi->win, track->leader_color); - track->connection_color = ZnGetColorByValue(wi->win, track->connection_color); - track->marker_color = ZnGetColorByValue(wi->win, track->marker_color); - track->speed_vector_color = ZnGetColorByValue(wi->win, track->speed_vector_color); - track->history_color = ZnGetColorByValue(wi->win, track->history_color); + track->symbol_color = ZnGetGradientByValue(track->symbol_color); + track->leader_color = ZnGetGradientByValue(track->leader_color); + track->connection_color = ZnGetGradientByValue(track->connection_color); + track->marker_color = ZnGetGradientByValue(track->marker_color); + track->speed_vector_color = ZnGetGradientByValue(track->speed_vector_color); + track->history_color = ZnGetGradientByValue(track->history_color); if (track->symbol != ZnUnspecifiedPattern) { track->symbol = Tk_GetBitmap(wi->interp, wi->win, Tk_NameOfBitmap(wi->dpy, track->symbol)); @@ -514,12 +510,12 @@ Destroy(Item item) /* * Release shared resources. */ - ZnFreeColor(track->symbol_color); - ZnFreeColor(track->leader_color); - ZnFreeColor(track->connection_color); - ZnFreeColor(track->marker_color); - ZnFreeColor(track->speed_vector_color); - ZnFreeColor(track->history_color); + ZnFreeGradient(track->symbol_color); + ZnFreeGradient(track->leader_color); + ZnFreeGradient(track->connection_color); + ZnFreeGradient(track->marker_color); + ZnFreeGradient(track->speed_vector_color); + ZnFreeGradient(track->history_color); if (track->symbol != ZnUnspecifiedPattern) { Tk_FreeBitmap(wi->dpy, track->symbol); } @@ -1068,7 +1064,7 @@ Draw(Item item) /* Draw the marker */ if (track->marker_size_dev != 0) { SetLineStyle(wi, track->marker_style); - values.foreground = ZnPixel(track->marker_color); + values.foreground = ZnPixel(ZnGetGradientColor(track->marker_color, 0, NULL)); values.line_width = 0; if (ISSET(track->flags, MARKER_FILLED_BIT)) { if (track->marker_fill_pattern == ZnUnspecifiedPattern) { @@ -1109,7 +1105,8 @@ Draw(Item item) pts[0] = track->dev; pts[1] = ((TrackItem) item->connected_item)->dev; - DrawLineShape(wi, pts, 2, track->connection_style, track->connection_color, + DrawLineShape(wi, pts, 2, track->connection_style, + ZnGetGradientColor(track->connection_color, 0, NULL), track->connection_width, LINE_STRAIGHT); } @@ -1117,7 +1114,7 @@ Draw(Item item) * Draw the speed vector. */ if ((item->class == ZnTrack) && (track->speed_vector_width > 0)) { - values.foreground = ZnPixel(track->speed_vector_color); + values.foreground = ZnPixel(ZnGetGradientColor(track->speed_vector_color, 0, NULL)); values.line_width = track->speed_vector_width > 1 ? track->speed_vector_width : 0; values.line_style = LineSolid; values.fill_style = FillSolid; @@ -1138,8 +1135,8 @@ Draw(Item item) points = (ZnPoint *) ZnListArray(track->leader_points); num_points = ZnListSize(track->leader_points); - DrawLineShape(wi, points, num_points, - track->leader_style, track->leader_color, + DrawLineShape(wi, points, num_points, track->leader_style, + ZnGetGradientColor(track->leader_color, 0, NULL), track->leader_width, track->leader_shape); if (track->leader_first_end != NULL) { GetLineEnd(&points[0], &points[1], track->leader_width, @@ -1172,7 +1169,7 @@ Draw(Item item) * Draw the history, current pos excepted. */ if ((item->class == ZnTrack) && track->history) { - values.foreground = ZnPixel(track->history_color); + values.foreground = ZnPixel(ZnGetGradientColor(track->history_color, 0, NULL)); values.fill_style = FillSolid; XChangeGC(wi->dpy, wi->gc, GCForeground|GCFillStyle, &values); if (ISCLEAR(track->flags, FILLED_HISTORY_BIT)) { @@ -1186,7 +1183,7 @@ Draw(Item item) for (i = 0, nb_hist = 0; i < num_acc_pos; i++) { if (ISSET(track->flags, LAST_AS_FIRST_BIT) && (i == track->visible_history_size-1)) { - values.foreground = ZnPixel(track->symbol_color); + values.foreground = ZnPixel(ZnGetGradientColor(track->symbol_color, 0, NULL)); XChangeGC(wi->dpy, wi->gc, GCForeground, &values); } side_size--; @@ -1232,7 +1229,7 @@ Draw(Item item) if (track->symbol != ZnUnspecifiedPattern) { int x = track->dev.x - (width+1)/2; int y = track->dev.y - (height+1)/2; - values.foreground = ZnPixel(track->symbol_color); + values.foreground = ZnPixel(ZnGetGradientColor(track->symbol_color, 0, NULL)); values.fill_style = FillStippled; values.stipple = track->symbol; values.ts_x_origin = x; @@ -1267,7 +1264,7 @@ Render(Item item) char tmp_str[] = "."; History hist; int h_side_size, side_size, width=0, height=0; - int i, j, nb_hist, num_acc_pos; + int i, j, nb_hist, num_acc_pos, alpha; XColor *color; ZnPoint *points; int num_points; @@ -1279,8 +1276,9 @@ Render(Item item) x0 = track->dev.x; y0 = track->dev.y; size = track->marker_size_dev; - color = track->connection_color; - glColor4us(color->red, color->green, color->blue, 65535); + color = ZnGetGradientColor(track->marker_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); if (ISSET(track->flags, MARKER_FILLED_BIT)) { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); if (track->marker_fill_pattern != ZnUnspecifiedPattern) { /* Fill stippled */ @@ -1313,8 +1311,9 @@ Render(Item item) */ c_item = (TrackItem) item->connected_item; if ((c_item != ZN_NO_ITEM) && (track->connection_width > 0)) { - color = track->connection_color; - glColor4us(color->red, color->green, color->blue, 65535); + color = ZnGetGradientColor(track->connection_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); glLineWidth(track->connection_width); glBegin(GL_LINES); glVertex2f(track->dev.x, track->dev.y); @@ -1330,9 +1329,9 @@ Render(Item item) int num_clips, svlength, ticksize; ZnReal svxstep, svystep; - color = track->speed_vector_color; - glColor4us(color->red, color->green, color->blue, - track->speed_vector_alpha*wi->alpha/100*65535/100); + color = ZnGetGradientColor(track->speed_vector_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); glLineWidth(track->speed_vector_width); /* @@ -1394,12 +1393,11 @@ Render(Item item) if (track->field_set.label_format && (track->leader_width > 0)) { points = ZnListArray(track->leader_points); num_points = ZnListSize(track->leader_points); - color = track->leader_color; RenderPolyline(wi, points, num_points, track->leader_width, False, track->leader_style, CapRound, JoinRound, track->leader_first_end, track->leader_last_end, - track->leader_color, 65535); + track->leader_color); } tmp_str[0] = track->symbol; @@ -1412,8 +1410,9 @@ Render(Item item) */ if ((item->class == ZnTrack) && track->history) { points = GetCirclePoints(3, ZN_CIRCLE_COARSE, 0, 360, &num_points, NULL); - color = track->history_color; - glColor4us(color->red, color->green, color->blue, 65535); + color = ZnGetGradientColor(track->history_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); glLineWidth(1); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); num_acc_pos = MIN(track->visible_history_size, ZnListSize(track->history)); @@ -1429,8 +1428,9 @@ Render(Item item) for (i = 0, nb_hist = 0; i < num_acc_pos; i++) { if (ISSET(track->flags, LAST_AS_FIRST_BIT) && (i == track->visible_history_size-1)) { - color = track->symbol_color; - glColor4us(color->red, color->green, color->blue, 65535); + color = ZnGetGradientColor(track->symbol_color, 0, &alpha); + alpha = ZnComposeAlpha(alpha, wi->alpha); + glColor4us(color->red, color->green, color->blue, alpha); } side_size--; side_size = MAX(1, side_size); @@ -1492,7 +1492,7 @@ Render(Item item) } /* - * Draw the current position using a pattern for Tk. + * Draw the current position using a pattern. */ if (track->symbol != ZnUnspecifiedPattern) { ZnPoint p; @@ -1500,7 +1500,7 @@ Render(Item item) p.x = track->dev.x - (width+1)/2; p.y = track->dev.y - (height+1)/2; RenderImage(wi, (ImageBits *) GetBitmapTexture(wi->dpy, track->symbol), - track->symbol_color, 100, &p); + track->symbol_color, &p, True); } /* |