v11i066: tgif, Patch6, Part04/06
William Cheng
william at CS.UCLA.EDU
Wed Feb 13 18:31:50 AEST 1991
Submitted-by: william at CS.UCLA.EDU (William Cheng)
Posting-number: Volume 11, Issue 66
Archive-name: tgif/patch6.04
Patch-To: tgif: Volume 7, Issue 56-76 (original: tgif-1.2)
Patch-To: tgif: Volume 8, Issue 46-48 (Patch1: tgif-1.2 => tgif-1.9)
Patch-To: tgif: Volume 8, Issue 58-60 (Patch2: tgif-1.9 => tgif-1.12)
Patch-To: tgif: Volume 8, Issue 87-89 (Patch3: tgif-1.12 => tgif-1.13)
Patch-To: tgif: Volume 8, Issue 94 (Patch4: tgif-1.13 => tgif-1.14)
Patch-To: tgif: Volume 8, Issue 95 (Patch5: tgif-1.14 => tgif-1.15)
---------------------------------> cut here <---------------------------------
*** oval.c.orig Wed Dec 12 14:36:17 1990
--- oval.c Wed Dec 12 14:36:19 1990
***************
*** 6,10 ****
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/oval.c,v 1.7 90/08/13 09:23:35 william Exp $";
#endif
--- 6,10 ----
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/oval.c,v 1.11 90/11/10 13:51:00 william Exp $";
#endif
***************
*** 93,97 ****
struct ObjRec * ObjPtr;
{
! int ltx, lty, rbx, rby, xc, yc, a, b, fill, width, pen;
ltx = ObjPtr->obbox.ltx; lty = ObjPtr->obbox.lty;
--- 93,98 ----
struct ObjRec * ObjPtr;
{
! int ltx, lty, rbx, rby, xc, yc, a, b, i;
! int fill, width, pen, dash, color_index;
ltx = ObjPtr->obbox.ltx; lty = ObjPtr->obbox.lty;
***************
*** 103,109 ****
--- 104,120 ----
width = ObjPtr->detail.o->width;
pen = ObjPtr->detail.o->pen;
+ dash = ObjPtr->detail.o->dash;
if (fill == NONEPAT && pen == NONEPAT) return;
+ if (colorDump)
+ {
+ color_index = ObjPtr->color;
+ fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n",
+ ((float)tgifColors[color_index].red/maxRGB),
+ ((float)tgifColors[color_index].green/maxRGB),
+ ((float)tgifColors[color_index].blue/maxRGB));
+ }
+
switch (fill)
{
***************
*** 128,131 ****
--- 139,150 ----
fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]);
+ if (dash != 0)
+ {
+ fprintf (FP, "[");
+ for (i = 0; i < dashListLength[dash]-1; i++)
+ fprintf (FP, "%1d ", (int)(dashList[dash][i]));
+ fprintf (FP, "%1d] 0 setdash\n",
+ (int)(dashList[dash][dashListLength[dash]-1]));
+ }
switch (pen)
***************
*** 147,150 ****
--- 166,170 ----
break;
}
+ if (dash != 0) fprintf (FP, "[] 0 setdash\n");
fprintf (FP, "1 setlinewidth\n\n");
}
***************
*** 156,160 ****
{
struct OvalRec * oval_ptr = ObjPtr->detail.o;
! int fill, width, pen, pixel, real_x_off, real_y_off;
char s[80];
struct BBRec bbox;
--- 176,180 ----
{
struct OvalRec * oval_ptr = ObjPtr->detail.o;
! int fill, width, pen, dash, pixel, real_x_off, real_y_off;
char s[80];
struct BBRec bbox;
***************
*** 171,174 ****
--- 191,195 ----
width = ObjPtr->detail.o->width;
pen = ObjPtr->detail.o->pen;
+ dash = ObjPtr->detail.o->dash;
pixel = colorPixels[ObjPtr->color];
***************
*** 191,197 ****
values.stipple = patPixmap[pen];
values.line_width = widthOfLine[width] >> zoomScale;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth,
! &values);
XDrawArc (mainDisplay, window, drawGC, bbox.ltx, bbox.lty,
bbox.rbx-bbox.ltx, bbox.rby-bbox.lty, 0, 360*64);
--- 212,226 ----
values.stipple = patPixmap[pen];
values.line_width = widthOfLine[width] >> zoomScale;
+ if (dash != 0)
+ {
+ XSetDashes (mainDisplay, drawGC, 0, dashList[dash],
+ dashListLength[dash]);
+ values.line_style = LineOnOffDash;
+ }
+ else
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth |
! GCLineStyle, &values);
XDrawArc (mainDisplay, window, drawGC, bbox.ltx, bbox.lty,
bbox.rbx-bbox.ltx, bbox.rby-bbox.lty, 0, 360*64);
***************
*** 211,214 ****
--- 240,244 ----
oval_ptr->width = lineWidth;
oval_ptr->pen = penPat;
+ oval_ptr->dash = curDash;
obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
***************
*** 257,262 ****
values.fill_style = FillSolid;
values.line_width = 0;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth, &values);
grid_x = end_x = OrigX;
--- 287,294 ----
values.fill_style = FillSolid;
values.line_width = 0;
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
! &values);
grid_x = end_x = OrigX;
***************
*** 333,341 ****
struct ObjRec * ObjPtr;
{
! fprintf (FP, "oval(%s,", colorMenuItems[ObjPtr->color]);
! fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,", ObjPtr->obbox.ltx,
ObjPtr->obbox.lty, ObjPtr->obbox.rbx, ObjPtr->obbox.rby,
ObjPtr->detail.o->fill, ObjPtr->detail.o->width,
! ObjPtr->detail.o->pen, ObjPtr->id);
SaveAttrs (FP, ObjPtr->lattr);
fprintf (FP, ")");
--- 365,373 ----
struct ObjRec * ObjPtr;
{
! fprintf (FP, "oval('%s',", colorMenuItems[ObjPtr->color]);
! fprintf (FP, "%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,%1d,", ObjPtr->obbox.ltx,
ObjPtr->obbox.lty, ObjPtr->obbox.rbx, ObjPtr->obbox.rby,
ObjPtr->detail.o->fill, ObjPtr->detail.o->width,
! ObjPtr->detail.o->pen, ObjPtr->id, ObjPtr->detail.o->dash);
SaveAttrs (FP, ObjPtr->lattr);
fprintf (FP, ")");
***************
*** 348,352 ****
struct OvalRec * oval_ptr;
char color_str[20], * s;
! int ltx, lty, rbx, rby, fill, width, pen, w;
* ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
--- 380,384 ----
struct OvalRec * oval_ptr;
char color_str[20], * s;
! int ltx, lty, rbx, rby, fill, width, pen, dash, w;
* ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
***************
*** 365,368 ****
--- 397,401 ----
}
(*ObjPtr)->id = objId++;
+ dash = 0;
}
else if (fileVersion <= 7)
***************
*** 371,376 ****
<x, <y, &rbx, &rby, &fill, &width, &pen);
(*ObjPtr)->id = objId++;
}
! else
{
sscanf (s, "%d , %d, %d , %d , %d , %d , %d , %d",
--- 404,410 ----
<x, <y, &rbx, &rby, &fill, &width, &pen);
(*ObjPtr)->id = objId++;
+ dash = 0;
}
! else if (fileVersion <= 8)
{
sscanf (s, "%d , %d, %d , %d , %d , %d , %d , %d",
***************
*** 377,381 ****
--- 411,423 ----
<x, <y, &rbx, &rby, &fill, &width, &pen, &((*ObjPtr)->id));
if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
+ dash = 0;
}
+ else
+ {
+ sscanf (s, "%d , %d, %d , %d , %d , %d , %d , %d , %d",
+ <x, <y, &rbx, &rby, &fill, &width, &pen, &((*ObjPtr)->id),
+ &dash);
+ if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
+ }
oval_ptr->fill = fill;
***************
*** 382,385 ****
--- 424,428 ----
oval_ptr->width = width;
oval_ptr->pen = pen;
+ oval_ptr->dash = dash;
(*ObjPtr)->x = ltx;
(*ObjPtr)->y = lty;
*** pattern.c.orig Wed Dec 12 14:36:26 1990
--- pattern.c Wed Dec 12 14:36:29 1990
***************
*** 6,10 ****
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.3 90/07/11 21:30:41 william Exp $";
#endif
--- 6,10 ----
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/pattern.c,v 1.5 90/10/31 11:37:19 william Exp $";
#endif
***************
*** 30,33 ****
--- 30,34 ----
int penPat = SOLIDPAT;
int curSpline = LT_STRAIGHT;
+ int curDash = 0;
void ModeMenu (X, Y)
***************
*** 505,508 ****
--- 506,624 ----
}
+ static
+ int ChangeObjDashes (ObjPtr, DashIndex)
+ struct ObjRec * ObjPtr;
+ int DashIndex;
+ {
+ register struct ObjRec * obj_ptr;
+ int changed = FALSE;
+
+ for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
+ switch (obj_ptr->type)
+ {
+ case OBJ_POLY:
+ if (obj_ptr->detail.p->dash != DashIndex)
+ {
+ obj_ptr->detail.p->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+ case OBJ_BOX:
+ if (obj_ptr->detail.b->dash != DashIndex)
+ {
+ obj_ptr->detail.b->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+ case OBJ_OVAL:
+ if (obj_ptr->detail.o->dash != DashIndex)
+ {
+ obj_ptr->detail.o->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+ case OBJ_POLYGON:
+ if (obj_ptr->detail.g->dash != DashIndex)
+ {
+ obj_ptr->detail.g->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+
+ case OBJ_GROUP:
+ case OBJ_SYM:
+ if (ChangeObjLineWidth (obj_ptr->detail.r->last, DashIndex))
+ changed = TRUE;
+ break;
+ }
+ return (changed);
+ }
+
+ void ChangeAllSelDashes (DashIndex)
+ int DashIndex;
+ {
+ register struct SelRec * sel_ptr;
+ register struct ObjRec * obj_ptr;
+ int changed = FALSE;
+
+ if (topSel == NULL)
+ {
+ curDash = DashIndex;
+ ShowLineWidth ();
+ return;
+ }
+
+ for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
+ {
+ obj_ptr = sel_ptr->obj;
+ switch (obj_ptr->type)
+ {
+ case OBJ_POLY:
+ if (obj_ptr->detail.p->dash != DashIndex)
+ {
+ obj_ptr->detail.p->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+ case OBJ_BOX:
+ if (obj_ptr->detail.b->dash != DashIndex)
+ {
+ obj_ptr->detail.b->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+ case OBJ_OVAL:
+ if (obj_ptr->detail.o->dash != DashIndex)
+ {
+ obj_ptr->detail.o->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+ case OBJ_POLYGON:
+ if (obj_ptr->detail.g->dash != DashIndex)
+ {
+ obj_ptr->detail.g->dash = DashIndex;
+ changed = TRUE;
+ }
+ break;
+
+ case OBJ_GROUP:
+ case OBJ_SYM:
+ if (ChangeObjDashes (obj_ptr->detail.r->last, DashIndex))
+ changed = TRUE;
+ break;
+ }
+ }
+
+ if (changed)
+ {
+ SetFileModified (TRUE);
+ HighLightReverse ();
+ RedrawAnArea (botObj, selLtX-(1<<zoomScale), selLtY-(1<<zoomScale),
+ selRbX+(1<<zoomScale), selRbY+(1<<zoomScale));
+ HighLightForward ();
+ }
+ }
+
void LineStyleMenu (X, Y)
int X, Y;
***************
*** 510,519 ****
int index, ltx, lty, rbx, rby, * fore_colors, * valid;
! DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, &fore_colors,
! &valid);
cfree (valid);
index = PxMpMenuLoop (X, Y, menuImageW, menuImageH,
! MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, 1,
! MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES,
fore_colors, lineStylePixmap, SINGLECOLOR);
if (index == INVALID) return;
--- 626,644 ----
int index, ltx, lty, rbx, rby, * fore_colors, * valid;
! /* DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, &fore_colors, */
! /* &valid); */
! /* cfree (valid); */
! /* index = PxMpMenuLoop (X, Y, menuImageW, menuImageH, */
! /* MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, 1, */
! /* MAXLINEWIDTHS+MAXLINETYPES+MAXLINESTYLES, */
! /* fore_colors, lineStylePixmap, SINGLECOLOR); */
! /* if (index == INVALID) return; */
!
! DefaultColorArrays (MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES,
! &fore_colors, &valid);
cfree (valid);
index = PxMpMenuLoop (X, Y, menuImageW, menuImageH,
! MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES, 1,
! MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES+MAXLINESTYLES,
fore_colors, lineStylePixmap, SINGLECOLOR);
if (index == INVALID) return;
***************
*** 523,528 ****
else if (index < MAXLINEWIDTHS+MAXLINETYPES)
ChangeAllSelLineType (index - MAXLINEWIDTHS);
else
! ChangeAllSelLineStyle (index - MAXLINEWIDTHS - MAXLINETYPES);
}
--- 648,655 ----
else if (index < MAXLINEWIDTHS+MAXLINETYPES)
ChangeAllSelLineType (index - MAXLINEWIDTHS);
+ else if (index < MAXLINEWIDTHS+MAXLINETYPES+MAXDASHES)
+ ChangeAllSelDashes (index - MAXLINEWIDTHS - MAXLINETYPES);
else
! ChangeAllSelLineStyle (index - MAXLINEWIDTHS - MAXLINETYPES - MAXDASHES);
}
*** poly.c.orig Wed Dec 12 14:36:51 1990
--- poly.c Wed Dec 12 14:36:54 1990
***************
*** 6,10 ****
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/poly.c,v 1.6 90/08/13 09:23:49 william Exp $";
#endif
--- 6,10 ----
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/poly.c,v 1.10 90/11/10 13:51:04 william Exp $";
#endif
***************
*** 117,120 ****
--- 117,121 ----
poly_ptr->curved = curSpline;
poly_ptr->fill = objFill;
+ poly_ptr->dash = curDash;
obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
obj_ptr->color = colorIndex;
***************
*** 175,181 ****
*/
! void MyLine (Win,Cont,Rb,N,StartX,StartY,EndX,EndY,W,S,P,Pix)
Window Win;
! int Cont, Rb, N, StartX, StartY, EndX, EndY, W, S, P, Pix;
/* 'Cont' means continue */
/* 'Rb' means rubber-band */
--- 176,182 ----
*/
! void MyLine (Win,Cont,Rb,N,StartX,StartY,EndX,EndY,W,S,P,Pix,Dash)
Window Win;
! int Cont, Rb, N, StartX, StartY, EndX, EndY, W, S, P, Pix, Dash;
/* 'Cont' means continue */
/* 'Rb' means rubber-band */
***************
*** 245,250 ****
values.fill_style = FillSolid;
values.line_width = 0;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth, &values);
}
else if (P != 0)
--- 246,253 ----
values.fill_style = FillSolid;
values.line_width = 0;
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
! &values);
}
else if (P != 0)
***************
*** 255,261 ****
values.stipple = patPixmap[P];
values.line_width = widthOfLine[W] >> zoomScale;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth,
! &values);
}
else
--- 258,272 ----
values.stipple = patPixmap[P];
values.line_width = widthOfLine[W] >> zoomScale;
+ if (Dash != 0)
+ {
+ XSetDashes (mainDisplay, drawGC, 0, dashList[Dash],
+ dashListLength[Dash]);
+ values.line_style = LineOnOffDash;
+ }
+ else
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCStipple | GCLineWidth |
! GCLineStyle, &values);
}
else
***************
*** 344,350 ****
values.fill_style = FillSolid;
values.line_width = 0;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth,
&values);
--- 355,362 ----
values.fill_style = FillSolid;
values.line_width = 0;
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
&values);
***************
*** 362,366 ****
motion_ev = &(input.xmotion);
MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
! grid_y, lineWidth, lineStyle, penPat, xor_pixel);
end_x = motion_ev->x;
--- 374,378 ----
motion_ev = &(input.xmotion);
MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
! grid_y, lineWidth, lineStyle, penPat, xor_pixel,0);
end_x = motion_ev->x;
***************
*** 369,373 ****
MarkRulers (grid_x, grid_y);
MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
! grid_y, lineWidth, lineStyle, penPat, xor_pixel);
while (XCheckMaskEvent (mainDisplay, PointerMotionMask, &ev)) ;
}
--- 381,385 ----
MarkRulers (grid_x, grid_y);
MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
! grid_y, lineWidth, lineStyle, penPat, xor_pixel,0);
while (XCheckMaskEvent (mainDisplay, PointerMotionMask, &ev)) ;
}
***************
*** 376,380 ****
button_ev = &(input.xbutton);
MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
! grid_y, lineWidth, lineStyle, penPat, xor_pixel);
GridXY (end_x, end_y, &grid_x, &grid_y);
--- 388,392 ----
button_ev = &(input.xbutton);
MyLine (drawWindow, CONT, RB, num_pts, OrigX, OrigY, grid_x,
! grid_y, lineWidth, lineStyle, penPat, xor_pixel,0);
GridXY (end_x, end_y, &grid_x, &grid_y);
***************
*** 394,398 ****
MyLine (drawWindow, CONT, NORB, num_pts-1, OrigX, OrigY,
grid_x, grid_y, lineWidth, lineStyle, penPat,
! pixel);
OrigX = grid_x;
OrigY = grid_y;
--- 406,410 ----
MyLine (drawWindow, CONT, NORB, num_pts-1, OrigX, OrigY,
grid_x, grid_y, lineWidth, lineStyle, penPat,
! pixel,0);
OrigX = grid_x;
OrigY = grid_y;
***************
*** 404,408 ****
MyLine (drawWindow, NOCONT, NORB, num_pts-1, OrigX,
OrigY, grid_x, grid_y, lineWidth, lineStyle,
! penPat, pixel);
done = TRUE;
--- 416,420 ----
MyLine (drawWindow, NOCONT, NORB, num_pts-1, OrigX,
OrigY, grid_x, grid_y, lineWidth, lineStyle,
! penPat, pixel,0);
done = TRUE;
***************
*** 416,424 ****
{
CreatePolyObj (num_pts);
! if (topObj->detail.p->curved == LT_SPLINE ||
! topObj->detail.p->fill != NONEPAT)
! RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
! topObj->bbox.lty-(1<<zoomScale), topObj->bbox.rbx+(1<<zoomScale),
! topObj->bbox.rby+(1<<zoomScale));
polyDrawn = TRUE;
SetFileModified (TRUE);
--- 428,434 ----
{
CreatePolyObj (num_pts);
! RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
! topObj->bbox.lty-(1<<zoomScale), topObj->bbox.rbx+(1<<zoomScale),
! topObj->bbox.rby+(1<<zoomScale));
polyDrawn = TRUE;
SetFileModified (TRUE);
***************
*** 473,477 ****
{
XPoint * v;
! int num_pts, fill, pen, width, curved, w, aw, ah, dy, dx;
fill = ObjPtr->detail.p->fill;
--- 483,488 ----
{
XPoint * v;
! int i, num_pts, fill, pen, width, curved, dash, color_index;
! int w, aw, ah, dy, dx;
fill = ObjPtr->detail.p->fill;
***************
*** 479,485 ****
--- 490,508 ----
pen = ObjPtr->detail.p->pen;
curved = ObjPtr->detail.p->curved;
+ dash = ObjPtr->detail.p->dash;
v = ObjPtr->detail.p->vlist;
num_pts = ObjPtr->detail.p->n;
+ if (fill == NONEPAT && pen == NONEPAT) return;
+
+ if (colorDump)
+ {
+ color_index = ObjPtr->color;
+ fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n",
+ ((float)tgifColors[color_index].red/maxRGB),
+ ((float)tgifColors[color_index].green/maxRGB),
+ ((float)tgifColors[color_index].blue/maxRGB));
+ }
+
if (fill != NONEPAT && num_pts > 2)
{
***************
*** 545,549 ****
}
! if (pen == NONEPAT) return;
fprintf (FP, "gsave\n");
--- 568,573 ----
}
! if (pen == NONEPAT) { fprintf (FP, "\n"); return; }
!
fprintf (FP, "gsave\n");
***************
*** 562,565 ****
--- 586,597 ----
fprintf (FP, " %1d setlinewidth\n", w);
+ if (dash != 0)
+ {
+ fprintf (FP, " [");
+ for (i = 0; i < dashListLength[dash]-1; i++)
+ fprintf (FP, "%1d ", (int)(dashList[dash][i]));
+ fprintf (FP, "%1d] 0 setdash\n",
+ (int)(dashList[dash][dashListLength[dash]-1]));
+ }
fprintf (FP, "newpath\n %1d %1d moveto\n", v[0].x, v[0].y);
***************
*** 622,626 ****
register struct PolyRec * poly_ptr = ObjPtr->detail.p;
XPoint * pv = poly_ptr->vlist, * v;
! int pen, width, pixel, fill, curved, n;
int x1, y1, x2, y2, ah, real_x_off, real_y_off;
Pixmap tile;
--- 654,658 ----
register struct PolyRec * poly_ptr = ObjPtr->detail.p;
XPoint * pv = poly_ptr->vlist, * v;
! int pen, width, pixel, fill, curved, n, dash;
int x1, y1, x2, y2, ah, real_x_off, real_y_off;
Pixmap tile;
***************
*** 632,639 ****
pen = poly_ptr->pen;
curved = poly_ptr->curved;
pixel = colorPixels[ObjPtr->color];
if (curved == LT_SPLINE)
! DrawSplinePolyObj (Win, XOff, YOff, fill, width, pen, pixel, poly_ptr);
else
{
--- 664,673 ----
pen = poly_ptr->pen;
curved = poly_ptr->curved;
+ dash = poly_ptr->dash;
pixel = colorPixels[ObjPtr->color];
if (curved == LT_SPLINE)
! DrawSplinePolyObj (Win, XOff, YOff, fill, width, pen, dash, pixel,
! poly_ptr);
else
{
***************
*** 671,675 ****
MyLine (Win, CONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
! poly_ptr->style, pen, pixel);
}
x1 = (pv[i].x-real_x_off)>>zoomScale;
--- 705,709 ----
MyLine (Win, CONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
! poly_ptr->style, pen, pixel, dash);
}
x1 = (pv[i].x-real_x_off)>>zoomScale;
***************
*** 679,683 ****
MyLine (Win, NOCONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
! poly_ptr->style, pen, pixel);
}
}
--- 713,717 ----
MyLine (Win, NOCONT, NORB, i+1, x1, y1, x2, y2, poly_ptr->width,
! poly_ptr->style, pen, pixel, dash);
}
}
***************
*** 691,695 ****
n = poly_ptr->n;
! fprintf (FP, "poly(%s,%1d,[", colorMenuItems[ObjPtr->color], poly_ptr->n);
for (i = 0; i < n-1; i++)
{
--- 725,729 ----
n = poly_ptr->n;
! fprintf (FP, "poly('%s',%1d,[", colorMenuItems[ObjPtr->color], poly_ptr->n);
for (i = 0; i < n-1; i++)
{
***************
*** 697,702 ****
}
fprintf (FP, "%1d,%1d", poly_ptr->vlist[n-1].x, poly_ptr->vlist[n-1].y);
! fprintf (FP, "],%1d,%1d,%1d,%1d,%1d,%1d,", poly_ptr->style, poly_ptr->width,
! poly_ptr->pen, ObjPtr->id, poly_ptr->curved, poly_ptr->fill);
SaveAttrs (FP, ObjPtr->lattr);
fprintf (FP, ")");
--- 731,736 ----
}
fprintf (FP, "%1d,%1d", poly_ptr->vlist[n-1].x, poly_ptr->vlist[n-1].y);
! fprintf (FP, "],%1d,%1d,%1d,%1d,%1d,%1d,%1d,", poly_ptr->style, poly_ptr->width,
! poly_ptr->pen, ObjPtr->id, poly_ptr->curved, poly_ptr->fill, poly_ptr->dash);
SaveAttrs (FP, ObjPtr->lattr);
fprintf (FP, ")");
***************
*** 754,757 ****
--- 788,792 ----
case 2: poly_ptr->width = 6; break;
}
+ poly_ptr->dash = 0;
}
else if (fileVersion <= 3)
***************
*** 773,776 ****
--- 808,812 ----
case 2: poly_ptr->width = 6; break;
}
+ poly_ptr->dash = 0;
}
else if (fileVersion <= 4)
***************
*** 786,789 ****
--- 822,826 ----
case 2: poly_ptr->width = 6; break;
}
+ poly_ptr->dash = 0;
}
else if (fileVersion <= 5)
***************
*** 798,803 ****
case 2: poly_ptr->width = 6; break;
}
}
! else
{
sscanf (s, "%d , %d , %d , %d, %d, %d", &(poly_ptr->style),
--- 835,841 ----
case 2: poly_ptr->width = 6; break;
}
+ poly_ptr->dash = 0;
}
! else if (fileVersion <= 8)
{
sscanf (s, "%d , %d , %d , %d, %d, %d", &(poly_ptr->style),
***************
*** 804,807 ****
--- 842,853 ----
&(poly_ptr->width), &(poly_ptr->pen), &((*ObjPtr)->id),
&(poly_ptr->curved), &(poly_ptr->fill));
+ if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
+ poly_ptr->dash = 0;
+ }
+ else
+ {
+ sscanf (s, "%d , %d , %d , %d , %d , %d , %d", &(poly_ptr->style),
+ &(poly_ptr->width), &(poly_ptr->pen), &((*ObjPtr)->id),
+ &(poly_ptr->curved), &(poly_ptr->fill), &(poly_ptr->dash));
if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
}
*** polygon.c.orig Wed Dec 12 14:37:07 1990
--- polygon.c Wed Dec 12 14:37:09 1990
***************
*** 6,10 ****
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/polygon.c,v 1.5 90/08/13 09:23:36 william Exp $";
#endif
--- 6,10 ----
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/polygon.c,v 1.9 90/11/10 13:51:09 william Exp $";
#endif
***************
*** 52,56 ****
{
XPoint * v = ObjPtr->detail.g->vlist;
! int num_pts = ObjPtr->detail.g->n, fill, width, pen, curved;
fill = ObjPtr->detail.g->fill;
--- 52,57 ----
{
XPoint * v = ObjPtr->detail.g->vlist;
! int num_pts = ObjPtr->detail.g->n, i;
! int fill, width, pen, curved, dash, color_index;
fill = ObjPtr->detail.g->fill;
***************
*** 58,62 ****
--- 59,75 ----
pen = ObjPtr->detail.g->pen;
curved = ObjPtr->detail.g->curved;
+ dash = ObjPtr->detail.g->dash;
+ if (fill == NONEPAT && pen == NONEPAT) return;
+
+ if (colorDump)
+ {
+ color_index = ObjPtr->color;
+ fprintf (FP, "%.3f %.3f %.3f setrgbcolor\n",
+ ((float)tgifColors[color_index].red/maxRGB),
+ ((float)tgifColors[color_index].green/maxRGB),
+ ((float)tgifColors[color_index].blue/maxRGB));
+ }
+
if (fill != NONEPAT)
{
***************
*** 115,177 ****
}
! if (pen != NONEPAT)
{
! fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]);
! switch (curved)
! {
! case LT_STRAIGHT:
! switch (pen)
! {
! case SOLIDPAT:
! fprintf (FP, "newpath\n %1d %1d moveto\n", v[0].x, v[0].y);
! DumpPoints (FP, num_pts-1, v, 3);
! fprintf (FP, "closepath stroke\n");
! break;
! case BACKPAT:
! fprintf (FP, "newpath\n %1d %1d moveto\n", v[0].x, v[0].y);
! DumpPoints (FP, num_pts-1, v, 3);
! fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
! break;
! default:
! fprintf (FP, "gsave\n");
! fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n",
! pen);
! fprintf (FP, " newpath\n");
! fprintf (FP, " %1d %1d moveto\n", v[0].x, v[0].y);
! DumpPoints (FP, num_pts-1, v, 6);
! fprintf (FP, " closepath stroke\n");
! fprintf (FP, "grestore\n");
! break;
! }
! break;
! case LT_SPLINE:
! switch (pen)
! {
! case SOLIDPAT:
! fprintf (FP, "newpath\n");
! DumpCurvedPolygonPoints (FP, num_pts, v, 3);
! fprintf (FP, "closepath stroke\n");
! break;
! case BACKPAT:
! fprintf (FP, "newpath\n");
! DumpCurvedPolygonPoints (FP, num_pts, v, 3);
! fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
! break;
! default:
! fprintf (FP, "gsave\n");
! fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n",
! pen);
! fprintf (FP, " newpath\n");
! DumpCurvedPolygonPoints (FP, num_pts, v, 6);
! fprintf (FP, " closepath stroke\n");
! fprintf (FP, "grestore\n");
! break;
! }
! break;
! }
! fprintf (FP, "1 setlinewidth\n");
}
! fprintf (FP, "\n");
}
--- 128,197 ----
}
! if (pen == NONEPAT) { fprintf (FP, "\n"); return; }
!
! fprintf (FP, "%1d setlinewidth\n", widthOfLine[width]);
! if (dash != 0)
{
! fprintf (FP, "[");
! for (i = 0; i < dashListLength[dash]-1; i++)
! fprintf (FP, "%1d ", (int)(dashList[dash][i]));
! fprintf (FP, "%1d] 0 setdash\n",
! (int)(dashList[dash][dashListLength[dash]-1]));
! }
! switch (curved)
! {
! case LT_STRAIGHT:
! switch (pen)
! {
! case SOLIDPAT:
! fprintf (FP, "newpath\n %1d %1d moveto\n", v[0].x, v[0].y);
! DumpPoints (FP, num_pts-1, v, 3);
! fprintf (FP, "closepath stroke\n");
! break;
! case BACKPAT:
! fprintf (FP, "newpath\n %1d %1d moveto\n", v[0].x, v[0].y);
! DumpPoints (FP, num_pts-1, v, 3);
! fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
! break;
! default:
! fprintf (FP, "gsave\n");
! fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n",
! pen);
! fprintf (FP, " newpath\n");
! fprintf (FP, " %1d %1d moveto\n", v[0].x, v[0].y);
! DumpPoints (FP, num_pts-1, v, 6);
! fprintf (FP, " closepath stroke\n");
! fprintf (FP, "grestore\n");
! break;
! }
! break;
! case LT_SPLINE:
! switch (pen)
! {
! case SOLIDPAT:
! fprintf (FP, "newpath\n");
! DumpCurvedPolygonPoints (FP, num_pts, v, 3);
! fprintf (FP, "closepath stroke\n");
! break;
! case BACKPAT:
! fprintf (FP, "newpath\n");
! DumpCurvedPolygonPoints (FP, num_pts, v, 3);
! fprintf (FP, "closepath 1 setgray stroke 0 setgray\n");
! break;
! default:
! fprintf (FP, "gsave\n");
! fprintf (FP, " pat%1d 8 1 0 72 300 32 div div setpattern\n",
! pen);
! fprintf (FP, " newpath\n");
! DumpCurvedPolygonPoints (FP, num_pts, v, 6);
! fprintf (FP, " closepath stroke\n");
! fprintf (FP, "grestore\n");
! break;
! }
! break;
}
! if (dash != 0) fprintf (FP, "[] 0 setdash\n");
! fprintf (FP, "1 setlinewidth\n\n");
}
***************
*** 184,188 ****
XPoint * v;
struct PolygonRec * polygon_ptr = ObjPtr->detail.g;
! int fill, width, pen, curved, pixel;
int real_x_off, real_y_off;
XGCValues values;
--- 204,208 ----
XPoint * v;
struct PolygonRec * polygon_ptr = ObjPtr->detail.g;
! int fill, width, pen, curved, dash, pixel;
int real_x_off, real_y_off;
XGCValues values;
***************
*** 192,199 ****
pen = polygon_ptr->pen;
curved = polygon_ptr->curved;
pixel = colorPixels[ObjPtr->color];
if (curved == LT_SPLINE)
! DrawSplinePolygonObj (Win, XOff, YOff, fill, width, pen, pixel,
polygon_ptr);
else
--- 212,220 ----
pen = polygon_ptr->pen;
curved = polygon_ptr->curved;
+ dash = polygon_ptr->dash;
pixel = colorPixels[ObjPtr->color];
if (curved == LT_SPLINE)
! DrawSplinePolygonObj (Win, XOff, YOff, fill, width, pen, dash, pixel,
polygon_ptr);
else
***************
*** 228,234 ****
values.stipple = patPixmap[pen];
values.line_width = widthOfLine[width] >> zoomScale;
XChangeGC (mainDisplay, drawGC,
GCForeground | GCFunction | GCFillStyle | GCStipple |
! GCLineWidth, &values);
XDrawLines (mainDisplay, Win, drawGC, v, polygon_ptr->n,
--- 249,263 ----
values.stipple = patPixmap[pen];
values.line_width = widthOfLine[width] >> zoomScale;
+ if (dash != 0)
+ {
+ XSetDashes (mainDisplay, drawGC, 0, dashList[dash],
+ dashListLength[dash]);
+ values.line_style = LineOnOffDash;
+ }
+ else
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
GCForeground | GCFunction | GCFillStyle | GCStipple |
! GCLineWidth | GCLineStyle, &values);
XDrawLines (mainDisplay, Win, drawGC, v, polygon_ptr->n,
***************
*** 274,277 ****
--- 303,307 ----
polygon_ptr->pen = penPat;
polygon_ptr->curved = curSpline;
+ polygon_ptr->dash = curDash;
obj_ptr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
obj_ptr->color = colorIndex;
***************
*** 320,326 ****
values.fill_style = FillSolid;
values.line_width = 0;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth,
&values);
--- 350,357 ----
values.fill_style = FillSolid;
values.line_width = 0;
+ values.line_style = LineSolid;
XChangeGC (mainDisplay, drawGC,
! GCForeground | GCFunction | GCFillStyle | GCLineWidth | GCLineStyle,
&values);
***************
*** 450,461 ****
default:
CreatePolygonObj (num_pts);
! if (topObj->detail.g->curved == LT_SPLINE)
! RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
! topObj->bbox.lty-(1<<zoomScale),
! topObj->bbox.rbx+(1<<zoomScale),
! topObj->bbox.rby+(1<<zoomScale));
! else if (objFill != 0)
! DrawPolygonObj (drawWindow, drawOrigX, drawOrigY, topObj);
!
polygonDrawn = TRUE;
SetFileModified (TRUE);
--- 481,488 ----
default:
CreatePolygonObj (num_pts);
! RedrawAnArea (botObj, topObj->bbox.ltx-(1<<zoomScale),
! topObj->bbox.lty-(1<<zoomScale),
! topObj->bbox.rbx+(1<<zoomScale),
! topObj->bbox.rby+(1<<zoomScale));
polygonDrawn = TRUE;
SetFileModified (TRUE);
***************
*** 497,501 ****
n = polygon_ptr->n;
! fprintf (FP, "polygon(%s,%1d,[", colorMenuItems[ObjPtr->color],
polygon_ptr->n);
for (i = 0; i < n-1; i++)
--- 524,528 ----
n = polygon_ptr->n;
! fprintf (FP, "polygon('%s',%1d,[", colorMenuItems[ObjPtr->color],
polygon_ptr->n);
for (i = 0; i < n-1; i++)
***************
*** 502,508 ****
fprintf (FP, "%1d,%1d,", polygon_ptr->vlist[i].x, polygon_ptr->vlist[i].y);
! fprintf (FP, "%1d,%1d],%1d,%1d,%1d,%1d,%1d,", polygon_ptr->vlist[n-1].x,
polygon_ptr->vlist[n-1].y, polygon_ptr->fill, polygon_ptr->width,
! polygon_ptr->pen, polygon_ptr->curved, ObjPtr->id);
SaveAttrs (FP, ObjPtr->lattr);
fprintf (FP, ")");
--- 529,535 ----
fprintf (FP, "%1d,%1d,", polygon_ptr->vlist[i].x, polygon_ptr->vlist[i].y);
! fprintf (FP, "%1d,%1d],%1d,%1d,%1d,%1d,%1d,%1d,", polygon_ptr->vlist[n-1].x,
polygon_ptr->vlist[n-1].y, polygon_ptr->fill, polygon_ptr->width,
! polygon_ptr->pen, polygon_ptr->curved, ObjPtr->id, polygon_ptr->dash);
SaveAttrs (FP, ObjPtr->lattr);
fprintf (FP, ")");
***************
*** 518,522 ****
char color_str[20], * s;
int num_pts, ltx, lty, rbx, rby, x, y, fill, width, pen, w;
! int curved;
* ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
--- 545,549 ----
char color_str[20], * s;
int num_pts, ltx, lty, rbx, rby, x, y, fill, width, pen, w;
! int curved, dash;
* ObjPtr = (struct ObjRec *) calloc (1, sizeof(struct ObjRec));
***************
*** 559,562 ****
--- 586,590 ----
}
(*ObjPtr)->id = objId++;
+ dash = 0;
}
else if (fileVersion <= 5)
***************
*** 569,572 ****
--- 597,601 ----
}
(*ObjPtr)->id = objId++;
+ dash = 0;
}
else if (fileVersion <= 7)
***************
*** 574,579 ****
sscanf (s, "%d , %d , %d , %d", &fill, &width, &pen, &curved);
(*ObjPtr)->id = objId++;
}
! else
{
sscanf (s, "%d , %d , %d , %d , %d", &fill, &width, &pen, &curved,
--- 603,609 ----
sscanf (s, "%d , %d , %d , %d", &fill, &width, &pen, &curved);
(*ObjPtr)->id = objId++;
+ dash = 0;
}
! else if (fileVersion <= 8)
{
sscanf (s, "%d , %d , %d , %d , %d", &fill, &width, &pen, &curved,
***************
*** 580,584 ****
--- 610,621 ----
&((*ObjPtr)->id));
if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
+ dash = 0;
}
+ else
+ {
+ sscanf (s, "%d , %d , %d , %d , %d , %d", &fill, &width, &pen, &curved,
+ &((*ObjPtr)->id), &dash);
+ if ((*ObjPtr)->id >= objId) objId = (*ObjPtr)->id + 1;
+ }
polygon_ptr->vlist = v;
***************
*** 590,593 ****
--- 627,631 ----
polygon_ptr->pen = pen;
polygon_ptr->curved = curved;
+ polygon_ptr->dash = dash;
(*ObjPtr)->x = ltx;
(*ObjPtr)->y = lty;
*** prtgif.c.orig Wed Dec 12 14:37:17 1990
--- prtgif.c Wed Dec 12 14:37:19 1990
***************
*** 6,10 ****
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.16 90/08/16 15:28:30 william Exp $";
#endif
--- 6,10 ----
#ifndef lint
static char RCSid[] =
! "@(#)$Header: /n/kona/u/tangram/u/william/X11/TGIF/RCS/prtgif.c,v 1.17 90/11/01 13:49:48 william Exp $";
#endif
***************
*** 108,119 ****
struct ObjRec * obj_ptr;
char full_name[MAXPATHLENGTH];
FILE * fp;
! strcpy (full_name, FileName);
! strcat (full_name, ".obj");
if ((fp = fopen (full_name, "r")) == NULL)
{
! printf ("Can not open '%s'.", full_name);
return (FALSE);
}
--- 108,123 ----
struct ObjRec * obj_ptr;
char full_name[MAXPATHLENGTH];
+ int len;
FILE * fp;
! len = strlen (FileName);
! if (len >= 4 && strcmp (&FileName[len-4], ".obj") == 0)
! strcpy (full_name, FileName);
! else
! sprintf (full_name, "%s.obj", FileName);
if ((fp = fopen (full_name, "r")) == NULL)
{
! printf ("Can not open '%s'.\n", full_name);
return (FALSE);
}
---------------------------------> cut here <---------------------------------
--
Bill Cheng // UCLA Computer Science Department // (213) 206-7135
3277 Boelter Hall // Los Angeles, California 90024 // USA
william at CS.UCLA.EDU ...!{uunet|ucbvax}!cs.ucla.edu!william
--
Dan Heller
------------------------------------------------
O'Reilly && Associates Zyrcom Inc
Senior Writer President
argv at ora.com argv at zipcode.com
More information about the Comp.sources.x
mailing list