123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /************************************************************
- Copyright 1989, 1998 The Open Group
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation.
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- Except as contained in this notice, the name of The Open Group shall not be
- used in advertising or otherwise to promote the sale, use or other dealings
- in this Software without prior written authorization from The Open Group.
- ********************************************************/
- 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)))
- #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 \
- }
- /* mizerarc.c */
- extern Bool miZeroArcSetup(
- xArc * /*arc*/,
- miZeroArcRec * /*info*/,
- Bool /*ok360*/
- );
- extern DDXPointPtr miZeroArcPts(
- xArc * /*arc*/,
- DDXPointPtr /*pts*/
- );
|