a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/************************************************************
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncCopyright 1989, 1998 The Open Group
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncPermission to use, copy, modify, distribute, and sell this software and its
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncdocumentation for any purpose is hereby granted without fee, provided that
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncthe above copyright notice appear in all copies and that both that
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynccopyright notice and this permission notice appear in supporting
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncdocumentation.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncThe above copyright notice and this permission notice shall be included in
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncall copies or substantial portions of the Software.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncExcept as contained in this notice, the name of The Open Group shall not be
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncused in advertising or otherwise to promote the sale, use or other dealings
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncin this Software without prior written authorization from The Open Group.
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync********************************************************/
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int x;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int y;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int mask;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} miZeroArcPtRec;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsynctypedef struct {
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int x, y, k1, k3, a, b, d, dx, dy;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int alpha, beta;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int xorg, yorg;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int xorgo, yorgo;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int w, h;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int initialMask;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync miZeroArcPtRec start, altstart, end, altend;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int firstx, firsty;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync int startAngle, endAngle;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync} miZeroArcRec;
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define miCanZeroArc(arc) (((arc)->width == (arc)->height) || \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync (((arc)->width <= 800) && ((arc)->height <= 800)))
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define MIARCSETUP() \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync x = info.x; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync y = info.y; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync k1 = info.k1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync k3 = info.k3; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a = info.a; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync b = info.b; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d = info.d; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dx = info.dx; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dy = info.dy
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define MIARCOCTANTSHIFT(clause) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (a < 0) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (y == info.h) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d = -1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a = b = k1 = 0; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync } \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync else \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dx = (k1 << 1) - k3; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync k1 = dx - k1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync k3 = -k3; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync b = b + a - (k1 >> 1); \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d = b + ((-a) >> 1) - d + (k3 >> 3); \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (dx < 0) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a = -((-dx) >> 1) - a; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync else \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a = (dx >> 1) - a; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dx = 0; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync dy = 1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync clause \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync } \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync }
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define MIARCSTEP(move1,move2) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync b -= k1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (d < 0) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync x += dx; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync y += dy; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a += k1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d += b; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync move1 \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync } \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync else \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync x++; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync y++; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a += k3; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d -= a; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync move2 \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync }
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync#define MIARCCIRCLESTEP(clause) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync b -= k1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync x++; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync if (d < 0) \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a += k1; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d += b; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync } \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync else \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync { \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync y++; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync a += k3; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync d -= a; \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync clause \
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync }
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync/* mizerarc.c */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsyncextern _X_EXPORT Bool miZeroArcSetup(xArc * /*arc */ ,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync miZeroArcRec * /*info */ ,
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync Bool /*ok360 */
a5e7ae69e440f6816420fc99599f044e79e716b6vboxsync );