Annotation of 43BSD/contrib/X/libsun/cursor.c, revision 1.1

1.1     ! root        1: #ifdef sun
        !             2: /*
        !             3:  * The Sun X drivers are a product of Sun Microsystems, Inc. and are provided
        !             4:  * for unrestricted use provided that this legend is included on all tape
        !             5:  * media and as a part of the software program in whole or part.  Users
        !             6:  * may copy or modify these drivers without charge, but are not authorized
        !             7:  * to license or distribute them to anyone else except as part of a product or
        !             8:  * program developed by the user.
        !             9:  * 
        !            10:  * THE SUN X DRIVERS ARE PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
        !            11:  * INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A
        !            12:  * PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE
        !            13:  * PRACTICE.
        !            14:  *
        !            15:  * The Sun X Drivers are provided with no support and without any obligation
        !            16:  * on the part of Sun Microsystems, Inc. to assist in their use, correction,
        !            17:  * modification or enhancement.
        !            18:  * 
        !            19:  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
        !            20:  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THE SUN X
        !            21:  * DRIVERS OR ANY PART THEREOF.
        !            22:  * 
        !            23:  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
        !            24:  * or profits or other special, indirect and consequential damages, even if
        !            25:  * Sun has been advised of the possibility of such damages.
        !            26:  * 
        !            27:  * Sun Microsystems, Inc.
        !            28:  * 2550 Garcia Avenue
        !            29:  * Mountain View, California  94043
        !            30:  */
        !            31: 
        !            32: #ifndef        lint
        !            33: static char sccsid[] = "@(#)cursor.c 2.1 86/01/28 Copyright 1986 Sun Micro";
        !            34: #endif
        !            35: 
        !            36: /*-
        !            37:  * Copyright (c) 1986 by Sun Microsystems,  Inc.
        !            38:  */
        !            39: 
        !            40: /* cursor.c    various stuff with the mouse & cursor
        !            41:  *
        !            42:  *     StoreCursor             Creates a cursor
        !            43:  *     FreeCursor              Frees the storage taken by a cursor
        !            44:  *     LoadCursor              Loads a bitmap to use as cursor
        !            45:  *     InitMouse               Initialize the mouse
        !            46:  *     SetCursorPosition       Forces cursor to a particular position
        !            47:  *     SetMouseCharacteristics Controls speed of cursor relative to mouse
        !            48:  *
        !            49:  */
        !            50: 
        !            51: /*
        !            52:  *     ToDo:
        !            53:  *             Threshold/Acceleration
        !            54:  *             Use macros for CheckCursor()
        !            55:  */
        !            56: 
        !            57: #include "Xsun.h"
        !            58: 
        !            59: extern struct pixrect *PixRect;
        !            60: extern char *Xalloc();
        !            61: extern DEVICE *CurrentDevice;
        !            62: CURSOR *CurrentCursor;
        !            63: int CursorDisplayed;
        !            64: static struct pixrect *CursorPixrect;
        !            65: 
        !            66: CURSOR *StoreCursor (func, image, fore, back, mask, xoff, yoff)
        !            67:        BITMAP *image;
        !            68:        BITMAP *mask;
        !            69:        int func, fore, back, xoff, yoff;
        !            70: {
        !            71:     register CURSOR *cursor;
        !            72:     register CursPriv *data;
        !            73: 
        !            74:     if (!image)
        !            75:        return (NULL);
        !            76:     cursor = (CURSOR *) Xalloc(sizeof(CURSOR));
        !            77:     cursor->width = image->width;
        !            78:     cursor->height = image->height;
        !            79:     /* Only the tip need be on-screen */
        !            80:     cursor->xmin = 0;
        !            81:     cursor->ymin = 0;
        !            82:     cursor->xoff = xoff;
        !            83:     cursor->yoff = yoff;
        !            84:     cursor->xmax = PixRect->pr_size.x;
        !            85:     cursor->ymax = PixRect->pr_size.y;
        !            86:     cursor->refcnt = 1;
        !            87:     data = (CursPriv *) Xalloc(sizeof(CursPriv));
        !            88:     cursor->data = (caddr_t) data;
        !            89:     data->top = mem_point(image->width, image->height, 1, image->data);
        !            90:     data->top_bit = image;
        !            91:     image->refcnt++;
        !            92:     if (mask) {
        !            93:        data->bot = mem_point(mask->width, mask->height, 1, mask->data);
        !            94:        data->bot_bit = mask;
        !            95:        mask->refcnt++;
        !            96:     } else {
        !            97:        data->bot = NULL;
        !            98:        data->bot_bit = NULL;
        !            99:     }
        !           100:     data->sv = mem_create(cursor->width, cursor->height, PixRect->pr_depth);
        !           101:     data->fore = fore;
        !           102:     data->back = back;
        !           103:     return (cursor);
        !           104: }
        !           105: 
        !           106: FreeCursor (cursor)
        !           107:        register CURSOR *cursor;
        !           108: {
        !           109:     CursPriv   *cp = CDATA(cursor);
        !           110:     pr_destroy(cp->top);
        !           111:     if (cp->top_bit && --(cp->top_bit)->refcnt <= 0)
        !           112:        FreeBitmap(cp->top_bit);
        !           113:     if (cp->bot) {
        !           114:        pr_destroy(cp->bot);
        !           115:        if (cp->bot_bit && --(cp->bot_bit)->refcnt <= 0)
        !           116:            FreeBitmap(cp->bot_bit);
        !           117:     }
        !           118:     pr_destroy(cp->sv);
        !           119:     free((caddr_t) CDATA(cursor));
        !           120:     free((caddr_t) cursor);
        !           121: }
        !           122: 
        !           123: struct pr_prpos topbatch, botbatch;
        !           124: 
        !           125: LoadCursor (cursor)
        !           126:        register CURSOR *cursor;
        !           127: {
        !           128:     if (CursorDisplayed)
        !           129:        DisplayCursor(NULL);
        !           130:     if ((CurrentCursor = cursor) != NULL) {
        !           131:        topbatch.pr = CDATA(cursor)->top;
        !           132:        topbatch.pos.x = 0;
        !           133:        topbatch.pos.y = 0;
        !           134:        botbatch.pr = CDATA(cursor)->bot;
        !           135:        botbatch.pos.x = 0;
        !           136:        botbatch.pos.y = 0;
        !           137:        DisplayCursor(cursor);
        !           138:     }
        !           139: }
        !           140: 
        !           141: InitMouse ()
        !           142: {
        !           143: }
        !           144: 
        !           145: SetCursorPosition(pos)
        !           146:        register vsCursor *pos;
        !           147: {
        !           148:     if (pos->x != (CurrentDevice->mouse->x) || pos->y != (CurrentDevice->mouse->y)) {
        !           149:        if (CursorDisplayed)
        !           150:            DisplayCursor(NULL);
        !           151:        *(CurrentDevice->mouse) = *pos;
        !           152:        DisplayCursor(CurrentCursor);
        !           153:     }
        !           154: }
        !           155: 
        !           156: SetMouseCharacteristics (threshold, accelaration)
        !           157:        int threshold, accelaration;
        !           158: {
        !           159: }
        !           160: 
        !           161: DisplayCursor(cs)
        !           162: CURSOR *cs;
        !           163: {
        !           164:     extern struct pixrect *PixRect;
        !           165:     vsCursor   *ms = CurrentDevice->mouse;
        !           166: 
        !           167:     if (cs == NULL) {
        !           168:        if (CurrentCursor) {
        !           169:            /* take it out */
        !           170:            extern private_czmask;
        !           171:            int old_zmask = private_czmask, allmask = -1;
        !           172: 
        !           173:            SetZmask(PixRect, &allmask);
        !           174:            pr_rop(PixRect, ms->x, ms->y, CurrentCursor->width,
        !           175:                   CurrentCursor->height, PIX_SRC, CDATA(CurrentCursor)->sv, 0, 0);
        !           176:            SetZmask(PixRect, &old_zmask);
        !           177:            CursorDisplayed = 0;
        !           178:        }
        !           179:     }
        !           180:     else {
        !           181:        CursPriv   *cp = CDATA(cs);
        !           182:        /* put it in */
        !           183: 
        !           184:        pr_rop(cp->sv, 0, 0, cs->width, cs->height, PIX_SRC,
        !           185:               PixRect, ms->x, ms->y);
        !           186:        if (PixRect->pr_depth == 1) {
        !           187:            int botop = (cp->back == 1 ? PIX_SRC | PIX_DST : PIX_NOT(PIX_SRC) & PIX_DST);
        !           188:            int topop = (cp->fore == 1 ? PIX_SRC | PIX_DST : PIX_NOT(PIX_SRC) & PIX_DST);
        !           189: 
        !           190:            if (botbatch.pr)
        !           191:                pr_batchrop(PixRect, ms->x, ms->y,
        !           192:                            botop,
        !           193:                            &botbatch, 1);
        !           194:            if (topbatch.pr)
        !           195:                pr_batchrop(PixRect, ms->x, ms->y,
        !           196:                            topop,
        !           197:                            &topbatch, 1);
        !           198:        }
        !           199:        else {
        !           200:            extern private_bgcolor, private_fgcolor, private_czmask;
        !           201:            int old_zmask = private_czmask;
        !           202: 
        !           203:            private_bgcolor = -1;
        !           204:            private_czmask = -1;
        !           205:            if (botbatch.pr) {
        !           206:                private_fgcolor = cp->back;
        !           207:                pr_batchrop(PixRect, ms->x, ms->y,
        !           208:                            PIX_SRC | PIX_DST,
        !           209:                            &botbatch, 1);
        !           210:            }
        !           211:            private_fgcolor = cp->fore;
        !           212:            if (topbatch.pr)
        !           213:                pr_batchrop(PixRect, ms->x, ms->y,
        !           214:                            PIX_NOT(PIX_SRC) & PIX_DST,
        !           215:                            &topbatch, 1);
        !           216:            private_czmask = old_zmask;
        !           217:        }
        !           218:        CursorDisplayed = 1;
        !           219:     }
        !           220: }
        !           221: 
        !           222: int
        !           223: CheckCursor(x, y, w, h)
        !           224: {
        !           225:     register vsCursor *ms = CurrentDevice->mouse;
        !           226:     register CURSOR *cs = CurrentCursor;
        !           227: 
        !           228:     if (CursorDisplayed
        !           229:        && OverLap(x, y, w, h, ms->x, ms->y, cs->width, cs->height)) {
        !           230:            DisplayCursor(NULL);
        !           231:        }
        !           232: }
        !           233: 
        !           234: RestoreCursor()
        !           235: {
        !           236:     if (!CursorDisplayed)
        !           237:        DisplayCursor(CurrentCursor);
        !           238: }
        !           239: #endif sun

unix.superglobalmegacorp.com

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