src/events/SDL_mouse_c.h
author Sam Lantinga <slouken@libsdl.org>
Mon, 23 Dec 2013 17:37:22 -0800
changeset 8071 1ac2db4abe11
parent 8066 658b461d81be
child 8093 b43765095a6f
permissions -rw-r--r--
Added a relative mouse mode that uses mouse warping instead of raw input.
To enable this, set the environment variable SDL_MOUSE_RELATIVE_MODE_WARP to "1"

When mouse relative mode is disabled, put the cursor back where the application expects it to be, instead of where it was when relative mode was enabled.
slouken@1895
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@6885
     3
  Copyright (C) 1997-2013 Sam Lantinga <slouken@libsdl.org>
slouken@1895
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@1895
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@1895
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@1895
    20
*/
slouken@1895
    21
#include "SDL_config.h"
slouken@1895
    22
slouken@1895
    23
#ifndef _SDL_mouse_c_h
slouken@1895
    24
#define _SDL_mouse_c_h
slouken@1895
    25
slouken@5371
    26
#include "SDL_mouse.h"
slouken@5371
    27
slouken@6950
    28
typedef Uint32 SDL_MouseID;
slouken@6950
    29
slouken@1895
    30
struct SDL_Cursor
slouken@1895
    31
{
slouken@5001
    32
    struct SDL_Cursor *next;
slouken@1895
    33
    void *driverdata;
slouken@1895
    34
};
slouken@1895
    35
slouken@5371
    36
typedef struct
slouken@5371
    37
{
slouken@8066
    38
    int last_x, last_y;
slouken@8066
    39
    Uint32 last_timestamp;
slouken@8066
    40
    Uint8 click_count;
slouken@8066
    41
} SDL_MouseClickState;
slouken@8066
    42
slouken@8066
    43
typedef struct
slouken@8066
    44
{
slouken@5371
    45
    /* Create a cursor from a surface */
slouken@5371
    46
    SDL_Cursor *(*CreateCursor) (SDL_Surface * surface, int hot_x, int hot_y);
slouken@5371
    47
mikesart@6675
    48
    /* Create a system cursor */
slouken@7191
    49
    SDL_Cursor *(*CreateSystemCursor) (SDL_SystemCursor id);
mikesart@6675
    50
slouken@5371
    51
    /* Show the specified cursor, or hide if cursor is NULL */
slouken@5371
    52
    int (*ShowCursor) (SDL_Cursor * cursor);
slouken@5371
    53
slouken@5371
    54
    /* This is called when a mouse motion event occurs */
slouken@5371
    55
    void (*MoveCursor) (SDL_Cursor * cursor);
slouken@5371
    56
slouken@5371
    57
    /* Free a window manager cursor */
slouken@5371
    58
    void (*FreeCursor) (SDL_Cursor * cursor);
slouken@5371
    59
slouken@5371
    60
    /* Warp the mouse to (x,y) */
slouken@5371
    61
    void (*WarpMouse) (SDL_Window * window, int x, int y);
slouken@5371
    62
slouken@5406
    63
    /* Set relative mode */
slouken@5406
    64
    int (*SetRelativeMouseMode) (SDL_bool enabled);
slouken@5406
    65
slouken@5371
    66
    /* Data common to all mice */
slouken@6950
    67
    SDL_MouseID mouseID;
slouken@5371
    68
    SDL_Window *focus;
slouken@5371
    69
    int x;
slouken@5371
    70
    int y;
slouken@5371
    71
    int xdelta;
slouken@5371
    72
    int ydelta;
slouken@5371
    73
    int last_x, last_y;         /* the last reported x and y coordinates */
slouken@6673
    74
    Uint32 buttonstate;
slouken@5371
    75
    SDL_bool relative_mode;
slouken@8071
    76
    SDL_bool relative_mode_warp;
slouken@5371
    77
slouken@8066
    78
    /* Data for double-click tracking */
slouken@8066
    79
    int num_clickstates;
slouken@8066
    80
    SDL_MouseClickState *clickstate;
slouken@8066
    81
slouken@5371
    82
    SDL_Cursor *cursors;
slouken@5371
    83
    SDL_Cursor *def_cursor;
slouken@5371
    84
    SDL_Cursor *cur_cursor;
slouken@5371
    85
    SDL_bool cursor_shown;
jorgen@7114
    86
jorgen@7114
    87
    /* Driver-dependent data. */
jorgen@7114
    88
    void *driverdata;
slouken@5371
    89
} SDL_Mouse;
slouken@5371
    90
slouken@5371
    91
slouken@1895
    92
/* Initialize the mouse subsystem */
slouken@1895
    93
extern int SDL_MouseInit(void);
slouken@1895
    94
slouken@5371
    95
/* Get the mouse state structure */
slouken@5371
    96
SDL_Mouse *SDL_GetMouse(void);
slouken@5371
    97
slouken@8066
    98
/* Set the default double-click interval */
slouken@8066
    99
extern void SDL_SetDoubleClickTime(Uint32 interval);
slouken@8066
   100
slouken@5405
   101
/* Set the default mouse cursor */
slouken@5405
   102
extern void SDL_SetDefaultCursor(SDL_Cursor * cursor);
slouken@5405
   103
slouken@1895
   104
/* Set the mouse focus window */
slouken@4465
   105
extern void SDL_SetMouseFocus(SDL_Window * window);
slouken@1895
   106
slouken@4465
   107
/* Send a mouse motion event */
slouken@6950
   108
extern int SDL_SendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relative, int x, int y);
slouken@1895
   109
slouken@4465
   110
/* Send a mouse button event */
slouken@6950
   111
extern int SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 button);
slouken@1895
   112
slouken@4465
   113
/* Send a mouse wheel event */
slouken@6950
   114
extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y);
slouken@2727
   115
slouken@1895
   116
/* Shutdown the mouse subsystem */
slouken@1895
   117
extern void SDL_MouseQuit(void);
slouken@1895
   118
slouken@1895
   119
#endif /* _SDL_mouse_c_h */
slouken@1895
   120
slouken@1895
   121
/* vi: set ts=4 sw=4 expandtab: */