From 628af986c97dbf2347859008a247e174c18bd7fa Mon Sep 17 00:00:00 2001 From: lecoanet Date: Wed, 27 Sep 2000 14:34:38 +0000 Subject: Ajout de deux attributs permettant de diff�rentier la couleur des positions pass�es de celle de la position courante. Il s'agit de -historycolor et de -lastasfirst. --- generic/Track.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/generic/Track.c b/generic/Track.c index 94855d4..69121b8 100644 --- a/generic/Track.c +++ b/generic/Track.c @@ -51,6 +51,7 @@ static const char compile_id[]="$Compile: " __FILE__ " " __DATE__ " " __TIME__ " #define CIRCLE_HISTORY_BIT 1 << 3 #define POLAR_BIT 1 << 5 #define FROZEN_LABEL_BIT 1 << 6 +#define LAST_AS_FIRST_BIT 1 << 7 #define CURRENT_POSITION -2 #define LEADER -3 @@ -102,6 +103,7 @@ typedef struct _TrackItemStruct { int visible_history_size; /* Number of visible positions */ ZnPoint pos; /* item world coordinates */ ZnPoint speed_vector; /* s. v. slope in world coord */ + ZnColor history_color; /* Private data */ FieldSetStruct field_set; @@ -140,6 +142,8 @@ 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, + 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 }, { ZN_CONFIG_ANGLE, "-labelangle", NULL, @@ -157,6 +161,8 @@ static ZnAttrConfig track_attrs[] = { { ZN_CONFIG_LABEL_FORMAT, "-labelformat", NULL, Tk_Offset(TrackItemStruct, field_set.label_format), 0, ZN_COORDS_FLAG|ZN_CLFC_FLAG, False }, + { ZN_CONFIG_BOOL, "-lastasfirst", NULL, + 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, @@ -353,11 +359,13 @@ Init(Item item, track->marker_style = LINE_SIMPLE; track->marker_fill_pattern = ZnUnspecifiedPattern; track->speed_vector_color = ZnGetColorByValue(wi->win, wi->fore_color); + track->history_color = ZnGetColorByValue(wi->win, wi->fore_color); CLEAR(track->flags, MARKER_FILLED_BIT); SET(track->flags, FILLED_HISTORY_BIT); CLEAR(track->flags, DOT_MIXED_HISTORY_BIT); CLEAR(track->flags, CIRCLE_HISTORY_BIT); - + CLEAR(track->flags, LAST_AS_FIRST_BIT); + if (item->class == ZnTrack) { item->priority = DEFAULT_TRACK_PRIORITY; track->visible_history_size = DEFAULT_VISIBLE_HISTORY_SIZE; @@ -448,6 +456,7 @@ Clone(Item item) 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); if (track->symbol != ZnUnspecifiedPattern) { track->symbol = Tk_GetBitmap(wi->interp, wi->win, Tk_NameOfBitmap(wi->dpy, track->symbol)); @@ -494,6 +503,7 @@ Destroy(Item item) ZnFreeColor(track->connection_color); ZnFreeColor(track->marker_color); ZnFreeColor(track->speed_vector_color); + ZnFreeColor(track->history_color); if (track->symbol != ZnUnspecifiedPattern) { Tk_FreeBitmap(wi->dpy, track->symbol); } @@ -1117,9 +1127,6 @@ Draw(Item item) } tmp_str[0] = track->symbol; - values.foreground = ZnPixel(track->symbol_color); - values.fill_style = FillSolid; - XChangeGC(wi->dpy, wi->gc, GCForeground|GCFillStyle, &values); if (track->symbol != ZnUnspecifiedPattern) { Tk_SizeOfBitmap(wi->dpy, track->symbol, &width, &height); } @@ -1128,16 +1135,22 @@ Draw(Item item) * Draw the history, current pos excepted. */ if ((item->class == ZnTrack) && track->history) { + values.foreground = ZnPixel(track->history_color); + values.fill_style = FillSolid; + XChangeGC(wi->dpy, wi->gc, GCForeground|GCFillStyle, &values); if (ISCLEAR(track->flags, FILLED_HISTORY_BIT)) { values.line_width = 0; values.line_style = LineSolid; XChangeGC(wi->dpy, wi->gc, GCLineWidth | GCLineStyle, &values); } - num_acc_pos = ZnListSize(track->history); + num_acc_pos = MIN(track->visible_history_size, ZnListSize(track->history)); hist = ZnListArray(track->history); side_size = MAX(width, height); - for (i = 0, nb_hist = 0; - i < MIN(track->visible_history_size, num_acc_pos); i++) { + for (i = 0, nb_hist = 0; i < num_acc_pos; i++) { + if (ISSET(track->flags, LAST_AS_FIRST_BIT) && (i == num_acc_pos-1)) { + values.foreground = ZnPixel(track->symbol_color); + XChangeGC(wi->dpy, wi->gc, GCForeground, &values); + } side_size--; side_size = MAX(1, side_size); h_side_size = (side_size+1)/2; @@ -1181,12 +1194,14 @@ 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.fill_style = FillStippled; values.stipple = track->symbol; values.ts_x_origin = x; values.ts_y_origin = y; XChangeGC(wi->dpy, wi->gc, - GCFillStyle|GCStipple|GCTileStipXOrigin|GCTileStipYOrigin, &values); + GCForeground|GCFillStyle|GCStipple|GCTileStipXOrigin|GCTileStipYOrigin, + &values); XFillRectangle(wi->dpy, wi->draw_buffer, wi->gc, x, y, width, height); } -- cgit v1.1