;; /*
;;     SDL - Simple DirectMedia Layer
;;     Copyright (C) 1997, 1998, 1999, 2000, 2001  Sam Lantinga
;; 
;;     This library is free software; you can redistribute it and/or
;;     modify it under the terms of the GNU Library General Public
;;     License as published by the Free Software Foundation; either
;;     version 2 of the License, or (at your option) any later version.
;; 
;;     This library is distributed in the hope that it will be useful,
;;     but WITHOUT ANY WARRANTY; without even the implied warranty of
;;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;;     Library General Public License for more details.
;; 
;;     You should have received a copy of the GNU Library General Public
;;     License along with this library; if not, write to the Free
;;     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;; 
;;     Sam Lantinga
;;     slouken@devolution.com
;; */
;; 
;; #ifdef SAVE_RCSID
;; static char rcsid =
;;  "@(#) $Id: SDL_mouse.lsh,v 1.1 2002/08/19 07:04:08 profshadoko Exp $";
;; #endif
;; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(de SDL_mouse_dummy () (sdlheader "SDL_mouse.h"))

;; /* Include file for SDL mouse event handling */
;; 
;; #ifndef _SDL_mouse_h
;; #define _SDL_mouse_h
;; 
;; #include "SDL_types.h"
;; #include "SDL_video.h"
;; 
;; #include "begin_code.h"
;; /* Set up for C function definitions, even when using C++ */
;; #ifdef __cplusplus
;; extern "C" {
;; #endif
;; 
;; typedef struct WMcursor WMcursor;	/* Implementation dependent */
;; typedef struct {
;; 	SDL_Rect area;			/* The area of the mouse cursor */
;; 	Sint16 hot_x, hot_y;		/* The "tip" of the cursor */
;; 	Uint8 *data;			/* B/W cursor data */
;; 	Uint8 *mask;			/* B/W cursor mask */
;; 	Uint8 *save[2];			/* Place to save cursor area */
;; 	WMcursor *wm_cursor;		/* Window-manager cursor */
;; } SDL_Cursor;
;; 
;; /* Function prototypes */

#? (SDL_GetMouseState <x> <y>)
;;.PRE
;; /*
;;  * Retrieve the current state of the mouse.
;;  * The current button state is returned as a button bitmask, which can
;;  * be tested using the SDL_BUTTON(X) macros, and x and y are set to the
;;  * current mouse cursor position.  You can pass NULL for either x or y.
;;  */
;; extern DECLSPEC Uint8 SDL_GetMouseState(int *x, int *y);
(de SDL_GetMouseState(x y)
    ((-gptr- "int *") x y)
    (int #{  SDL_GetMouseState($x, $y) #}))

;; 
#? (SDL_GetRelativeMouseState <x> <y>)
;;.PRE
;; /*
;;  * Retrieve the current state of the mouse.
;;  * The current button state is returned as a button bitmask, which can
;;  * be tested using the SDL_BUTTON(X) macros, and x and y are set to the
;;  * mouse deltas since the last call to SDL_GetRelativeMouseState().
;;  */
;; extern DECLSPEC Uint8 SDL_GetRelativeMouseState(int *x, int *y);
(de  SDL_GetRelativeMouseState(x y)
    ((-gptr- "int *") x y)
    (int #{  SDL_GetRelativeMouseState($x, $y) #}))

;; 
#? (SDL_WarpMouse <x> <y>)
;;.PRE
;; /*
;;  * Set the position of the mouse cursor (generates a mouse motion event)
;;  */
;; extern DECLSPEC void SDL_WarpMouse(Uint16 x, Uint16 y);
(de  SDL_WarpMouse(x y)
    ((-int-) x y)
    #{  SDL_WarpMouse($x, $y) #} ())

;; 
#? (SDL_CreateCursor <data> <mask> <w> <h> <hot_x> <hot_y>)
;;.PRE
;; /*
;;  * Create a cursor using the specified data and mask (in MSB format).
;;  * The cursor width must be a multiple of 8 bits.
;;  *
;;  * The cursor is created in black and white according to the following:
;;  * data  mask    resulting pixel on screen
;;  *  0     1       White
;;  *  1     1       Black
;;  *  0     0       Transparent
;;  *  1     0       Inverted color if possible, black if not.
;;  *
;;  * Cursors created with this function must be freed with SDL_FreeCursor().
;;  */
;; extern DECLSPEC SDL_Cursor *SDL_CreateCursor
;; 		(Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y);
(de SDL_CreateCursor(data mask w h hot_x hot_y)
    ((-gptr- "Uint8 *") data mask)
    ((-int-)  w h hot_x hot_y)
    (gptr #{ SDL_CreateCursor($data, $mask, $w, $h, $hot_x, $hot_y) #}))

;; 
#? (SDL_SetCursor <cursor>)
;;.PRE
;; /*
;;  * Set the currently active cursor to the specified one.
;;  * If the cursor is currently visible, the change will be immediately 
;;  * represented on the display.
;;  */
;; extern DECLSPEC void SDL_SetCursor(SDL_Cursor *cursor);
(de SDL_SetCursor(cursor)
    ((-gptr- "SDL_Cursor *") cursor)
    #{ SDL_SetCursor($cursor) #} ())

;; 
#? (SDL_GetCursor)
;;.PRE
;; /*
;;  * Returns the currently active cursor.
;;  */
;; extern DECLSPEC SDL_Cursor * SDL_GetCursor(void);
(de SDL_GetCursor()
    (gptr #{  SDL_GetCursor() #}))

;; 
#? (SDL_FreeCursor <cursor>)
;;.PRE
;; /*
;;  * Deallocates a cursor created with SDL_CreateCursor().
;;  */
;; extern DECLSPEC void SDL_FreeCursor(SDL_Cursor *cursor);
(de SDL_FreeCursor(cursor)
    ((-gptr- "SDL_Cursor *") cursor)
    #{ SDL_FreeCursor($cursor) #} ())

;; 
#? (SDL_ShowCursor <toggle>)
;;.PRE
;; /*
;;  * Toggle whether or not the cursor is shown on the screen.
;;  * The cursor start off displayed, but can be turned off.
;;  * SDL_ShowCursor() returns 1 if the cursor was being displayed
;;  * before the call, or 0 if it was not.  You can query the current
;;  * state by passing a 'toggle' value of -1.
;;  */
;; extern DECLSPEC int SDL_ShowCursor(int toggle);
(de SDL_ShowCursor(toggle)
    ((-int-) toggle)
    (int #{ SDL_ShowCursor($toggle) #}))

;; 
;; /* Used as a mask when testing buttons in buttonstate
;;    Button 1:	Left mouse button
;;    Button 2:	Middle mouse button
;;    Button 3:	Right mouse button
;;  */
;; #define SDL_BUTTON(X)		(SDL_PRESSED<<(X-1))
(libload "libc/constants")

(defconstant "SDL_BUTTON_LEFT"	1)
(defconstant "SDL_BUTTON_MIDDLE" 2)
(defconstant "SDL_BUTTON_RIGHT"	3)
(defconstant "SDL_BUTTON_LMASK"	1)
(defconstant "SDL_BUTTON_MMASK"	2)
(defconstant "SDL_BUTTON_RMASK"	4)
;; 
;; 
;; /* Ends C function definitions when using C++ */
;; #ifdef __cplusplus
;; }
;; #endif
;; #include "close_code.h"
;; 
;; #endif /* _SDL_mouse_h */
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(sdladdfuncs   SDL_GetMouseState SDL_GetRelativeMouseState 
               SDL_WarpMouse SDL_CreateCursor SDL_SetCursor SDL_GetCursor 
               SDL_FreeCursor SDL_ShowCursor)


