home *** CD-ROM | disk | FTP | other *** search
- /************************************************************
- Copyright 1989 by The Massachusetts Institute of Technology
-
- Permission to use, copy, modify, and distribute this
- software and its documentation for any purpose and without
- fee is hereby granted, provided that the above copyright
- notice appear in all copies and that both that copyright
- notice and this permission notice appear in supporting
- documentation, and that the name of MIT not be used in
- advertising or publicity pertaining to distribution of the
- software without specific prior written permission.
- M.I.T. makes no representation about the suitability of
- this software for any purpose. It is provided "as is"
- without any express or implied warranty.
-
- ********************************************************/
-
- /* $XConsortium: mizerarc.h,v 5.10 91/06/13 09:42:11 rws Exp $ */
-
- typedef struct {
- int x;
- int y;
- int mask;
- } miZeroArcPtRec;
-
- typedef struct {
- int x, y, k1, k3, a, b, d, dx, dy;
- int alpha, beta;
- int xorg, yorg;
- int xorgo, yorgo;
- int w, h;
- int initialMask;
- miZeroArcPtRec start, altstart, end, altend;
- int firstx, firsty;
- int startAngle, endAngle;
- } miZeroArcRec;
-
- #define miCanZeroArc(arc) (((arc)->width == (arc)->height) || \
- (((arc)->width <= 800) && ((arc)->height <= 800)))
-
- extern Bool miZeroArcSetup();
-
- #define MIARCSETUP() \
- x = info.x; \
- y = info.y; \
- k1 = info.k1; \
- k3 = info.k3; \
- a = info.a; \
- b = info.b; \
- d = info.d; \
- dx = info.dx; \
- dy = info.dy
-
- #define MIARCOCTANTSHIFT(clause) \
- if (a < 0) \
- { \
- if (y == info.h) \
- { \
- d = -1; \
- a = b = k1 = 0; \
- } \
- else \
- { \
- dx = (k1 << 1) - k3; \
- k1 = dx - k1; \
- k3 = -k3; \
- b = b + a - (k1 >> 1); \
- d = b + ((-a) >> 1) - d + (k3 >> 3); \
- if (dx < 0) \
- a = -((-dx) >> 1) - a; \
- else \
- a = (dx >> 1) - a; \
- dx = 0; \
- dy = 1; \
- clause \
- } \
- }
-
- #define MIARCSTEP(move1,move2) \
- b -= k1; \
- if (d < 0) \
- { \
- x += dx; \
- y += dy; \
- a += k1; \
- d += b; \
- move1 \
- } \
- else \
- { \
- x++; \
- y++; \
- a += k3; \
- d -= a; \
- move2 \
- }
-
- #define MIARCCIRCLESTEP(clause) \
- b -= k1; \
- x++; \
- if (d < 0) \
- { \
- a += k1; \
- d += b; \
- } \
- else \
- { \
- y++; \
- a += k3; \
- d -= a; \
- clause \
- }
-