Annotation of 43BSDTahoe/new/X/libis/draw.c, revision 1.1

1.1     ! root        1: /*
        !             2:  *     $Source: /u1/X/libis/RCS/draw.c,v $
        !             3:  *     $Header: draw.c,v 1.1 86/11/17 14:33:49 swick Rel $
        !             4:  */
        !             5: 
        !             6: #ifndef lint
        !             7: static char *rcsid_draw_c = "$Header: draw.c,v 1.1 86/11/17 14:33:49 swick Rel $";
        !             8: #endif lint
        !             9: 
        !            10: #include "is-copyright.h"
        !            11: 
        !            12: /*     draw.c          Draw lines, curves, and polygons on the screen
        !            13:  *
        !            14:  *     DrawCurve       Draw a generalized line/polygon/combination
        !            15:  *
        !            16:  *     Copyright (c) 1986, Integrated Solutions, Inc.
        !            17:  */
        !            18: 
        !            19: /*
        !            20:  *     ToDo:
        !            21:  *             Dash/Pattern
        !            22:  *             Curves
        !            23:  */
        !            24: 
        !            25: #include "Xis.h"
        !            26: 
        !            27: #define        imin(i,j)       ((i)<(j)?(i):(j))
        !            28: #define        imax(i,j)       ((i)>(j)?(i):(j))
        !            29: 
        !            30: static
        !            31: Draw_Solid(srcpix, xbase, ybase, func, vertcount, verts, clipcount, clips, zmask, bwidth, bheight)
        !            32: int    srcpix;         /* Pixel value to write */
        !            33: int    xbase, ybase;   /* Origin of curve */
        !            34: int    func;           /* Opcode */
        !            35: int    vertcount;      /* Length of Vertex array */
        !            36: Vertex *verts;         /* Vertices */
        !            37: int    clipcount;      /* Length of clip array */
        !            38: CLIP   *clips;         /* clipping rectangles */
        !            39: int    zmask;          /* plane mask */
        !            40: int    bwidth, bheight;/* brush width and height */
        !            41: {
        !            42:     PIXMAP *fillpix;
        !            43:     extern PIXMAP *MakePixmap();
        !            44: 
        !            45:     fillpix = MakePixmap((BITMAP *)NULL, srcpix, 0);
        !            46:     do {       /* for each clipping region */
        !            47:        register int xp, yp;
        !            48:        register Vertex *v = verts;
        !            49:        register int vc = vertcount;
        !            50: 
        !            51:        do {    /* for each vertex */
        !            52:            register    xo = xp, yo = yp;
        !            53:            /* first vertex is always VertexDontDraw and !VertexRelative */
        !            54:            /* xo,yo do not matter and xp,yp get initialized first time */
        !            55: 
        !            56:            if (v->flags & VertexRelative) {
        !            57:                xp += v->x;
        !            58:                yp += v->y;
        !            59:            } else {
        !            60:                xp = v->x + xbase;
        !            61:                yp = v->y + ybase;
        !            62:            }
        !            63:            /* XXX - ignore VertexCurved for now */
        !            64:            /* XXX - ignore VertexDrawLastPoint for now */
        !            65:            if (!(v->flags & VertexDontDraw)) {
        !            66:                CLIP bounds;
        !            67: 
        !            68:                /* bounding rectangle of two points */
        !            69:                bounds.top = imin(yo, yp);
        !            70:                bounds.left = imin(xo, xp);
        !            71:                bounds.width = imax(xo, xp) + bwidth - bounds.left;
        !            72:                bounds.height = imax(yo, yp) + bheight - bounds.top;
        !            73: 
        !            74:                if (Overlap(bounds, clips[clipcount-1])) {
        !            75:                    /* vector at least partly visible */
        !            76:                    CLIP i;
        !            77:                    i = Intersection(clips[clipcount-1], bounds);
        !            78:                    CheckCursor(i);
        !            79:                    if ((xo == xp) || (yo == yp)) {
        !            80:                        /* horizontal or vertical vector */
        !            81:                        GIP_RasterOp((unsigned char)func,
        !            82:                            fillpix, 0, 0,
        !            83:                            &ScreenPixmap, i.left, i.top,
        !            84:                            (BITMAP *)0, 0, 0,
        !            85:                            i.width, i.height, zmask);
        !            86:                    } else {
        !            87:                        /* non-horizontal and non-vertical vector */
        !            88:                        GIP_Vector((unsigned char)func,
        !            89:                            fillpix, 0, 0,
        !            90:                            &ScreenPixmap, xo, yo, xp, yp,
        !            91:                            i.left, i.top, i.left+i.width-1, i.top+i.height-1,
        !            92:                            bwidth, bheight, zmask);
        !            93:                    }
        !            94:                }
        !            95:            }
        !            96:            v++;
        !            97:        } while (--vc > 0);
        !            98:     } while (--clipcount > 0);
        !            99:     if (!--fillpix->refcnt)
        !           100:        FreePixmap (fillpix);
        !           101:     RestoreCursor();
        !           102: }
        !           103: 
        !           104: DrawCurve(verts, vertcount, xbase, ybase, srcpix, altpix, mode,
        !           105:           bwidth, bheight, pat, patlen, patmul, clips, clipcount, func, zmask)
        !           106: Vertex *verts;
        !           107: int    vertcount, xbase, ybase, srcpix, altpix, mode, bwidth, bheight;
        !           108: int    pat, patlen, patmul, clipcount, func, zmask;
        !           109: CLIP   *clips;
        !           110: {
        !           111: 
        !           112: #ifdef DEBUG
        !           113: if (debug & D_DrawCurve)
        !           114:     printf("DrawCurve(verts=0x%x, vertcount=%d, xbase=%d, ybase=%d,\n  srcpix=%d, altpix=%d, mode=%d, bwidth=%d, bheight=%d\n  pat=%d, patlen=%d, patmul=%d\n  clips=0x%x, clipcount=%d, func=%d, zmask=0x%04x)\n",
        !           115:        verts, vertcount, xbase, ybase, srcpix, altpix, mode, bwidth, bheight,
        !           116:        pat, patlen, patmul, clips, clipcount, func, zmask);
        !           117: #endif DEBUG
        !           118: 
        !           119:     switch (mode) { /* XXX - ignores dash/pattern for now */
        !           120:     case DrawSolidLine:
        !           121:        Draw_Solid(srcpix, xbase, ybase, func, vertcount, verts,
        !           122:                    clipcount, clips, zmask, bwidth, bheight);
        !           123:        break;
        !           124:     case DrawDashedLine:
        !           125:        Draw_Solid(srcpix, xbase, ybase, func, vertcount, verts,
        !           126:                    clipcount, clips, zmask, bwidth, bheight);
        !           127:        break;
        !           128:     case DrawPatternedLine:
        !           129:        Draw_Solid(srcpix, xbase, ybase, func, vertcount, verts,
        !           130:                    clipcount, clips, zmask, bwidth, bheight);
        !           131:        break;
        !           132:     }
        !           133: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.