127 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
/************************************************************
 | 
						|
 | 
						|
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 _X_EXPORT Bool miZeroArcSetup(
 | 
						|
    xArc * /*arc*/,
 | 
						|
    miZeroArcRec * /*info*/,
 | 
						|
    Bool /*ok360*/
 | 
						|
);
 |