annotate libvo/sdl_common.c @ 34685:311b47301ea7

Remove gstrcasecmp(). This function isn't necessary. strcasecmp() can be used just as well, because both arguments to the gstrcasecmp() calls have been checked to be not NULL prior to the call.
author ib
date Fri, 24 Feb 2012 17:26:35 +0000
parents 0bce77ccae9a
children f2274219a79c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
1 /*
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
2 * common SDL routines
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
3 *
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
4 * This file is part of MPlayer.
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
5 *
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
9 * (at your option) any later version.
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
10 *
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
14 * GNU General Public License for more details.
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
15 *
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License along
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
19 */
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
20
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
21 #include "sdl_common.h"
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
22 #include "mp_msg.h"
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
23 #include "mp_fifo.h"
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
24 #include "osdep/keycodes.h"
34645
0bce77ccae9a Fix compiling with osdep setenv
al
parents: 34614
diff changeset
25 #include "osdep/setenv.h"
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
26 #include "input/input.h"
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
27 #include "input/mouse.h"
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
28 #include "video_out.h"
34614
f9f91ba805b9 SDL: add support for setting window position.
reimar
parents: 34611
diff changeset
29 #include "geometry.h"
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
30
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
31 static int old_w;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
32 static int old_h;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
33 static int mode_flags;
31043
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
34 static int reinit;
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
35
34482
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
36 /**
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
37 * Update vo_screenwidth and vo_screenheight.
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
38 *
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
39 * This function only works with SDL since 1.2.10 and
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
40 * even then only when called before the first
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
41 * SDL_SetVideoMode.
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
42 * Once there's a better way available implement an
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
43 * update_xinerama_info function.
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
44 */
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
45 static void get_screensize(void) {
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
46 const SDL_VideoInfo *vi;
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
47 // TODO: better to use a check that gets the runtime version instead?
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
48 if (!SDL_VERSION_ATLEAST(1, 2, 10)) return;
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
49 // Keep user-provided settings
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
50 if (vo_screenwidth > 0 || vo_screenheight > 0) return;
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
51 vi = SDL_GetVideoInfo();
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
52 vo_screenwidth = vi->current_w;
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
53 vo_screenheight = vi->current_h;
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
54 }
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
55
31037
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
56 int vo_sdl_init(void)
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
57 {
31043
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
58 reinit = 0;
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
59
34551
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
60 if (!SDL_WasInit(SDL_INIT_VIDEO)) {
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
61 // Unfortunately SDL_WINDOWID must be set at SDL_Init
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
62 // and is ignored afterwards, thus it cannot work per-file.
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
63 // Also, a value of 0 does not work for selecting the root window.
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
64 if (WinID > 0) {
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
65 char envstr[20];
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
66 snprintf(envstr, sizeof(envstr), "0x%"PRIx64, WinID);
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
67 setenv("SDL_WINDOWID", envstr, 1);
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
68 }
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
69 if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE) < 0)
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
70 return 0;
4f7637d076a4 Support -wid for vo_sdl.
reimar
parents: 34482
diff changeset
71 }
31037
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
72
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
73 // Setup Keyrepeats (500/30 are defaults)
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
74 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, 100 /*SDL_DEFAULT_REPEAT_INTERVAL*/);
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
75
31038
3e67417271d7 Make uppercase characters and in general all ASCII characters work
reimar
parents: 31037
diff changeset
76 // Easiest way to get uppercase characters
3e67417271d7 Make uppercase characters and in general all ASCII characters work
reimar
parents: 31037
diff changeset
77 SDL_EnableUNICODE(1);
3e67417271d7 Make uppercase characters and in general all ASCII characters work
reimar
parents: 31037
diff changeset
78
31037
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
79 // We don't want those in our event queue.
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
80 SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
81 SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
82 SDL_EventState(SDL_USEREVENT, SDL_IGNORE);
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
83
34482
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
84 // Try to get a sensible default for fullscreen.
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
85 get_screensize();
3c51a42da09c SDL: Try to select a fullscreen mode that does not require resolution changes by default.
reimar
parents: 31318
diff changeset
86
31037
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
87 return 1;
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
88 }
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
89
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
90 void vo_sdl_uninit(void)
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
91 {
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
92 if (SDL_WasInit(SDL_INIT_VIDEO))
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
93 SDL_QuitSubSystem(SDL_INIT_VIDEO);
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
94 }
4f273572e445 Share SDL initialization code.
reimar
parents: 31035
diff changeset
95
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
96 void vo_sdl_fullscreen(void)
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
97 {
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
98 if (vo_fs) {
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
99 vo_dwidth = old_w;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
100 vo_dheight = old_h;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
101 } else {
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
102 old_w = vo_dwidth;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
103 old_h = vo_dheight;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
104 vo_dwidth = vo_screenwidth;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
105 vo_dheight = vo_screenheight;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
106 }
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
107 vo_fs = !vo_fs;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
108 sdl_set_mode(0, mode_flags);
31043
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
109 // on OSX at least we now need to do a full reinit.
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
110 // TODO: this should only be set if really necessary.
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
111 reinit = 1;
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
112 }
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
113
34611
f1a31e5fc35f vo_sdl: reuse some more sdl_common code.
reimar
parents: 34597
diff changeset
114 SDL_Surface *sdl_set_mode(int bpp, uint32_t flags)
31033
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
115 {
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
116 SDL_Surface *s;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
117 mode_flags = flags;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
118 if (vo_fs) flags |= SDL_FULLSCREEN;
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
119 // doublebuf with opengl creates flickering
34611
f1a31e5fc35f vo_sdl: reuse some more sdl_common code.
reimar
parents: 34597
diff changeset
120 #if !defined( __AMIGAOS4__ ) && !defined( __APPLE__ )
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
121 if (vo_doublebuffering && !(flags & SDL_OPENGL))
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
122 flags |= SDL_DOUBLEBUF;
34611
f1a31e5fc35f vo_sdl: reuse some more sdl_common code.
reimar
parents: 34597
diff changeset
123 #endif
34597
e227a8ae4418 Support -noborder with SDL.
reimar
parents: 34551
diff changeset
124 if (!vo_border)
e227a8ae4418 Support -noborder with SDL.
reimar
parents: 34551
diff changeset
125 flags |= SDL_NOFRAME;
34614
f9f91ba805b9 SDL: add support for setting window position.
reimar
parents: 34611
diff changeset
126 if (geometry_xy_changed) {
f9f91ba805b9 SDL: add support for setting window position.
reimar
parents: 34611
diff changeset
127 char envstr[20];
f9f91ba805b9 SDL: add support for setting window position.
reimar
parents: 34611
diff changeset
128 snprintf(envstr, sizeof(envstr), "%i,%i", vo_dx, vo_dy);
f9f91ba805b9 SDL: add support for setting window position.
reimar
parents: 34611
diff changeset
129 setenv("SDL_VIDEO_WINDOW_POS", envstr, 1);
f9f91ba805b9 SDL: add support for setting window position.
reimar
parents: 34611
diff changeset
130 }
31035
5aae99fd6ca7 Fullscreen support for -vo gl using SDL.
reimar
parents: 31033
diff changeset
131 s = SDL_SetVideoMode(vo_dwidth, vo_dheight, bpp, flags);
31033
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
132 if (!s) {
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
133 mp_msg(MSGT_VO, MSGL_FATAL, "SDL SetVideoMode failed: %s\n", SDL_GetError());
34611
f1a31e5fc35f vo_sdl: reuse some more sdl_common code.
reimar
parents: 34597
diff changeset
134 return NULL;
31033
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
135 }
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
136 vo_dwidth = s->w;
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
137 vo_dheight = s->h;
34611
f1a31e5fc35f vo_sdl: reuse some more sdl_common code.
reimar
parents: 34597
diff changeset
138 return s;
31033
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
139 }
8d1080e9c92d Window resizing support for -vo gl with SDL backend.
reimar
parents: 31032
diff changeset
140
31040
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
141 static const struct mp_keymap keysym_map[] = {
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
142 {SDLK_RETURN, KEY_ENTER}, {SDLK_ESCAPE, KEY_ESC},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
143 {SDLK_F1, KEY_F+1}, {SDLK_F2, KEY_F+2}, {SDLK_F3, KEY_F+3},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
144 {SDLK_F4, KEY_F+4}, {SDLK_F5, KEY_F+5}, {SDLK_F6, KEY_F+6},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
145 {SDLK_F7, KEY_F+7}, {SDLK_F8, KEY_F+8}, {SDLK_F9, KEY_F+9},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
146 {SDLK_F10, KEY_F+10}, {SDLK_F11, KEY_F+11}, {SDLK_F12, KEY_F+12},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
147 {SDLK_KP_PLUS, '+'}, {SDLK_KP_MINUS, '-'}, {SDLK_TAB, KEY_TAB},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
148 {SDLK_PAGEUP, KEY_PAGE_UP}, {SDLK_PAGEDOWN, KEY_PAGE_DOWN},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
149 {SDLK_UP, KEY_UP}, {SDLK_DOWN, KEY_DOWN},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
150 {SDLK_LEFT, KEY_LEFT}, {SDLK_RIGHT, KEY_RIGHT},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
151 {SDLK_KP_MULTIPLY, '*'}, {SDLK_KP_DIVIDE, '/'},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
152 {SDLK_KP0, KEY_KP0}, {SDLK_KP1, KEY_KP1}, {SDLK_KP2, KEY_KP2},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
153 {SDLK_KP3, KEY_KP3}, {SDLK_KP4, KEY_KP4}, {SDLK_KP5, KEY_KP5},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
154 {SDLK_KP6, KEY_KP6}, {SDLK_KP7, KEY_KP7}, {SDLK_KP8, KEY_KP8},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
155 {SDLK_KP9, KEY_KP9},
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
156 {SDLK_KP_PERIOD, KEY_KPDEC}, {SDLK_KP_ENTER, KEY_KPENTER},
31318
2211cc2fb0c3 100l, add missing 0-termination of keymap file.
reimar
parents: 31051
diff changeset
157 {0, 0}
31040
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
158 };
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
159
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
160 int sdl_default_handle_event(SDL_Event *event)
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
161 {
31040
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
162 int mpkey;
31043
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
163 if (!event) {
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
164 int res = reinit ? VO_EVENT_REINIT : 0;
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
165 reinit = 0;
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
166 return res;
80036ef586ff Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents: 31042
diff changeset
167 }
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
168 switch (event->type) {
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
169 case SDL_VIDEORESIZE:
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
170 vo_dwidth = event->resize.w;
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
171 vo_dheight = event->resize.h;
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
172 return VO_EVENT_RESIZE;
31046
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
173
31042
91eb3b0b9b7a Handle SDL expose events with -vo gl.
reimar
parents: 31040
diff changeset
174 case SDL_VIDEOEXPOSE:
91eb3b0b9b7a Handle SDL expose events with -vo gl.
reimar
parents: 31040
diff changeset
175 return VO_EVENT_EXPOSE;
31046
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
176
31050
340fd8115a78 Support mouse movements in SDL.
reimar
parents: 31046
diff changeset
177 case SDL_MOUSEMOTION:
340fd8115a78 Support mouse movements in SDL.
reimar
parents: 31046
diff changeset
178 vo_mouse_movement(event->motion.x, event->motion.y);
340fd8115a78 Support mouse movements in SDL.
reimar
parents: 31046
diff changeset
179 break;
340fd8115a78 Support mouse movements in SDL.
reimar
parents: 31046
diff changeset
180
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
181 case SDL_MOUSEBUTTONDOWN:
31046
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
182 if (!vo_nomouse_input)
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
183 mplayer_put_key((MOUSE_BTN0 + event->button.button - 1) | MP_KEY_DOWN);
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
184 break;
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
185
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
186 case SDL_MOUSEBUTTONUP:
31051
109e37bbb151 Missing space after if.
reimar
parents: 31050
diff changeset
187 if (!vo_nomouse_input)
31046
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
188 mplayer_put_key(MOUSE_BTN0 + event->button.button - 1);
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
189 break;
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
190
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
191 case SDL_KEYDOWN:
31040
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
192 mpkey = lookup_keymap_table(keysym_map, event->key.keysym.sym);
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
193 if (!mpkey &&
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
194 event->key.keysym.unicode > 0 &&
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
195 event->key.keysym.unicode < 128)
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
196 mpkey = event->key.keysym.unicode;
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
197 if (mpkey)
85809d9fdc95 Simplify SDL key symbol mapping.
reimar
parents: 31039
diff changeset
198 mplayer_put_key(mpkey);
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
199 break;
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
200
31046
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
201 case SDL_QUIT:
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
202 mplayer_put_key(KEY_CLOSE_WIN);
93acb406a855 Minor cosmetics.
reimar
parents: 31043
diff changeset
203 break;
31032
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
204 }
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
205 return 0;
362425fe3de8 Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff changeset
206 }