|
|
1.1 root 1: /*
2: * UserPath.h by Bruce Blumberg, NeXT Computer, Inc.
3: *
4: * You may freely copy,distribute and re-use the code in this example. NeXT
5: * disclaims any warranty of any kind, expressed or implied, as to its fitness
6: * for any particular purpose
7: *
8: * This file and its associated .m file define a data structure and set of
9: * functions aimed at facilitating the use of user paths. Here is a simple
10: * example:
11: *
12: * UserPath *arect;
13: * arect = newUserPath(); // creates an empty user path
14: * beginUserPath(arect,YES); // initialize user path and cache
15: * UPmoveto(arect,0.0,0.0); // add moveto to userpath; update bounding box
16: * UPrlineto(arect,0.0,100.0); // add rlineto to path; update bounding box
17: * UPrlineto(arect,100.0,0.0); // add rlineto to path; update bounding box
18: * UPrlineto(arect,0.0,-100.0); // add rlineto to path; update bounding box
19: * closePath(arect); // close path
20: * endUserPath(arect,dps_stroke); // close user path and specify operator
21: * sendUserPath(arect);
22: *
23: * As you will note, the set of routines manage the allocation and growth of
24: * the operator and operand arrays, as well as the calculation of the bounding
25: * box. A user path created via these functions may be optionally cached down
26: * at the window server, or repeatedly sent down. The user paths created by
27: * this set of functions are all allocated in a unique zone.
28: *
29: * Note: the associated file is a .m file because it pulls in some .h files
30: * which reference objective C methods.
31: */
32:
33: #import <objc/objc.h>
34: #import <dpsclient/dpsclient.h>
35:
36: typedef struct _UP {
37: float *points;
38: int numberOfPoints;
39: char *ops;
40: NXPoint cp;
41: int numberOfOps;
42: int max;
43: float bbox[4];
44: int opForUserPath;
45: BOOL ping;
46: } UserPath;
47:
48: /* UserPath functions */
49: NXZone *userPathZone();
50: UserPath *newUserPath();
51: void freeUserPath(UserPath *up);
52: void debugUserPath(UserPath *up, BOOL shouldPing);
53: void growUserPath(UserPath *up);
54: void beginUserPath(UserPath *up, BOOL cache);
55: void endUserPath(UserPath *up, int op);
56: int sendUserPath(UserPath *up);
57: void UPmoveto(UserPath *up, float x, float y);
58: void UPrmoveto(UserPath *up, float x, float y);
59: void UPlineto(UserPath *up, float x, float y);
60: void UPrlineto(UserPath *up, float x, float y);
61: void UPcurveto(UserPath *up, float x1, float y1, float x2, float y2, float x3,
62: float y3);
63: void UPrcurveto(UserPath *up, float dx1, float dy1, float dx2, float dy2,
64: float dx3, float dy3);
65: void UParc(UserPath *up, float x, float y, float r, float ang1, float ang2);
66: void UParcn(UserPath *up, float x, float y, float r, float ang1, float ang2);
67: void UParct(UserPath *up, float x1, float y1, float x2, float y2, float r);
68: void closePath(UserPath *up);
69: void addPts(UserPath *up, float x, float y);
70: void addOp(UserPath *up, int op);
71: void add(UserPath *up, int op, float x, float y);
72: void checkBBox(UserPath *up, float x, float y);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.