Annotation of researchv9/X11/src/X.V11R1/server/ddx/mfb/mfbpolypnt.c, revision 1.1

1.1     ! root        1: /***********************************************************
        !             2: Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
        !             3: and the Massachusetts Institute of Technology, Cambridge, Massachusetts.
        !             4: 
        !             5:                         All Rights Reserved
        !             6: 
        !             7: Permission to use, copy, modify, and distribute this software and its 
        !             8: documentation for any purpose and without fee is hereby granted, 
        !             9: provided that the above copyright notice appear in all copies and that
        !            10: both that copyright notice and this permission notice appear in 
        !            11: supporting documentation, and that the names of Digital or MIT not be
        !            12: used in advertising or publicity pertaining to distribution of the
        !            13: software without specific, written prior permission.  
        !            14: 
        !            15: DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
        !            16: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
        !            17: DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
        !            18: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
        !            19: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
        !            20: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
        !            21: SOFTWARE.
        !            22: 
        !            23: ******************************************************************/
        !            24: /* $Header: mfbpolypnt.c,v 1.13 87/09/11 07:48:39 toddb Exp $ */
        !            25: 
        !            26: #include "X.h"
        !            27: #include "Xprotostr.h"
        !            28: #include "pixmapstr.h"
        !            29: #include "gcstruct.h"
        !            30: #include "windowstr.h"
        !            31: #include "miscstruct.h"
        !            32: #include "regionstr.h"
        !            33: #include "scrnintstr.h"
        !            34: 
        !            35: #include "mfb.h"
        !            36: #include "maskbits.h"
        !            37: 
        !            38: /* macro for checking a point in a box 
        !            39:    note that this also tosses out negative coordinates
        !            40: */
        !            41: #define PointInBox(pbox, x, y) \
        !            42:     (((x) >= (pbox)->x1) && ((x) < (pbox)->x2) && \
        !            43:      ((y) >= (pbox)->y1) && ((y) < (pbox)->y2)) \
        !            44:     ? 1 : 0
        !            45: 
        !            46: void
        !            47: mfbPolyPoint(pDrawable, pGC, mode, npt, pptInit)
        !            48:     DrawablePtr pDrawable;
        !            49:     GCPtr      pGC;
        !            50:     int                mode;           /* Origin or Previous */
        !            51:     int                npt;
        !            52:     xPoint     *pptInit;
        !            53: {
        !            54: 
        !            55:     BoxPtr pboxInit;
        !            56:     int nboxInit;
        !            57:     register BoxPtr pbox;
        !            58:     register int nbox;
        !            59:     int xorg;
        !            60:     int yorg;
        !            61: 
        !            62:     int *addrlBase;
        !            63:     register int *addrl;
        !            64:     int nlwidth;
        !            65: 
        !            66:     int nptTmp;
        !            67:     register xPoint *ppt;
        !            68: 
        !            69:     register int x;
        !            70:     register int y;
        !            71:     register int rop;
        !            72: 
        !            73:     if (!(pGC->planemask & 1))
        !            74:        return;
        !            75: 
        !            76:     pboxInit = ((mfbPrivGC *)(pGC->devPriv))->pCompositeClip->rects;
        !            77:     nboxInit = ((mfbPrivGC *)(pGC->devPriv))->pCompositeClip->numRects;
        !            78:     rop = ((mfbPrivGC *)(pGC->devPriv))->rop;
        !            79: 
        !            80:     if (pDrawable->type == DRAWABLE_WINDOW)
        !            81:     {
        !            82:        xorg = ((WindowPtr)pDrawable)->absCorner.x;
        !            83:        yorg = ((WindowPtr)pDrawable)->absCorner.y;
        !            84:        addrlBase = (int *)
        !            85:                   (((PixmapPtr)(pDrawable->pScreen->devPrivate))->devPrivate);
        !            86:        nlwidth = (int)
        !            87:                  (((PixmapPtr)(pDrawable->pScreen->devPrivate))->devKind) >> 2;
        !            88:     }
        !            89:     else
        !            90:     {
        !            91:        xorg = 0;
        !            92:        yorg = 0;
        !            93:        addrlBase = (int *)(((PixmapPtr)pDrawable)->devPrivate);
        !            94:        nlwidth = (int)(((PixmapPtr)pDrawable)->devKind) >> 2;
        !            95:     }
        !            96: 
        !            97:     /* translate the point list
        !            98:        do this here rather than in the loop because there are
        !            99:        two cases to deal with
        !           100:     */
        !           101:     ppt = pptInit;
        !           102:     nptTmp = npt;
        !           103:     if (mode == CoordModeOrigin)
        !           104:     {
        !           105:        while(nptTmp--)
        !           106:        {
        !           107:            ppt->x += xorg;
        !           108:            ppt++->y += yorg;
        !           109:        }
        !           110:     }
        !           111:     else
        !           112:     {
        !           113:        ppt->x += xorg;
        !           114:        ppt->y += yorg;
        !           115:        nptTmp--;
        !           116:        while(nptTmp--)
        !           117:        {
        !           118:            ppt++;
        !           119:            ppt->x += (ppt-1)->x;
        !           120:            ppt->y += (ppt-1)->y;
        !           121:        }
        !           122:     }
        !           123: 
        !           124:     ppt = pptInit;
        !           125: /* NOTE
        !           126:    the if(rop) could be moved outside of the loop, at
        !           127:    the cost of having three times as much code.
        !           128: */
        !           129:     while (npt--)
        !           130:     {
        !           131:        nbox = nboxInit;
        !           132:        pbox = pboxInit;
        !           133:        x = ppt->x;
        !           134:        y = ppt++->y;
        !           135: 
        !           136:        while(nbox--)
        !           137:        {
        !           138:            if (PointInBox(pbox, x, y))
        !           139:            {
        !           140:                addrl = addrlBase +
        !           141:                        (y * nlwidth) +
        !           142:                        (x >> 5);
        !           143: 
        !           144:                if (rop == RROP_BLACK)
        !           145:                    *addrl &= rmask[x & 0x1f];
        !           146:                else if (rop == RROP_WHITE)
        !           147:                    *addrl |= mask[x & 0x1f];
        !           148:                else if (rop == RROP_INVERT)
        !           149:                    *addrl ^= mask[x & 0x1f];
        !           150: 
        !           151:                break;
        !           152:            }
        !           153:            else
        !           154:                pbox++;
        !           155:        }
        !           156:     }
        !           157: }
        !           158: 

unix.superglobalmegacorp.com

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