|
|
1.1 root 1: #ifndef lint
2: static char *rcsid_draw_c = "$Header: draw.c,v 10.1 86/11/29 13:51:24 jg Rel $";
3: #endif lint
4: /*
5:
6: Copyright 1986 by the University of Utah
7:
8: Permission to use, copy, modify, and distribute this
9: software and its documentation for any purpose and without
10: fee is hereby granted, provided that the above copyright
11: notice appear in all copies and that both that copyright
12: notice and this permission notice appear in supporting
13: documentation, and that the name of the University of Utah
14: not be used in advertising or publicity pertaining to
15: distribution of the software without specific, written
16: prior permission. The University of Utah makes no
17: representations about the suitability of this software for
18: any purpose. It is provided "as is" without express or
19: implied warranty.
20:
21: */
22:
23: /* draw.c Draw lines, curves, and polygons on the screen
24: *
25: * DrawCurve Draw a generalized line/polygon/combination
26: *
27: */
28:
29: /*
30: * ToDo:
31: * Brush shapes
32: * Patterned Curves
33: * Curves
34: */
35:
36: #include "Xapollo.h"
37: status_$t status;
38:
39: static
40: Draw_Solid(srcpix, xbase, ybase, op, vertcount, verts, clipcount, clips, zmask)
41: int srcpix; /* Pixel value to write */
42: int xbase, ybase; /* Origin of curve */
43: int op; /* Opcode */
44: int vertcount; /* Length of Vertex array */
45: Vertex *verts; /* Vertices */
46: int clipcount; /* Length of clip array */
47: CLIP *clips; /* clipping rectangles */
48: int zmask;
49: {
50: register Vertex *v = verts;
51: char *kind;
52: int i;
53: int allmask = -1;
54: gpr_$window_t cwindow;
55:
56: gpr_$set_draw_value((gpr_$pixel_value_t)srcpix, status);
57: set_zmask( zmask );
58: set_op( op );
59: do {
60: register int xp, yp;
61: register Vertex *v = verts;
62: register int vc = vertcount;
63:
64: GetNextClip(clips, cwindow);
65: CheckCursor(cwindow.x_coord, cwindow.y_coord,
66: cwindow.x_size, cwindow.y_size);
67: gpr_$set_clip_window( cwindow, status);
68: do {
69:
70: if (v->flags & VertexRelative) {
71: xp += v->x;
72: yp += v->y;
73: }
74: else {
75: xp = v->x + xbase;
76: yp = v->y + ybase;
77: }
78: /* XXX - ignore VertexCurved for now */
79: /* XXX - ignore VertexDrawLastPoint for now */
80:
81: if (v->flags & VertexDontDraw)
82: gpr_$move((short)xp, (short)yp, status);
83: else
84: gpr_$line((short)xp, (short)yp, status);
85:
86: v++;
87: } while (--vc > 0);
88: } while (--clipcount > 0);
89: RestoreCursor();
90: }
91:
92: DrawCurve (verts, vertcount, xbase, ybase, srcpix, altpix, mode,
93: bwidth, bheight, pat, patlen, patmul, clips, clipcount, func, zmask)
94: Vertex *verts;
95: int vertcount, xbase, ybase, srcpix, altpix, mode, bwidth, bheight;
96: int pat, patlen, patmul, clipcount, zmask;
97: register int func;
98: CLIP *clips;
99: {
100: static gpr_$line_pattern_t pattern = {0, 0, 0, 0};
101: int op = func;
102:
103: pattern[0] = pat; /* must invert bits ? */
104: if (mode == DrawSolidLine) patlen = 0;
105: gpr_$set_line_pattern((short)patmul, pattern, (short)patlen, status);
106: if (bwidth == 1 && bheight == 1)
107: switch (mode) {
108: case DrawSolidLine:
109: Draw_Solid(srcpix, xbase, ybase, op,
110: vertcount, verts, clipcount, clips, zmask);
111: break;
112: case DrawDashedLine:
113: Draw_Solid(srcpix, xbase, ybase, op,
114: vertcount, verts, clipcount, clips, zmask);
115: break;
116: case DrawPatternedLine:
117: Draw_Solid(srcpix, xbase, ybase, op,
118: vertcount, verts, clipcount, clips, zmask);
119: break;
120: }
121: else
122: switch (mode) {
123: /* XXX - ignores brush specification for now */
124: case DrawSolidLine:
125: Draw_Solid(srcpix, xbase, ybase, op,
126: vertcount, verts, clipcount, clips, zmask);
127: break;
128: case DrawDashedLine:
129: Draw_Solid(srcpix, xbase, ybase, op,
130: vertcount, verts, clipcount, clips, zmask);
131: break;
132: case DrawPatternedLine:
133: Draw_Solid(srcpix, xbase, ybase, op,
134: vertcount, verts, clipcount, clips, zmask);
135: break;
136: }
137:
138: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.