aboutsummaryrefslogtreecommitdiff
path: root/generic/Track.c
diff options
context:
space:
mode:
authorlecoanet2000-09-27 14:34:38 +0000
committerlecoanet2000-09-27 14:34:38 +0000
commit628af986c97dbf2347859008a247e174c18bd7fa (patch)
treebaaba25ac59b6011b6dc799fc63a70e0e5399738 /generic/Track.c
parent692152ac2bfc73e6f598b4808e0f33cd43c130fe (diff)
downloadtkzinc-628af986c97dbf2347859008a247e174c18bd7fa.zip
tkzinc-628af986c97dbf2347859008a247e174c18bd7fa.tar.gz
tkzinc-628af986c97dbf2347859008a247e174c18bd7fa.tar.bz2
tkzinc-628af986c97dbf2347859008a247e174c18bd7fa.tar.xz
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.
Diffstat (limited to 'generic/Track.c')
-rw-r--r--generic/Track.c31
1 files 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);
}