src/events/SDL_mouse_c.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 08 Dec 2008 00:52:12 +0000
changeset 2860 6ce28e5287e9
parent 2859 99210400e8b9
child 2940 b93965a16fe0
permissions -rw-r--r--
Date: Sun, 07 Dec 2008 13:35:23 +0100
From: Couriersud
Subject: SDL: Mouse last_x, last_y into SDL_Mouse

the attached diff moves the static vars last_x and last_y into
SDL_Mouse. These, as far as I understand it, should be tied to the
individual mouse.

The patch also makes the code check for out of window conditions of
mouse->x,y when relative movements are passed to MouseSendMotion.

Also attached is the latest DirectFB code (dfb20081208) supporting
multiple mice and keyboards. This works quite well with sdlmame now. It
however needs more testing with different directfb configurations.
slouken@1895
     1
/*
slouken@1895
     2
    SDL - Simple DirectMedia Layer
slouken@2859
     3
    Copyright (C) 1997-2009 Sam Lantinga
slouken@1895
     4
slouken@1895
     5
    This library is free software; you can redistribute it and/or
slouken@1895
     6
    modify it under the terms of the GNU Lesser General Public
slouken@1895
     7
    License as published by the Free Software Foundation; either
slouken@1895
     8
    version 2.1 of the License, or (at your option) any later version.
slouken@1895
     9
slouken@1895
    10
    This library is distributed in the hope that it will be useful,
slouken@1895
    11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
slouken@1895
    12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
slouken@1895
    13
    Lesser General Public License for more details.
slouken@1895
    14
slouken@1895
    15
    You should have received a copy of the GNU Lesser General Public
slouken@1895
    16
    License along with this library; if not, write to the Free Software
slouken@1895
    17
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
slouken@1895
    18
slouken@1895
    19
    Sam Lantinga
slouken@1895
    20
    slouken@libsdl.org
slouken@1895
    21
*/
slouken@1895
    22
#include "SDL_config.h"
slouken@1895
    23
slouken@1895
    24
#ifndef _SDL_mouse_c_h
slouken@1895
    25
#define _SDL_mouse_c_h
slouken@1895
    26
slouken@1895
    27
typedef struct SDL_Mouse SDL_Mouse;
slouken@1895
    28
slouken@1895
    29
struct SDL_Cursor
slouken@1895
    30
{
slouken@1895
    31
    SDL_Mouse *mouse;
slouken@1895
    32
    SDL_Cursor *next;
slouken@1895
    33
    void *driverdata;
slouken@1895
    34
};
slouken@1895
    35
slouken@1895
    36
struct SDL_Mouse
slouken@1895
    37
{
slouken@1895
    38
    /* Create a cursor from a surface */
slouken@1895
    39
    SDL_Cursor *(*CreateCursor) (SDL_Surface * surface, int hot_x, int hot_y);
slouken@1895
    40
slouken@1895
    41
    /* Show the specified cursor, or hide if cursor is NULL */
slouken@1895
    42
    int (*ShowCursor) (SDL_Cursor * cursor);
slouken@1895
    43
slouken@1895
    44
    /* This is called when a mouse motion event occurs */
slouken@1895
    45
    void (*MoveCursor) (SDL_Cursor * cursor);
slouken@1895
    46
slouken@1895
    47
    /* Free a window manager cursor */
slouken@1895
    48
    void (*FreeCursor) (SDL_Cursor * cursor);
slouken@1895
    49
slouken@1895
    50
    /* Warp the mouse to (x,y) */
slouken@1895
    51
    void (*WarpMouse) (SDL_Mouse * mouse, SDL_WindowID windowID, int x,
slouken@1895
    52
                       int y);
slouken@1895
    53
slouken@1895
    54
    /* Free the mouse when it's time */
slouken@1895
    55
    void (*FreeMouse) (SDL_Mouse * mouse);
slouken@1895
    56
slouken@2710
    57
    /* data common for tablets */
slouken@2710
    58
    int pressure;
slouken@2710
    59
    int pressure_max;
slouken@2710
    60
    int pressure_min;
slouken@2710
    61
    int tilt;                   /* for future use */
slouken@2710
    62
    int rotation;               /* for future use */
slouken@2710
    63
    int total_ends;
slouken@2710
    64
    int current_end;
slouken@2710
    65
slouken@1895
    66
    /* Data common to all mice */
slouken@1895
    67
    SDL_WindowID focus;
slouken@2710
    68
    int which;
slouken@2849
    69
    int x;
slouken@2849
    70
    int y;
slouken@2710
    71
    int z;                      /* for future use */
slouken@1895
    72
    int xdelta;
slouken@1895
    73
    int ydelta;
slouken@2860
    74
    int last_x, last_y;         /* the last reported x and y coordinates */
slouken@2710
    75
    char *name;
slouken@1895
    76
    Uint8 buttonstate;
slouken@1895
    77
    SDL_bool relative_mode;
slouken@2710
    78
    SDL_bool proximity;
slouken@1895
    79
    SDL_bool flush_motion;
slouken@1895
    80
slouken@1895
    81
    SDL_Cursor *cursors;
slouken@1895
    82
    SDL_Cursor *def_cursor;
slouken@1895
    83
    SDL_Cursor *cur_cursor;
slouken@1895
    84
    SDL_bool cursor_shown;
slouken@1895
    85
slouken@1895
    86
    void *driverdata;
slouken@1895
    87
};
slouken@1895
    88
