diff options
Diffstat (limited to 'nx-X11/programs/Xserver/hw/sun/sunCursor.c')
-rw-r--r-- | nx-X11/programs/Xserver/hw/sun/sunCursor.c | 281 |
1 files changed, 0 insertions, 281 deletions
diff --git a/nx-X11/programs/Xserver/hw/sun/sunCursor.c b/nx-X11/programs/Xserver/hw/sun/sunCursor.c deleted file mode 100644 index 2d653c753..000000000 --- a/nx-X11/programs/Xserver/hw/sun/sunCursor.c +++ /dev/null @@ -1,281 +0,0 @@ -/* $Xorg: sunCursor.c,v 1.4 2001/02/09 02:04:43 xorgcvs Exp $ */ -/* - -Copyright 1988 Sun Microsystems, Inc. -Copyright 1993, 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. - -*/ -/* $XFree86: xc/programs/Xserver/hw/sun/sunCursor.c,v 3.5 2001/12/14 19:59:43 dawes Exp $ */ - -/*- - * sunCursor.c -- - * Functions for maintaining the Sun software cursor... - * - */ - -#define NEED_EVENTS -#include "sun.h" -#include "cfb.h" -#include "mfb.h" - -#ifdef FBIOGCURMAX /* has hardware cursor kernel support */ - -#define GetCursorPrivate(s) (&(GetScreenPrivate(s)->hardwareCursor)) -#define SetupCursor(s) sunCursorPtr pCurPriv = GetCursorPrivate(s) - -static void sunLoadCursor(); - -static Bool -sunRealizeCursor (pScreen, pCursor) - ScreenPtr pScreen; - CursorPtr pCursor; -{ - SetupCursor(pScreen); - int x, y; - - /* miRecolorCursor does this */ - if (pCurPriv->pCursor == pCursor) - { - miPointerPosition (&x, &y); - sunLoadCursor (pScreen, pCursor, x, y); - } - return TRUE; -} - -static Bool -sunUnrealizeCursor (pScreen, pCursor) - ScreenPtr pScreen; - CursorPtr pCursor; -{ - return TRUE; -} - -static void -sunCursorRepad (pScreen, bits, src_bits, dst_bits, ptSrc, w, h) - ScreenPtr pScreen; - CursorBitsPtr bits; - unsigned char *src_bits, *dst_bits; - DDXPointPtr ptSrc; - int w, h; -{ - PixmapPtr src, dst; - BoxRec box; - RegionRec rgnDst; - - if (!(src = GetScratchPixmapHeader(pScreen, bits->width, bits->height, - /*bpp*/ 1, /*depth*/ 1, - PixmapBytePad(bits->width,1), src_bits))) - return; - if (!(dst = GetScratchPixmapHeader(pScreen, w, h, /*bpp*/ 1, /*depth*/ 1, - PixmapBytePad(w,1), dst_bits))) - { - FreeScratchPixmapHeader(src); - return; - } - box.x1 = 0; - box.y1 = 0; - box.x2 = w; - box.y2 = h; - REGION_INIT(pScreen, &rgnDst, &box, 1); - mfbDoBitblt(&src->drawable, &dst->drawable, GXcopy, &rgnDst, ptSrc); - REGION_UNINIT(pScreen, &rgnDst); - FreeScratchPixmapHeader(src); - FreeScratchPixmapHeader(dst); -} - -static void -sunLoadCursor (pScreen, pCursor, x, y) - ScreenPtr pScreen; - CursorPtr pCursor; - int x, y; -{ - SetupCursor(pScreen); - struct fbcursor fbcursor; - int w, h; - unsigned char r[2], g[2], b[2]; - DDXPointRec ptSrc; - unsigned char source_temp[1024], mask_temp[1024]; - - fbcursor.set = FB_CUR_SETALL; - fbcursor.enable = 1; - fbcursor.pos.x = x; - fbcursor.pos.y = y; - fbcursor.hot.x = pCursor->bits->xhot; - fbcursor.hot.y = pCursor->bits->yhot; - r[0] = pCursor->backRed >> 8; - g[0] = pCursor->backGreen >> 8; - b[0] = pCursor->backBlue >> 8; - r[1] = pCursor->foreRed >> 8; - g[1] = pCursor->foreGreen >> 8; - b[1] = pCursor->foreBlue >> 8; - fbcursor.cmap.index = 0; - fbcursor.cmap.count = 2; - fbcursor.cmap.red = r; - fbcursor.cmap.green = g; - fbcursor.cmap.blue = b; - fbcursor.image = (char *) pCursor->bits->source; - fbcursor.mask = (char *) pCursor->bits->mask; - w = pCursor->bits->width; - h = pCursor->bits->height; - if (w > pCurPriv->width || h > pCurPriv->height) { - ptSrc.x = 0; - ptSrc.y = 0; - if (w > pCurPriv->width) - w = pCurPriv->width; - if (h > pCurPriv->height) - h = pCurPriv->height; - sunCursorRepad (pScreen, pCursor->bits, pCursor->bits->source, - source_temp, &ptSrc, w, h); - sunCursorRepad (pScreen, pCursor->bits, pCursor->bits->mask, - mask_temp, &ptSrc, w, h); - fbcursor.image = (char *) source_temp; - fbcursor.mask = (char *) mask_temp; - } - fbcursor.size.x = w; - fbcursor.size.y = h; -#ifndef Lynx - (void) ioctl (sunFbs[pScreen->myNum].fd, FBIOSCURSOR, &fbcursor); -#else - (void) sunIoctl (&sunFbs[pScreen->myNum], FBIOSCURSOR, &fbcursor); -#endif -} - -static void -sunSetCursor (pScreen, pCursor, x, y) - ScreenPtr pScreen; - CursorPtr pCursor; - int x, y; -{ - SetupCursor(pScreen); - - if (pCursor) - sunLoadCursor (pScreen, pCursor, x, y); - else - sunDisableCursor (pScreen); - pCurPriv->pCursor = pCursor; -} - -static void -sunMoveCursor (pScreen, x, y) - ScreenPtr pScreen; - int x, y; -{ - struct fbcurpos pos; - - pos.x = x; - pos.y = y; -#ifndef Lynx - ioctl (sunFbs[pScreen->myNum].fd, FBIOSCURPOS, &pos); -#else - sunIoctl (&sunFbs[pScreen->myNum], FBIOSCURPOS, &pos); -#endif -} - -miPointerSpriteFuncRec sunPointerSpriteFuncs = { - sunRealizeCursor, - sunUnrealizeCursor, - sunSetCursor, - sunMoveCursor, -}; - -static void -sunQueryBestSize (class, pwidth, pheight, pScreen) - int class; - unsigned short *pwidth, *pheight; - ScreenPtr pScreen; -{ - SetupCursor (pScreen); - - switch (class) - { - case CursorShape: - if (*pwidth > pCurPriv->width) - *pwidth = pCurPriv->width; - if (*pheight > pCurPriv->height) - *pheight = pCurPriv->height; - if (*pwidth > pScreen->width) - *pwidth = pScreen->width; - if (*pheight > pScreen->height) - *pheight = pScreen->height; - break; - default: - mfbQueryBestSize (class, pwidth, pheight, pScreen); - break; - } -} - -extern miPointerScreenFuncRec sunPointerScreenFuncs; - -#endif - -Bool sunCursorInitialize ( - ScreenPtr pScreen) -{ -#ifdef FBIOGCURMAX - SetupCursor (pScreen); - struct fbcurpos maxsize; - - pCurPriv->has_cursor = FALSE; -#ifndef Lynx - if (ioctl (sunFbs[pScreen->myNum].fd, FBIOGCURMAX, &maxsize) == -1) -#else - if (sunIoctl (&sunFbs[pScreen->myNum], FBIOGCURMAX, &maxsize) == -1) -#endif - return FALSE; - pCurPriv->width = maxsize.x; - pCurPriv->height= maxsize.y; - pScreen->QueryBestSize = sunQueryBestSize; - miPointerInitialize (pScreen, - &sunPointerSpriteFuncs, - &sunPointerScreenFuncs, - FALSE); - pCurPriv->has_cursor = TRUE; - pCurPriv->pCursor = NULL; - return TRUE; -#else - return FALSE; -#endif -} - -void sunDisableCursor ( - ScreenPtr pScreen) -{ -#ifdef FBIOGCURMAX - SetupCursor (pScreen); - struct fbcursor fbcursor; - - if (pCurPriv->has_cursor) - { - fbcursor.set = FB_CUR_SETCUR; - fbcursor.enable = 0; -#ifndef Lynx - (void) ioctl (sunFbs[pScreen->myNum].fd, FBIOSCURSOR, &fbcursor); -#else - (void) sunIoctl (&sunFbs[pScreen->myNum], FBIOSCURSOR, &fbcursor); -#endif - pCurPriv->pCursor = NULL; - } -#endif -} |