mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-26 22:31:05 +00:00
80 lines
3.1 KiB
C
80 lines
3.1 KiB
C
/*
|
|
* UserPath.h by Bruce Blumberg, NeXT Computer, Inc.
|
|
*
|
|
* You may freely copy,distribute and re-use the code in this example. NeXT
|
|
* disclaims any warranty of any kind, expressed or implied, as to its fitness
|
|
* for any particular purpose
|
|
*
|
|
* This file and its associated .m file define a data structure and set of
|
|
* functions aimed at facilitating the use of user paths. Here is a simple
|
|
* example:
|
|
*
|
|
* UserPath *arect;
|
|
* arect = newUserPath(); // creates an empty user path
|
|
* beginUserPath(arect,YES); // initialize user path and cache
|
|
* UPmoveto(arect,0.0,0.0); // add moveto to userpath; update bounding box
|
|
* UPrlineto(arect,0.0,100.0); // add rlineto to path; update bounding box
|
|
* UPrlineto(arect,100.0,0.0); // add rlineto to path; update bounding box
|
|
* UPrlineto(arect,0.0,-100.0); // add rlineto to path; update bounding box
|
|
* closePath(arect); // close path
|
|
* endUserPath(arect,dps_stroke); // close user path and specify operator
|
|
* sendUserPath(arect);
|
|
*
|
|
* As you will note, the set of routines manage the allocation and growth of
|
|
* the operator and operand arrays, as well as the calculation of the bounding
|
|
* box. A user path created via these functions may be optionally cached down
|
|
* at the window server, or repeatedly sent down. The user paths created by
|
|
* this set of functions are all allocated in a unique zone.
|
|
*
|
|
* Note: the associated file is a .m file because it pulls in some .h files
|
|
* which reference objective C methods.
|
|
*/
|
|
|
|
#ifndef UserPath_h
|
|
#define UserPath_h
|
|
|
|
#include <objc/objc.h>
|
|
#include <AppKit/NSGraphicsContext.h>
|
|
|
|
typedef struct _UP {
|
|
float *points;
|
|
int numberOfPoints;
|
|
char *ops;
|
|
NSPoint cp;
|
|
int numberOfOps;
|
|
int max;
|
|
float bbox[4];
|
|
int opForUserPath;
|
|
BOOL ping;
|
|
} UserPath;
|
|
|
|
/* UserPath functions */
|
|
NSZone *userPathZone ();
|
|
UserPath *newUserPath ();
|
|
void freeUserPath (UserPath * up);
|
|
void debugUserPath (UserPath * up, BOOL shouldPing);
|
|
void growUserPath (UserPath * up);
|
|
void beginUserPath (UserPath * up, BOOL cache);
|
|
void endUserPath (UserPath * up, int op);
|
|
int sendUserPath (UserPath * up);
|
|
void UPmoveto (UserPath * up, float x, float y);
|
|
void UPrmoveto (UserPath * up, float x, float y);
|
|
void UPlineto (UserPath * up, float x, float y);
|
|
void UPrlineto (UserPath * up, float x, float y);
|
|
void UPcurveto (UserPath * up, float x1, float y1, float x2, float y2,
|
|
float x3, float y3);
|
|
void UPrcurveto (UserPath * up, float dx1, float dy1, float dx2,
|
|
float dy2, float dx3, float dy3);
|
|
void UParc (UserPath * up, float x, float y, float r, float ang1,
|
|
float ang2);
|
|
void UParcn (UserPath * up, float x, float y, float r, float ang1,
|
|
float ang2);
|
|
void UParct (UserPath * up, float x1, float y1, float x2, float y2,
|
|
float r);
|
|
void closePath (UserPath * up);
|
|
void addPts (UserPath * up, float x, float y);
|
|
void addOp (UserPath * up, int op);
|
|
void add (UserPath * up, int op, float x, float y);
|
|
void checkBBox (UserPath * up, float x, float y);
|
|
|
|
#endif // UserPath_h
|