Mercurial > mplayer.hg
annotate libvo/sdl_common.c @ 33218:f0c2a62e3e89
Position windows initially at coordinates given in skin file.
So far, the initial positions of the main and subwindow were not
the ones specified in the skin file, but fixed defaults.
author | ib |
---|---|
date | Sat, 23 Apr 2011 08:05:27 +0000 |
parents | 2211cc2fb0c3 |
children | 3c51a42da09c |
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" |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
25 #include "input/input.h" |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
26 #include "input/mouse.h" |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
27 #include "video_out.h" |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
28 |
31035 | 29 static int old_w; |
30 static int old_h; | |
31 static int mode_flags; | |
31043
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
32 static int reinit; |
31035 | 33 |
31037 | 34 int vo_sdl_init(void) |
35 { | |
31043
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
36 reinit = 0; |
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
37 |
31037 | 38 if (!SDL_WasInit(SDL_INIT_VIDEO) && |
39 SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE) < 0) | |
40 return 0; | |
41 | |
42 // Setup Keyrepeats (500/30 are defaults) | |
43 SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, 100 /*SDL_DEFAULT_REPEAT_INTERVAL*/); | |
44 | |
31038
3e67417271d7
Make uppercase characters and in general all ASCII characters work
reimar
parents:
31037
diff
changeset
|
45 // Easiest way to get uppercase characters |
3e67417271d7
Make uppercase characters and in general all ASCII characters work
reimar
parents:
31037
diff
changeset
|
46 SDL_EnableUNICODE(1); |
3e67417271d7
Make uppercase characters and in general all ASCII characters work
reimar
parents:
31037
diff
changeset
|
47 |
31037 | 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); | |
52 | |
53 return 1; | |
54 } | |
55 | |
56 void vo_sdl_uninit(void) | |
57 { | |
58 if (SDL_WasInit(SDL_INIT_VIDEO)) | |
59 SDL_QuitSubSystem(SDL_INIT_VIDEO); | |
60 } | |
61 | |
31035 | 62 void vo_sdl_fullscreen(void) |
63 { | |
64 if (vo_fs) { | |
65 vo_dwidth = old_w; | |
66 vo_dheight = old_h; | |
67 } else { | |
68 old_w = vo_dwidth; | |
69 old_h = vo_dheight; | |
70 vo_dwidth = vo_screenwidth; | |
71 vo_dheight = vo_screenheight; | |
72 } | |
73 vo_fs = !vo_fs; | |
74 sdl_set_mode(0, mode_flags); | |
31043
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
75 // 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
|
76 // TODO: this should only be set if really necessary. |
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
77 reinit = 1; |
31035 | 78 } |
79 | |
31033
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
80 int sdl_set_mode(int bpp, uint32_t flags) |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
81 { |
31035 | 82 SDL_Surface *s; |
83 mode_flags = 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); | |
31033
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
89 if (!s) { |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
90 mp_msg(MSGT_VO, MSGL_FATAL, "SDL SetVideoMode failed: %s\n", SDL_GetError()); |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
91 return -1; |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
92 } |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
93 vo_dwidth = s->w; |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
94 vo_dheight = s->h; |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
95 return 0; |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
96 } |
8d1080e9c92d
Window resizing support for -vo gl with SDL backend.
reimar
parents:
31032
diff
changeset
|
97 |
31040 | 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}, | |
112 {SDLK_KP9, KEY_KP9}, | |
113 {SDLK_KP_PERIOD, KEY_KPDEC}, {SDLK_KP_ENTER, KEY_KPENTER}, | |
31318 | 114 {0, 0} |
31040 | 115 }; |
116 | |
31032
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
117 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
|
118 { |
31040 | 119 int mpkey; |
31043
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
120 if (!event) { |
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
121 int res = reinit ? VO_EVENT_REINIT : 0; |
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
122 reinit = 0; |
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
123 return res; |
80036ef586ff
Add reinitialization support. Necessary for fullscreen on OSX.
reimar
parents:
31042
diff
changeset
|
124 } |
31032
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
125 switch (event->type) { |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
126 case SDL_VIDEORESIZE: |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
127 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
|
128 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
|
129 return VO_EVENT_RESIZE; |
31046 | 130 |
31042 | 131 case SDL_VIDEOEXPOSE: |
132 return VO_EVENT_EXPOSE; | |
31046 | 133 |
31050 | 134 case SDL_MOUSEMOTION: |
135 vo_mouse_movement(event->motion.x, event->motion.y); | |
136 break; | |
137 | |
31032
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
138 case SDL_MOUSEBUTTONDOWN: |
31046 | 139 if (!vo_nomouse_input) |
140 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
|
141 break; |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
142 |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
143 case SDL_MOUSEBUTTONUP: |
31051 | 144 if (!vo_nomouse_input) |
31046 | 145 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
|
146 break; |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
147 |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
148 case SDL_KEYDOWN: |
31040 | 149 mpkey = lookup_keymap_table(keysym_map, event->key.keysym.sym); |
150 if (!mpkey && | |
151 event->key.keysym.unicode > 0 && | |
152 event->key.keysym.unicode < 128) | |
153 mpkey = event->key.keysym.unicode; | |
154 if (mpkey) | |
155 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
|
156 break; |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
157 |
31046 | 158 case SDL_QUIT: |
159 mplayer_put_key(KEY_CLOSE_WIN); | |
160 break; | |
31032
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
161 } |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
162 return 0; |
362425fe3de8
Add sdl_common file and use it to share the input handling between -vo gl
reimar
parents:
diff
changeset
|
163 } |