quakeforge/tools/Forge/Bundles/MapEdit/UserPath.h
2010-11-28 15:31:31 +09:00

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