Mercurial > sdl-ios-xcode
annotate include/SDL_types.h @ 1192:54aa9aa32327
To: sdl@libsdl.org
From: Christian Walther <cwalther@gmx.ch>
Date: Fri, 18 Nov 2005 23:39:02 +0100
Subject: [SDL] Mouse position bugs on Mac OS X
The attached patch fixes a few bugs in SDL related to the mouse position
in windowed mode on Mac OS X, reproduced using the attached minimal test
program - at least here on 10.3.9, with SDL CVS from today. Could anyone
test whether the bugs exist and are fixed by the patch on 10.2 and 10.4?
1. When using OpenGL, the vertical mouse positions obtained through
events or SDL_GetMouseState() are off by one.
2. When using OpenGL, SDL_WarpMouse() inverts the y coordinate.
3. Clicks on the topmost pixel row of the window are not recognized.
1 and 2 do not occur in non-OpenGL mode, while 3 does. All three only
occur in windowed mode, not in fullscreen.
The cause for 1 and 3 is that in Cocoa, "the location of the mouse"
seems to be defined as "the location of the top left corner of the mouse
pointer's hot pixel" (this is not documented, it's just what I found out
here), which together with the fact that Cocoa's usual y coordinates
start at the bottom and increase upwards means that the y coordinate of
the mouse runs from 1 to h, not from 0 to h-1, in a window of height h.
If it does work on 10.2 and 10.4 (I'll try to test it as soon as I can,
but at the moment all I have at hand is 10.3.9), can this be applied to
the CVS?
-Christian
To: sdl@libsdl.org
From: Christian Walther <cwalther@gmx.ch>
Date: Mon, 28 Nov 2005 10:41:51 +0100
Subject: [SDL] Re: Mouse position bugs on Mac OS X
I wrote:
> I'll try to test it as soon as I can, but at the moment all I have at hand is 10.3.9
So, here are the results of my tests (with patched and unpatched
frameworks compiled with Xcode 1.5 (gcc 3.3) on 10.3.9):
On 10.1.5, my test program doesn't run because of "Undefined symbols:
SDL undefined reference to _CGMainDisplayID expected to be defined in
Carbon". I guess not supporting 10.1 was a deliberate decision then and
that's OK with me.
On 10.2.8, 10.3.9, and 10.4.0, the bugs exist as described in my
original post and are fixed by my patch. That is, there is no difference
between pre/post 10.3 and the patched version works correctly in all
combinations of GL/non-GL and windowed/fullscreen.
I therefore recommend the patch for inclusion.
-Christian
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Mon, 28 Nov 2005 13:58:26 +0000 |
parents | 173c063d4f55 |
children | c9b51268668f |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
769
b8d311d90021
Updated copyright information for 2004 (Happy New Year!)
Sam Lantinga <slouken@libsdl.org>
parents:
661
diff
changeset
|
3 Copyright (C) 1997-2004 Sam Lantinga |
0 | 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 | |
251
b8688cfdc232
Updated the headers with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
173
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 #ifdef SAVE_RCSID | |
24 static char rcsid = | |
25 "@(#) $Id$"; | |
26 #endif | |
27 | |
28 /* General data types used by the SDL library */ | |
29 | |
30 #ifndef _SDL_types_h | |
31 #define _SDL_types_h | |
32 | |
33 /* The number of elements in a table */ | |
34 #define SDL_TABLESIZE(table) (sizeof(table)/sizeof(table[0])) | |
35 | |
36 /* Basic data types */ | |
37 typedef enum { | |
38 SDL_FALSE = 0, | |
39 SDL_TRUE = 1 | |
40 } SDL_bool; | |
908
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
41 |
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
42 #ifdef H_MMBASIC /* mmbasic.h (Tru64 MME) */ |
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
43 /* Some of the basic types are already defined in mmbasic.h */ |
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
44 typedef signed char Sint8; |
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
45 typedef signed short Sint16; |
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
46 typedef signed int Sint32; |
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
47 #else |
0 | 48 typedef unsigned char Uint8; |
49 typedef signed char Sint8; | |
50 typedef unsigned short Uint16; | |
51 typedef signed short Sint16; | |
52 typedef unsigned int Uint32; | |
53 typedef signed int Sint32; | |
908
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
54 #endif |
0 | 55 |
56 /* Figure out how to support 64-bit datatypes */ | |
57 #if !defined(__STRICT_ANSI__) | |
912
bc0b95b02235
*** empty log message ***
Sam Lantinga <slouken@libsdl.org>
parents:
908
diff
changeset
|
58 #ifdef __osf__ /* Tru64 */ |
908
6104bfff77ba
Date: Mon, 28 Jun 2004 19:58:08 +0900
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
59 #define SDL_HAS_64BIT_TYPE long |
1190 | 60 #elif defined(__GNUC__) || defined(__MWERKS__) || defined(__SUNPRO_C) || defined(__DECC) || defined(__WATCOMC__) |
0 | 61 #define SDL_HAS_64BIT_TYPE long long |
62 #elif defined(_MSC_VER) /* VC++ */ | |
63 #define SDL_HAS_64BIT_TYPE __int64 | |
64 #endif | |
65 #endif /* !__STRICT_ANSI__ */ | |
66 | |
173
83018110dce8
Added initial support for EPOC/Symbian OS (thanks Hannu!)
Sam Lantinga <slouken@libsdl.org>
parents:
166
diff
changeset
|
67 /* The 64-bit type isn't available on EPOC/Symbian OS */ |
83018110dce8
Added initial support for EPOC/Symbian OS (thanks Hannu!)
Sam Lantinga <slouken@libsdl.org>
parents:
166
diff
changeset
|
68 #ifdef __SYMBIAN32__ |
83018110dce8
Added initial support for EPOC/Symbian OS (thanks Hannu!)
Sam Lantinga <slouken@libsdl.org>
parents:
166
diff
changeset
|
69 #undef SDL_HAS_64BIT_TYPE |
83018110dce8
Added initial support for EPOC/Symbian OS (thanks Hannu!)
Sam Lantinga <slouken@libsdl.org>
parents:
166
diff
changeset
|
70 #endif |
83018110dce8
Added initial support for EPOC/Symbian OS (thanks Hannu!)
Sam Lantinga <slouken@libsdl.org>
parents:
166
diff
changeset
|
71 |
0 | 72 /* The 64-bit datatype isn't supported on all platforms */ |
73 #ifdef SDL_HAS_64BIT_TYPE | |
654
e92bcf2573cb
Added audio and CD-ROM support for OSF/Tru64 (thanks Hayashi!)
Sam Lantinga <slouken@libsdl.org>
parents:
534
diff
changeset
|
74 #ifndef H_MMBASIC |
0 | 75 typedef unsigned SDL_HAS_64BIT_TYPE Uint64; |
654
e92bcf2573cb
Added audio and CD-ROM support for OSF/Tru64 (thanks Hayashi!)
Sam Lantinga <slouken@libsdl.org>
parents:
534
diff
changeset
|
76 #endif |
0 | 77 typedef SDL_HAS_64BIT_TYPE Sint64; |
78 #else | |
79 /* This is really just a hack to prevent the compiler from complaining */ | |
80 typedef struct { | |
81 Uint32 hi; | |
82 Uint32 lo; | |
83 } Uint64, Sint64; | |
84 #endif | |
85 | |
86 /* Make sure the types really have the right sizes */ | |
87 #define SDL_COMPILE_TIME_ASSERT(name, x) \ | |
88 typedef int SDL_dummy_ ## name[(x) * 2 - 1] | |
89 | |
90 SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); | |
91 SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); | |
92 SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); | |
93 SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); | |
94 SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); | |
95 SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); | |
96 SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); | |
97 SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); | |
98 | |
463
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
99 /* Check to make sure enums are the size of ints, for structure packing. |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
100 For both Watcom C/C++ and Borland C/C++ the compiler option that makes |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
101 enums having the size of an int must be enabled. |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
102 This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
103 */ |
534
1ea658a3dd52
Turn on enums always ints for CodeWarrior (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents:
463
diff
changeset
|
104 /* Enable enums always int in CodeWarrior (for MPW use "-enum int") */ |
1ea658a3dd52
Turn on enums always ints for CodeWarrior (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents:
463
diff
changeset
|
105 #ifdef __MWERKS__ |
1ea658a3dd52
Turn on enums always ints for CodeWarrior (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents:
463
diff
changeset
|
106 #pragma enumsalwaysint on |
1ea658a3dd52
Turn on enums always ints for CodeWarrior (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents:
463
diff
changeset
|
107 #endif |
1ea658a3dd52
Turn on enums always ints for CodeWarrior (thanks Darrell!)
Sam Lantinga <slouken@libsdl.org>
parents:
463
diff
changeset
|
108 |
463
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
109 typedef enum { |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
110 DUMMY_ENUM_VALUE |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
111 } SDL_DUMMY_ENUM; |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
112 |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
113 SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); |
bf7389310d27
Added compile-time checking for the size of enums to SDL_types.h
Sam Lantinga <slouken@libsdl.org>
parents:
297
diff
changeset
|
114 |
0 | 115 #undef SDL_COMPILE_TIME_ASSERT |
116 | |
117 /* General keyboard/mouse state definitions */ | |
118 enum { SDL_PRESSED = 0x01, SDL_RELEASED = 0x00 }; | |
119 | |
120 #endif |