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 Bool miZeroArcSetup(
 | |
|     xArc * /*arc*/,
 | |
|     miZeroArcRec * /*info*/,
 | |
|     Bool /*ok360*/
 | |
| );
 |