slouken@1895
    89
/* Initialize the mouse subsystem */
slouken@1895
    90
extern int SDL_MouseInit(void);
slouken@1895
    91
slouken@2710
    92
/* Assign an id to a mouse at an index */
slouken@2710
    93
extern int SDL_SetMouseIndexId(int id, int index);
slouken@2710
    94
slouken@2712
    95
/* Get the index of a mouse specified by id */
slouken@2712
    96
extern int SDL_GetMouseIndexId(int id);
slouken@2712
    97
slouken@2712
    98
/* Get the mouse at an index */
slouken@2712
    99
extern SDL_Mouse *SDL_GetMouse(int index);
slouken@2710
   100
slouken@1895
   101
/* Add a mouse, possibly reattaching at a particular index (or -1),
slouken@1895
   102
   returning the index of the mouse, or -1 if there was an error.
slouken@1895
   103
 */
slouken@2710
   104
extern int SDL_AddMouse(const SDL_Mouse * mouse, int index, char *name,
slouken@2710
   105
                        int pressure_max, int pressure_min, int ends);
slouken@1895
   106
slouken@1895
   107
/* Remove a mouse at an index, clearing the slot for later */
slouken@1895
   108
extern void SDL_DelMouse(int index);
slouken@1895
   109
slouken@1895
   110
/* Clear the button state of a mouse at an index */
slouken@1895
   111
extern void SDL_ResetMouse(int index);
slouken@1895
   112
slouken@1895
   113
/* Set the mouse focus window */
slouken@2710
   114
extern void SDL_SetMouseFocus(int id, SDL_WindowID windowID);
slouken@1895
   115
slouken@2727
   116
/* Send a mouse motion event for a mouse */
slouken@2710
   117
extern int SDL_SendMouseMotion(int id, int relative, int x, int y, int z);
slouken@1895
   118
slouken@2727
   119
/* Send a mouse button event for a mouse */
slouken@2710
   120
extern int SDL_SendMouseButton(int id, Uint8 state, Uint8 button);
slouken@1895
   121
slouken@2727
   122
/* Send a mouse wheel event for a mouse */
slouken@2710
   123
extern int SDL_SendMouseWheel(int id, int x, int y);
slouken@1895
   124
slouken@2727
   125
/* Send a proximity event for a mouse */
slouken@2727
   126
extern int SDL_SendProximity(int id, int x, int y, int type);
slouken@2727
   127
slouken@1895
   128
/* Shutdown the mouse subsystem */
slouken@1895
   129
extern void SDL_MouseQuit(void);
slouken@1895
   130
slouken@2710
   131
/* FIXME: Where do these functions go in this header? */
slouken@2710
   132
extern void SDL_ChangeEnd(int id, int end);
slouken@2710
   133
slouken@1895
   134
#endif /* _SDL_mouse_c_h */
slouken@1895
   135
slouken@1895
   136
/* vi: set ts=4 sw=4 expandtab: */