4 * This file is part of MPlayer.
6 * MPlayer is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * MPlayer is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "sdl_common.h"
22 #include "old_vo_defines.h"
25 #include "input/keycodes.h"
26 #include "input/input.h"
27 #include "video_out.h"
31 static int mode_flags
;
38 if (!SDL_WasInit(SDL_INIT_VIDEO
) &&
39 SDL_Init(SDL_INIT_VIDEO
|SDL_INIT_NOPARACHUTE
) < 0)
42 // Setup Keyrepeats (500/30 are defaults)
43 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY
, 100 /*SDL_DEFAULT_REPEAT_INTERVAL*/);
45 // Easiest way to get uppercase characters
48 // We don't want those in our event queue.
49 SDL_EventState(SDL_ACTIVEEVENT
, SDL_IGNORE
);
50 SDL_EventState(SDL_SYSWMEVENT
, SDL_IGNORE
);
51 SDL_EventState(SDL_USEREVENT
, SDL_IGNORE
);
56 void vo_sdl_uninit(void)
58 if (SDL_WasInit(SDL_INIT_VIDEO
))
59 SDL_QuitSubSystem(SDL_INIT_VIDEO
);
62 void vo_sdl_fullscreen(void)
70 vo_dwidth
= vo_screenwidth
;
71 vo_dheight
= vo_screenheight
;
74 sdl_set_mode(0, mode_flags
);
75 // on OSX at least we now need to do a full reinit.
76 // TODO: this should only be set if really necessary.
80 int sdl_set_mode(int bpp
, uint32_t flags
)
84 if (vo_fs
) flags
|= SDL_FULLSCREEN
;
85 // doublebuf with opengl creates flickering
86 if (vo_doublebuffering
&& !(flags
& SDL_OPENGL
))
87 flags
|= SDL_DOUBLEBUF
;
88 s
= SDL_SetVideoMode(vo_dwidth
, vo_dheight
, bpp
, flags
);
90 mp_msg(MSGT_VO
, MSGL_FATAL
, "SDL SetVideoMode failed: %s\n", SDL_GetError());
98 static const struct mp_keymap keysym_map
[] = {
99 {SDLK_RETURN
, KEY_ENTER
}, {SDLK_ESCAPE
, KEY_ESC
},
100 {SDLK_F1
, KEY_F
+1}, {SDLK_F2
, KEY_F
+2}, {SDLK_F3
, KEY_F
+3},
101 {SDLK_F4
, KEY_F
+4}, {SDLK_F5
, KEY_F
+5}, {SDLK_F6
, KEY_F
+6},
102 {SDLK_F7
, KEY_F
+7}, {SDLK_F8
, KEY_F
+8}, {SDLK_F9
, KEY_F
+9},
103 {SDLK_F10
, KEY_F
+10}, {SDLK_F11
, KEY_F
+11}, {SDLK_F12
, KEY_F
+12},
104 {SDLK_KP_PLUS
, '+'}, {SDLK_KP_MINUS
, '-'}, {SDLK_TAB
, KEY_TAB
},
105 {SDLK_PAGEUP
, KEY_PAGE_UP
}, {SDLK_PAGEDOWN
, KEY_PAGE_DOWN
},
106 {SDLK_UP
, KEY_UP
}, {SDLK_DOWN
, KEY_DOWN
},
107 {SDLK_LEFT
, KEY_LEFT
}, {SDLK_RIGHT
, KEY_RIGHT
},
108 {SDLK_KP_MULTIPLY
, '*'}, {SDLK_KP_DIVIDE
, '/'},
109 {SDLK_KP0
, KEY_KP0
}, {SDLK_KP1
, KEY_KP1
}, {SDLK_KP2
, KEY_KP2
},
110 {SDLK_KP3
, KEY_KP3
}, {SDLK_KP4
, KEY_KP4
}, {SDLK_KP5
, KEY_KP5
},
111 {SDLK_KP6
, KEY_KP6
}, {SDLK_KP7
, KEY_KP7
}, {SDLK_KP8
, KEY_KP8
},
113 {SDLK_KP_PERIOD
, KEY_KPDEC
}, {SDLK_KP_ENTER
, KEY_KPENTER
},
117 int sdl_default_handle_event(SDL_Event
*event
)
121 int res
= reinit
? VO_EVENT_REINIT
: 0;
125 switch (event
->type
) {
126 case SDL_VIDEORESIZE
:
127 vo_dwidth
= event
->resize
.w
;
128 vo_dheight
= event
->resize
.h
;
129 return VO_EVENT_RESIZE
;
131 case SDL_VIDEOEXPOSE
:
132 return VO_EVENT_EXPOSE
;
134 case SDL_MOUSEMOTION
:
135 vo_mouse_movement(global_vo
, event
->motion
.x
, event
->motion
.y
);
138 case SDL_MOUSEBUTTONDOWN
:
139 if (!vo_nomouse_input
)
140 mplayer_put_key((MOUSE_BTN0
+ event
->button
.button
- 1) | MP_KEY_DOWN
);
143 case SDL_MOUSEBUTTONUP
:
144 if (!vo_nomouse_input
)
145 mplayer_put_key(MOUSE_BTN0
+ event
->button
.button
- 1);
149 mpkey
= lookup_keymap_table(keysym_map
, event
->key
.keysym
.sym
);
151 event
->key
.keysym
.unicode
> 0 &&
152 event
->key
.keysym
.unicode
< 128)
153 mpkey
= event
->key
.keysym
.unicode
;
155 mplayer_put_key(mpkey
);
159 mplayer_put_key(KEY_CLOSE_WIN
);