src/video/maccommon/SDL_macmouse.c

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. Mac_FreeWMCursor
  2. Mac_CreateWMCursor
  3. Mac_ShowWMCursor
  4. Mac_WarpWMCursor

   1 /*
   2     SDL - Simple DirectMedia Layer
   3     Copyright (C) 1997, 1998, 1999, 2000, 2001  Sam Lantinga
   4 
   5     This library is free software; you can redistribute it and/or
   6     modify it under the terms of the GNU Library General Public
   7     License as published by the Free Software Foundation; either
   8     version 2 of the License, or (at your option) any later version.
   9 
  10     This library is distributed in the hope that it will be useful,
  11     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13     Library General Public License for more details.
  14 
  15     You should have received a copy of the GNU Library General Public
  16     License along with this library; if not, write to the Free
  17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18 
  19     Sam Lantinga
  20     slouken@devolution.com
  21 */
  22 
  23 #ifdef SAVE_RCSID
  24 static char rcsid =
  25  "@(#) $Id: SDL_macmouse.c,v 1.1.2.6 2001/02/10 07:20:06 hercules Exp $";
  26 #endif
  27 
  28 #include <stdlib.h>
  29 #include <stdio.h>
  30 #if TARGET_API_MAC_CARBON
  31 #include <Carbon.h>
  32 #else
  33 #include <Quickdraw.h>
  34 #endif
  35 
  36 /* Routines that are not supported by the Carbon API... */
  37 #if !TARGET_API_MAC_CARBON
  38 #include <CursorDevices.h>
  39 #endif
  40 
  41 #include "SDL_error.h"
  42 #include "SDL_mouse.h"
  43 #include "SDL_macmouse_c.h"
  44 
  45 
  46 /* The implementation dependent data for the window manager cursor */
  47 struct WMcursor {
  48         Cursor curs;
  49 };
  50 
  51 
  52 void Mac_FreeWMCursor(_THIS, WMcursor *cursor)
     /* [<][>][^][v][top][bottom][index][help] */
  53 {
  54         free(cursor);
  55 }
  56 
  57 WMcursor *Mac_CreateWMCursor(_THIS,
     /* [<][>][^][v][top][bottom][index][help] */
  58                 Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y)
  59 {
  60         WMcursor *cursor;
  61         int row, bytes;
  62                 
  63         /* Allocate the cursor memory */
  64         cursor = (WMcursor *)malloc(sizeof(WMcursor));
  65         if ( cursor == NULL ) {
  66                 SDL_OutOfMemory();
  67                 return(NULL);
  68         }
  69         memset(cursor, 0, sizeof(*cursor));
  70                 
  71         bytes = (w/8);
  72         if ( bytes > 2 ) {
  73                 bytes = 2;
  74         }
  75         for ( row=0; row<h && (row < 16); ++row ) {
  76                 memcpy(&cursor->curs.data[row], data, bytes);
  77                 data += w/8;
  78         }
  79         for ( row=0; row<h && (row < 16); ++row ) {
  80                 memcpy(&cursor->curs.mask[row], mask, bytes);
  81                 mask += w/8;
  82         }
  83         cursor->curs.hotSpot.h = hot_x;
  84         cursor->curs.hotSpot.v = hot_y;
  85 
  86         /* That was easy. :) */
  87         return(cursor);
  88 }
  89 
  90 int Mac_cursor_showing = 1;
  91 
  92 int Mac_ShowWMCursor(_THIS, WMcursor *cursor)
     /* [<][>][^][v][top][bottom][index][help] */
  93 {
  94         if ( cursor == NULL ) {
  95                 if ( Mac_cursor_showing ) {
  96                         HideCursor();
  97                         Mac_cursor_showing = 0;
  98                 }
  99         } else {
 100                 SetCursor(&cursor->curs);
 101                 if ( ! Mac_cursor_showing ) {
 102                         ShowCursor();
 103                         Mac_cursor_showing = 1;
 104                 }
 105         }
 106         return(1);
 107 }
 108 
 109 void Mac_WarpWMCursor(_THIS, Uint16 x, Uint16 y)
     /* [<][>][^][v][top][bottom][index][help] */
 110 {
 111 #if !TARGET_API_MAC_CARBON
 112         CursorDevice *cursordevice;
 113 
 114         cursordevice = nil;
 115         CursorDeviceNextDevice(&cursordevice);
 116         if ( cursordevice != nil ) {
 117                 WindowPtr saveport;
 118                 Point where;
 119 
 120                 GetPort(&saveport);
 121                 SetPort(SDL_Window);
 122                 where.h = x;
 123                 where.v = y;
 124                 LocalToGlobal(&where);
 125                 SetPort(saveport);
 126                 CursorDeviceMoveTo(cursordevice, where.h, where.v);
 127         }
 128 #endif /* !TARGET_API_MAC_CARBON */
 129 }
 130 

/* [<][>][^][v][top][bottom][index][help] */