Mercurial > mplayer.hg
annotate gui/win32/interface.c @ 34697:ac6b38cd0d45
Rename sub window video window.
It was a bad idea to name the video window "sub window" at the time
the GUI was written. The term "sub window" does make sense from the
programmer's point of view, but it doesn't make any sense at all from
the user's point of view, because the sub window simply is the window
where the video will be displayed.
Moreover, since the term "sub" is generally short for "subtitles",
the renaming makes the code much easier to understand.
author | ib |
---|---|
date | Sat, 03 Mar 2012 16:45:15 +0000 |
parents | 4ff933a89818 |
children | ebcc17a3c165 |
rev | line source |
---|---|
23077 | 1 /* |
23079 | 2 * MPlayer GUI for Win32 |
3 * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de> | |
4 * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com> | |
5 * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it> | |
6 * | |
7 * This file is part of MPlayer. | |
8 * | |
9 * MPlayer is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * MPlayer is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
26457 | 19 * You should have received a copy of the GNU General Public License along |
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
23079 | 22 */ |
23077 | 23 |
34405
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
24 #include "config.h" |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
25 |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
26 #if defined(CONFIG_LIBCDIO) |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
27 #include <cdio/cdda.h> |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
28 #elif defined(CONFIG_CDDA) |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
29 #include <cdda_interface.h> |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
30 #endif |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
31 |
23077 | 32 #include <windows.h> |
33358 | 33 |
34115 | 34 #if defined(__CYGWIN__) || defined(__WINE__) |
33358 | 35 #define _beginthreadex CreateThread |
34392 | 36 #ifdef __WINE__ |
37 #include <winioctl.h> | |
38 #define WINE_MOUNTMGR_EXTENSIONS | |
39 #include <ddk/mountmgr.h> | |
40 #endif | |
33358 | 41 #else |
42 #include <process.h> | |
43 #endif | |
44 | |
30901 | 45 #include "path.h" |
26372
76413880bfad
Update include paths to account for build system changes.
diego
parents:
26193
diff
changeset
|
46 #include "gui/interface.h" |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
47 #include "m_option.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
48 #include "mixer.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
49 #include "mp_msg.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
50 #include "help_mp.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
51 #include "codec-cfg.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
52 #include "stream/stream.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
53 #include "libmpdemux/demuxer.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
54 #include "libmpdemux/stheader.h" |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
55 #ifdef CONFIG_DVDREAD |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
56 #include "stream/stream_dvd.h" |
23077 | 57 #endif |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
58 #include "input/input.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
59 #include "libvo/video_out.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
60 #include "libao2/audio_out.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
61 #include "access_mpcontext.h" |
30558 | 62 #include "libmpcodecs/vd.h" |
31425
2392ad3cec9c
Move af_cfg extern variable declaration to dec_audio.h.
diego
parents:
31312
diff
changeset
|
63 #include "libmpcodecs/dec_audio.h" |
33761 | 64 #include "gui/ui/actions.h" |
33557 | 65 #include "gui/ui/gmplayer.h" |
33770 | 66 #include "gui/util/mem.h" |
33761 | 67 #include "gui/util/list.h" |
68 #include "gui/util/string.h" | |
30558 | 69 #include "mp_core.h" |
32093 | 70 #include "mpcommon.h" |
23077 | 71 #include "gui.h" |
72 #include "dialogs.h" | |
73 | |
34399
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34393
diff
changeset
|
74 #define SAME_STREAMTYPE (STREAMTYPE_DUMMY - 1) |
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34393
diff
changeset
|
75 |
23077 | 76 int guiWinID = 0; |
77 | |
78 char *skinName = NULL; | |
79 char *codecname = NULL; | |
33555 | 80 int uiGotoTheNext = 1; |
23077 | 81 static gui_t *mygui = NULL; |
34697 | 82 static int update_videowindow(void); |
23077 | 83 static RECT old_rect; |
84 static DWORD style; | |
24992 | 85 static HANDLE hThread; |
86 static unsigned threadId; | |
25765
304fc0bbefe1
audio_out / video_out structs should be treated as const
reimar
parents:
24992
diff
changeset
|
87 const ao_functions_t *audio_out = NULL; |
304fc0bbefe1
audio_out / video_out structs should be treated as const
reimar
parents:
24992
diff
changeset
|
88 const vo_functions_t *video_out = NULL; |
23077 | 89 mixer_t *mixer = NULL; |
90 | |
34392 | 91 #ifdef __WINE__ |
92 /** | |
34393
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
93 * @brief Convert a Windows style path to a file name into an Unix style one. |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
94 * |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
95 * @param filename pointer to the file path to be converted |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
96 * |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
97 * @return pointer to the converted file path |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
98 */ |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
99 static char *unix_name (char *filename) |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
100 { |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
101 static char *unix_filename; |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
102 LPSTR (*CDECL wine_get_unix_file_name_ptr)(LPCWSTR); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
103 int wchar_conv; |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
104 |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
105 if (*filename && (filename[1] == ':')) |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
106 { |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
107 wine_get_unix_file_name_ptr = (void *) GetProcAddress(GetModuleHandleA("KERNEL32"), "wine_get_unix_file_name"); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
108 wchar_conv = MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, NULL, 0); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
109 |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
110 if (wine_get_unix_file_name_ptr && wchar_conv) |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
111 { |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
112 WCHAR *ntpath; |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
113 char *unix_name; |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
114 |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
115 ntpath = HeapAlloc(GetProcessHeap(), 0, sizeof(*ntpath) * (wchar_conv + 1)); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
116 MultiByteToWideChar(CP_UNIXCP, 0, filename, -1, ntpath, wchar_conv); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
117 unix_name = wine_get_unix_file_name_ptr(ntpath); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
118 setdup(&unix_filename, unix_name); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
119 filename = unix_filename; |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
120 HeapFree(GetProcessHeap(), 0, unix_name); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
121 HeapFree(GetProcessHeap(), 0, ntpath); |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
122 } |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
123 } |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
124 |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
125 return filename; |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
126 } |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
127 |
4c8bdc633648
Cosmetic: Collect together Wine port related functions.
ib
parents:
34392
diff
changeset
|
128 /** |
34392 | 129 * @brief Convert a Windows style device name into an Unix style one. |
130 * | |
131 * @param device pointer to the device name to be converted | |
132 * | |
133 * @return pointer to the converted device name | |
134 */ | |
135 static char *unix_device (char *device) | |
136 { | |
137 static char *unix_devname; | |
138 HANDLE mgr; | |
139 DWORD size = 1024; | |
140 | |
141 mgr = CreateFileW(MOUNTMGR_DOS_DEVICE_NAME, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); | |
142 | |
143 if (mgr != INVALID_HANDLE_VALUE) | |
144 { | |
145 struct mountmgr_unix_drive input; | |
146 struct mountmgr_unix_drive *data; | |
147 | |
148 data = HeapAlloc(GetProcessHeap(), 0, size); | |
149 | |
150 if (data) | |
151 { | |
152 memset(&input, 0, sizeof(input)); | |
153 input.letter = *device; | |
154 | |
155 if (DeviceIoControl(mgr, IOCTL_MOUNTMGR_QUERY_UNIX_DRIVE, &input, sizeof(input), data, size, NULL, NULL)) | |
156 { | |
157 if (data->device_offset) | |
158 { | |
159 setdup(&unix_devname, (char *) data + data->device_offset); | |
160 device = unix_devname; | |
161 } | |
162 } | |
163 | |
164 HeapFree(GetProcessHeap(), 0, data); | |
165 } | |
166 | |
167 CloseHandle(mgr); | |
168 } | |
169 | |
170 return device; | |
171 } | |
172 #endif | |
173 | |
23077 | 174 /* test for playlist files, no need to specify -playlist on the commandline. |
175 * add any conceivable playlist extensions here. | |
176 * - Erik | |
177 */ | |
178 int parse_filename(char *file, play_tree_t *playtree, m_config_t *mconfig, int clear) | |
179 { | |
180 if(clear) | |
181 mygui->playlist->clear_playlist(mygui->playlist); | |
182 | |
183 if(strstr(file, ".m3u") || strstr(file, ".pls")) | |
184 { | |
185 playtree = parse_playlist_file(file); | |
33752 | 186 guiPlaylistAdd(playtree, mconfig); |
23077 | 187 return 1; |
188 } | |
189 return 0; | |
190 } | |
191 | |
192 /* this function gets called by the gui to update mplayer */ | |
193 static void guiSetEvent(int event) | |
194 { | |
33555 | 195 if(guiInfo.mpcontext) |
196 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
23077 | 197 |
198 switch(event) | |
199 { | |
200 case evPlay: | |
201 case evPlaySwitchToPause: | |
23148
71efd1fc20c8
add missing case value, fixes functionality when using some skins.
vayne
parents:
23147
diff
changeset
|
202 case evPauseSwitchToPlay: |
33555 | 203 uiPlay(); |
23077 | 204 break; |
205 case evPause: | |
33555 | 206 uiPause(); |
23077 | 207 break; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
208 #ifdef CONFIG_DVDREAD |
23077 | 209 case evPlayDVD: |
210 { | |
211 static char dvdname[MAX_PATH]; | |
34391 | 212 guiInfo.Track = 1; |
213 guiInfo.Chapter = 1; | |
214 guiInfo.Angle = 1; | |
33890 | 215 guiInfo.NewPlay = GUI_FILE_SAME; |
23077 | 216 |
34392 | 217 #ifdef __WINE__ |
218 // dvd_device is in the Windows style (D:\), which needs to be | |
219 // converted for MPlayer, so that it will find the device in the | |
220 // Linux filesystem. | |
221 dvd_device = unix_device(dvd_device); | |
222 #endif | |
33555 | 223 uiSetFileName(NULL, dvd_device, STREAMTYPE_DVD); |
23077 | 224 dvdname[0] = 0; |
225 strcat(dvdname, "DVD Movie"); | |
226 GetVolumeInformation(dvd_device, dvdname, MAX_PATH, NULL, NULL, NULL, NULL, 0); | |
227 capitalize(dvdname); | |
228 mp_msg(MSGT_GPLAYER, MSGL_V, "Opening DVD %s -> %s\n", dvd_device, dvdname); | |
229 mygui->playlist->clear_playlist(mygui->playlist); | |
230 mygui->playlist->add_track(mygui->playlist, filename, NULL, dvdname, 0); | |
34391 | 231 uiPlay(); |
23077 | 232 break; |
233 } | |
234 #endif | |
34405
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
235 #ifdef CONFIG_CDDA |
23077 | 236 case evPlayCD: |
237 { | |
238 int i; | |
239 char track[10]; | |
240 char trackname[10]; | |
34405
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
241 #ifdef CONFIG_LIBCDIO |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
242 cdrom_drive_t *cd; |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
243 #else |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
244 cdrom_drive *cd; |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
245 #endif |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
246 int i_tracks; |
23077 | 247 |
34406 | 248 #ifdef __WINE__ |
249 // cdrom_device is in the Windows style (D:\), which needs to be | |
250 // converted for MPlayer, so that it will find the device in the | |
251 // Linux filesystem. | |
252 cdrom_device = unix_device(cdrom_device); | |
253 #endif | |
34405
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
254 cd = cdda_identify(cdrom_device, 0, NULL); |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
255 if (cd) |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
256 { |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
257 if (cdda_open(cd) != 0) |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
258 { |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
259 cdda_close(cd); |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
260 cd = NULL; |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
261 } |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
262 } |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
263 if(!cd) |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
264 { |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
265 printf("Couldn't find a driver.\n"); |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
266 break; |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
267 } |
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
268 i_tracks = cdda_tracks(cd); |
23077 | 269 |
270 mygui->playlist->clear_playlist(mygui->playlist); | |
271 for(i=0;i<i_tracks;i++) | |
272 { | |
273 sprintf(track, "cdda://%d", i+1); | |
274 sprintf(trackname, "Track %d", i+1); | |
275 mygui->playlist->add_track(mygui->playlist, track, NULL, trackname, 0); | |
276 } | |
34405
35fd66684548
Use cdparanoia compatibility names for CD function calls.
ib
parents:
34400
diff
changeset
|
277 cdda_close(cd); |
23077 | 278 mygui->startplay(mygui); |
279 break; | |
280 } | |
281 #endif | |
282 case evFullScreen: | |
283 mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen")); | |
284 break; | |
285 case evExit: | |
286 { | |
287 /* We are asking mplayer to exit, later it will ask us after uninit is made | |
288 this should be the only safe way to quit */ | |
289 mygui->activewidget = NULL; | |
290 mp_input_queue_cmd(mp_input_parse_cmd("quit")); | |
291 break; | |
292 } | |
293 case evStop: | |
33555 | 294 if(guiInfo.Playing) |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
295 gui(GUI_SET_STATE, (void *) GUI_STOP); |
23077 | 296 break; |
297 case evSetMoviePosition: | |
298 { | |
33555 | 299 rel_seek_secs = guiInfo.Position / 100.0f; |
23077 | 300 abs_seek_pos = 3; |
301 break; | |
302 } | |
303 case evForward10sec: | |
304 { | |
305 rel_seek_secs = 10.0f; | |
306 abs_seek_pos = 0; | |
307 break; | |
308 } | |
309 case evBackward10sec: | |
310 { | |
311 rel_seek_secs = -10.0f; | |
312 abs_seek_pos = 0; | |
313 break; | |
314 } | |
315 case evSetBalance: | |
316 case evSetVolume: | |
317 { | |
318 float l,r; | |
319 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
320 if (guiInfo.Playing == GUI_STOP) |
23077 | 321 break; |
322 | |
33555 | 323 if (guiInfo.Balance == 50.0f) |
324 mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); | |
23077 | 325 |
33555 | 326 l = guiInfo.Volume * ((100.0f - guiInfo.Balance) / 50.0f); |
327 r = guiInfo.Volume * ((guiInfo.Balance) / 50.0f); | |
23077 | 328 |
33555 | 329 if (l > guiInfo.Volume) l=guiInfo.Volume; |
330 if (r > guiInfo.Volume) r=guiInfo.Volume; | |
23077 | 331 mixer_setvolume(mixer, l, r); |
332 /* Check for balance support on mixer - there is a better way ?? */ | |
333 if (r != l) | |
334 { | |
335 mixer_getvolume(mixer, &l, &r); | |
336 if (r == l) | |
337 { | |
338 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Mixer doesn't support balanced audio\n"); | |
33555 | 339 mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); |
340 guiInfo.Balance = 50.0f; | |
23077 | 341 } |
342 } | |
343 break; | |
344 } | |
345 case evMute: | |
346 { | |
347 mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); | |
348 cmd->id=MP_CMD_MUTE; | |
349 cmd->name=strdup("mute"); | |
350 mp_input_queue_cmd(cmd); | |
351 break; | |
352 } | |
353 case evLoadPlay: | |
354 { | |
33555 | 355 switch(guiInfo.StreamType) |
23077 | 356 { |
357 case STREAMTYPE_DVD: | |
358 { | |
33890 | 359 guiInfo.NewPlay = GUI_FILE_SAME; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
360 gui(GUI_SET_STATE, (void *) GUI_PLAY); |
23077 | 361 break; |
362 } | |
363 default: | |
364 { | |
33890 | 365 guiInfo.NewPlay = GUI_FILE_NEW; |
23077 | 366 update_playlistwindow(); |
33555 | 367 uiGotoTheNext = guiInfo.Playing? 0 : 1; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
368 gui(GUI_SET_STATE, (void *) GUI_STOP); |
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
369 gui(GUI_SET_STATE, (void *) GUI_PLAY); |
23077 | 370 break; |
371 } | |
372 } | |
373 break; | |
374 } | |
375 case evNext: | |
33555 | 376 uiNext(); |
23077 | 377 break; |
378 case evPrev: | |
33555 | 379 uiPrev(); |
23077 | 380 break; |
381 } | |
382 } | |
383 | |
33555 | 384 void uiPlay( void ) |
23077 | 385 { |
33555 | 386 if((!guiInfo.Filename ) || (guiInfo.Filename[0] == 0)) |
23077 | 387 return; |
388 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
389 if(guiInfo.Playing > GUI_STOP) |
23077 | 390 { |
33555 | 391 uiPause(); |
23077 | 392 return; |
393 } | |
33890 | 394 guiInfo.NewPlay = GUI_FILE_NEW; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
395 gui(GUI_SET_STATE, (void *) GUI_PLAY); |
23077 | 396 } |
397 | |
33555 | 398 void uiPause( void ) |
23077 | 399 { |
33555 | 400 if(!guiInfo.Playing) return; |
23077 | 401 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
402 if(guiInfo.Playing == GUI_PLAY) |
23077 | 403 { |
404 mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); | |
405 cmd->id=MP_CMD_PAUSE; | |
406 cmd->name=strdup("pause"); | |
407 mp_input_queue_cmd(cmd); | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
408 } else guiInfo.Playing = GUI_PLAY; |
23077 | 409 } |
410 | |
33555 | 411 void uiNext(void) |
23077 | 412 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
413 if(guiInfo.Playing == GUI_PAUSE) return; |
33555 | 414 switch(guiInfo.StreamType) |
23077 | 415 { |
416 case STREAMTYPE_DVD: | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
417 if(guiInfo.Chapter == (guiInfo.Chapters - 1)) |
23077 | 418 return; |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
419 guiInfo.Chapter++; |
23077 | 420 break; |
421 default: | |
422 if(mygui->playlist->current == (mygui->playlist->trackcount - 1)) | |
423 return; | |
33555 | 424 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, |
34075 | 425 STREAMTYPE_FILE); |
23077 | 426 break; |
427 } | |
428 mygui->startplay(mygui); | |
429 } | |
430 | |
33555 | 431 void uiPrev(void) |
23077 | 432 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
433 if(guiInfo.Playing == GUI_PAUSE) return; |
33555 | 434 switch(guiInfo.StreamType) |
23077 | 435 { |
436 case STREAMTYPE_DVD: | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
437 if(guiInfo.Chapter == 1) |
23077 | 438 return; |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
439 guiInfo.Chapter--; |
23077 | 440 break; |
441 default: | |
442 if(mygui->playlist->current == 0) | |
443 return; | |
33555 | 444 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)--]->filename, |
34075 | 445 STREAMTYPE_FILE); |
23077 | 446 break; |
447 } | |
448 mygui->startplay(mygui); | |
449 } | |
450 | |
33555 | 451 void uiSetFileName(char *dir, char *name, int type) |
23077 | 452 { |
453 if(!name) return; | |
454 if(!dir) | |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33737
diff
changeset
|
455 setdup(&guiInfo.Filename, name); |
23077 | 456 else |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33737
diff
changeset
|
457 setddup(&guiInfo.Filename, dir, name); |
23077 | 458 |
34064 | 459 filename = guiInfo.Filename; |
34115 | 460 #ifdef __WINE__ |
34127
98f6d11e2ff3
Revise comment on filename conversion in the Wine port.
ib
parents:
34126
diff
changeset
|
461 // When the GUI receives the files to be played in guiPlaylistInitialize() |
98f6d11e2ff3
Revise comment on filename conversion in the Wine port.
ib
parents:
34126
diff
changeset
|
462 // and guiPlaylistAdd(), it calls import_file_into_gui() where the call of |
98f6d11e2ff3
Revise comment on filename conversion in the Wine port.
ib
parents:
34126
diff
changeset
|
463 // Wine's GetFullPathName() converts each file name into the Windows style |
98f6d11e2ff3
Revise comment on filename conversion in the Wine port.
ib
parents:
34126
diff
changeset
|
464 // (C:\path\to\file), which needs to be reconverted for MPlayer, so that |
98f6d11e2ff3
Revise comment on filename conversion in the Wine port.
ib
parents:
34126
diff
changeset
|
465 // it will find the filename in the Linux filesystem. |
34123 | 466 filename = unix_name(filename); |
34115 | 467 #endif |
34399
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34393
diff
changeset
|
468 |
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34393
diff
changeset
|
469 if (type != SAME_STREAMTYPE) |
34400 | 470 guiInfo.StreamType = type; |
34064 | 471 |
33897 | 472 nfree(guiInfo.AudioFilename); |
473 nfree(guiInfo.SubtitleFilename); | |
23077 | 474 } |
475 | |
33555 | 476 void uiFullScreen( void ) |
23077 | 477 { |
33555 | 478 if(!guiInfo.sh_video) return; |
23077 | 479 |
34697 | 480 if(video_window) |
23077 | 481 { |
34697 | 482 if(!fullscreen && IsWindowVisible(mygui->videowindow) && !IsIconic(mygui->videowindow)) |
483 GetWindowRect(mygui->videowindow, &old_rect); | |
23077 | 484 |
485 if(fullscreen) | |
486 { | |
487 fullscreen = 0; | |
488 style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; | |
489 } else { | |
490 fullscreen = 1; | |
491 style = WS_VISIBLE | WS_POPUP; | |
492 } | |
34697 | 493 SetWindowLong(mygui->videowindow, GWL_STYLE, style); |
494 update_videowindow(); | |
23077 | 495 } |
496 video_out->control(VOCTRL_FULLSCREEN, 0); | |
34697 | 497 if(video_window) ShowWindow(mygui->videowindow, SW_SHOW); |
23077 | 498 } |
499 | |
24992 | 500 static unsigned __stdcall GuiThread(void* param) |
23077 | 501 { |
502 MSG msg; | |
503 | |
504 if(!skinName) skinName = strdup("Blue"); | |
33781 | 505 if(!mygui) mygui = create_gui(get_path("skins"), guiSetEvent); |
30558 | 506 if(!mygui) exit_player(EXIT_ERROR); |
23077 | 507 |
508 if(autosync && autosync != gtkAutoSync) | |
509 { | |
510 gtkAutoSyncOn = 1; | |
511 gtkAutoSync = autosync; | |
512 } | |
513 | |
24992 | 514 while(GetMessage(&msg, NULL, 0, 0)) |
23077 | 515 { |
516 TranslateMessage(&msg); | |
517 DispatchMessage(&msg); | |
518 } | |
23078 | 519 fprintf(stderr, "[GUI] GUI thread terminated.\n"); |
23077 | 520 fflush(stderr); |
521 return 0; | |
522 } | |
523 | |
524 void guiInit(void) | |
525 { | |
33555 | 526 memset(&guiInfo, 0, sizeof(guiInfo)); |
23077 | 527 /* Create The gui thread */ |
528 if (!mygui) | |
529 { | |
33358 | 530 hThread = _beginthreadex(NULL, 0, GuiThread, NULL, 0, &threadId); |
23077 | 531 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Creating GUI Thread 0x%04x\n", threadId); |
532 } | |
533 | |
534 /* Wait until the gui is created */ | |
535 while(!mygui) Sleep(100); | |
23078 | 536 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] GUI thread started.\n"); |
23077 | 537 } |
538 | |
539 void guiDone(void) | |
540 { | |
541 if(mygui) | |
542 { | |
543 fprintf(stderr, "[GUI] Closed by main mplayer window\n"); | |
544 fflush(stderr); | |
24992 | 545 PostThreadMessage(threadId, WM_QUIT, 0, 0); |
546 WaitForSingleObject(hThread, INFINITE); | |
547 CloseHandle(hThread); | |
23077 | 548 mygui->uninit(mygui); |
33770 | 549 nfree(mygui); |
23077 | 550 } |
551 /* Remove tray icon */ | |
552 Shell_NotifyIcon(NIM_DELETE, &nid); | |
553 cfg_write(); | |
554 } | |
555 | |
556 /* this function gets called by mplayer to update the gui */ | |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
557 int gui(int what, void *data) |
23077 | 558 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
559 stream_t *stream = data; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
560 #ifdef CONFIG_DVDREAD |
33730 | 561 dvd_priv_t *dvdp; |
23077 | 562 #endif |
563 if(!mygui || !mygui->skin) return 0; | |
564 | |
33555 | 565 if(guiInfo.mpcontext) |
23077 | 566 { |
33555 | 567 audio_out = mpctx_get_audio_out(guiInfo.mpcontext); |
568 video_out = mpctx_get_video_out(guiInfo.mpcontext); | |
569 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
570 playtree = mpctx_get_playtree_iter(guiInfo.mpcontext); | |
23077 | 571 } |
572 | |
33726 | 573 switch (what) |
23077 | 574 { |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
575 case GUI_PREPARE: |
23077 | 576 { |
34052 | 577 audio_id = -1; |
578 video_id = -1; | |
579 dvdsub_id = -1; | |
580 vobsub_id = -1; | |
581 stream_cache_size = -1; | |
582 autosync = 0; | |
583 dvd_title = 0; | |
584 force_fps = 0; | |
585 if(!mygui->playlist->tracks) return 0; | |
34391 | 586 switch(guiInfo.StreamType) |
587 { | |
588 case STREAMTYPE_FILE: | |
589 case STREAMTYPE_STREAM: | |
34399
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34393
diff
changeset
|
590 uiSetFileName(NULL, mygui->playlist->tracks[mygui->playlist->current]->filename, SAME_STREAMTYPE); |
34391 | 591 guiInfo.Track = mygui->playlist->current + 1; |
592 break; | |
593 case STREAMTYPE_DVD: | |
594 { | |
595 char tmp[512]; | |
596 dvd_chapter = guiInfo.Chapter; | |
597 dvd_angle = guiInfo.Angle; | |
598 sprintf(tmp,"dvd://%d", guiInfo.Track); | |
34399
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34393
diff
changeset
|
599 uiSetFileName(NULL, tmp, SAME_STREAMTYPE); |
34391 | 600 break; |
601 } | |
602 } | |
34126 | 603 guiInfo.VideoWindow = 1; |
34610 | 604 if(gtkAONorm) listRepl(&af_cfg.list, "volnorm", "volnorm"); |
34052 | 605 if(gtkAOExtraStereo) |
606 { | |
607 char *name = malloc(12 + 20 + 1); | |
608 snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul); | |
609 name[12 + 20] = 0; | |
34610 | 610 listRepl(&af_cfg.list, "extrastereo", name); |
34052 | 611 free(name); |
612 } | |
613 if(gtkCacheOn) stream_cache_size = gtkCacheSize; | |
614 if(gtkAutoSyncOn) autosync = gtkAutoSync; | |
33555 | 615 guiInfo.NewPlay = 0; |
23077 | 616 break; |
617 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
618 case GUI_SET_AUDIO: |
23077 | 619 { |
34126 | 620 if (data && !guiInfo.sh_video) guiInfo.VideoWindow = 0; |
34697 | 621 if(IsWindowVisible(mygui->videowindow) && !guiInfo.VideoWindow) |
622 ShowWindow(mygui->videowindow, SW_HIDE); | |
23077 | 623 break; |
624 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
625 case GUI_SET_CONTEXT: |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
626 guiInfo.mpcontext = data; |
23077 | 627 break; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
628 case GUI_SET_VIDEO: |
23077 | 629 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
630 guiInfo.sh_video = data; |
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
631 if (data) |
23077 | 632 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
633 sh_video_t *sh = data; |
23077 | 634 codecname = sh->codec->name; |
635 | |
34697 | 636 /* we have video, show the video window */ |
637 if(!IsWindowVisible(mygui->videowindow) || IsIconic(mygui->videowindow)) | |
638 ShowWindow(mygui->videowindow, SW_SHOWNORMAL); | |
23077 | 639 if(WinID == -1) |
34697 | 640 update_videowindow(); |
23077 | 641 |
642 } | |
643 break; | |
644 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
645 case GUI_SETUP_VIDEO_WINDOW: |
23077 | 646 { |
33901 | 647 guiInfo.VideoWidth = vo_dwidth; |
648 guiInfo.VideoHeight = vo_dheight; | |
23077 | 649 |
34697 | 650 video_aspect = (float)guiInfo.VideoWidth/guiInfo.VideoHeight; |
23077 | 651 if(WinID != -1) |
34697 | 652 update_videowindow(); |
23077 | 653 break; |
654 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
655 case GUI_SET_STREAM: |
23077 | 656 { |
33555 | 657 guiInfo.StreamType = stream->type; |
23077 | 658 switch(stream->type) |
659 { | |
660 case STREAMTYPE_DVD: | |
34451
19277315b8c6
Retrieve DVD's titles, chapters and angles by stream control commands.
ib
parents:
34406
diff
changeset
|
661 guiInfo.Tracks = 0; |
19277315b8c6
Retrieve DVD's titles, chapters and angles by stream control commands.
ib
parents:
34406
diff
changeset
|
662 stream_control(stream, STREAM_CTRL_GET_NUM_TITLES, &guiInfo.Tracks); |
19277315b8c6
Retrieve DVD's titles, chapters and angles by stream control commands.
ib
parents:
34406
diff
changeset
|
663 guiInfo.Chapters = 0; |
19277315b8c6
Retrieve DVD's titles, chapters and angles by stream control commands.
ib
parents:
34406
diff
changeset
|
664 stream_control(stream, STREAM_CTRL_GET_NUM_CHAPTERS, &guiInfo.Chapters); |
19277315b8c6
Retrieve DVD's titles, chapters and angles by stream control commands.
ib
parents:
34406
diff
changeset
|
665 guiInfo.Angles = 0; |
19277315b8c6
Retrieve DVD's titles, chapters and angles by stream control commands.
ib
parents:
34406
diff
changeset
|
666 stream_control(stream, STREAM_CTRL_GET_NUM_ANGLES, &guiInfo.Angles); |
34454 | 667 #ifdef CONFIG_DVDREAD |
33730 | 668 dvdp = stream->priv; |
33902 | 669 guiInfo.AudioStreams = dvdp->nr_of_channels; |
670 memcpy(guiInfo.AudioStream, dvdp->audio_streams, sizeof(dvdp->audio_streams)); | |
671 guiInfo.Subtitles = dvdp->nr_of_subtitles; | |
672 memcpy(guiInfo.Subtitle, dvdp->subtitles, sizeof(dvdp->subtitles)); | |
34454 | 673 #endif |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
674 guiInfo.Chapter = dvd_chapter + 1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
675 guiInfo.Angle = dvd_angle + 1; |
33730 | 676 guiInfo.Track = dvd_title + 1; |
23077 | 677 break; |
678 } | |
679 break; | |
680 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
681 case GUI_REDRAW: |
23077 | 682 mygui->updatedisplay(mygui, mygui->mainwindow); |
683 break; | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
684 case GUI_SET_AFILTER: |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
685 guiInfo.afilter = data; |
23077 | 686 break; |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
687 case GUI_SET_STATE: |
23077 | 688 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
689 guiInfo.Playing = (int) data; |
33555 | 690 switch (guiInfo.Playing) |
23077 | 691 { |
33614 | 692 case GUI_PLAY: |
23077 | 693 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
694 guiInfo.Playing = GUI_PLAY; |
23077 | 695 break; |
696 } | |
33614 | 697 case GUI_STOP: |
23077 | 698 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
699 guiInfo.Playing = GUI_STOP; |
23077 | 700 if(movie_aspect >= 0) |
701 movie_aspect = -1; | |
34697 | 702 update_videowindow(); |
23077 | 703 break; |
704 } | |
33614 | 705 case GUI_PAUSE: |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
706 guiInfo.Playing = GUI_PAUSE; |
23077 | 707 break; |
708 } | |
709 break; | |
710 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
711 case GUI_RUN_COMMAND: |
23077 | 712 { |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
713 mp_msg(MSGT_GPLAYER,MSGL_V, "cmd: %d\n", (int) data); |
23077 | 714 /* MPlayer asks us to quit */ |
33791
8b0c78a85a8c
Cosmetic: Change parameter names of gui() and mplayer().
ib
parents:
33781
diff
changeset
|
715 switch((int) data) |
23077 | 716 { |
31312
0b7792622c88
Remove Gui-specific slave commands and associated key-bindings and other code.
reimar
parents:
30901
diff
changeset
|
717 case MP_CMD_VO_FULLSCREEN: |
33555 | 718 uiFullScreen(); |
23077 | 719 break; |
720 case MP_CMD_QUIT: | |
721 { | |
722 mygui->uninit(mygui); | |
33770 | 723 nfree(mygui); |
30558 | 724 exit_player(EXIT_QUIT); |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33661
diff
changeset
|
725 return 1; |
23077 | 726 } |
33696
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
727 case MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
728 guiSetEvent(evNext); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
729 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
730 case -MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
731 guiSetEvent(evPrev); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
732 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
733 case MP_CMD_STOP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
734 guiSetEvent(evStop); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
735 break; |
23077 | 736 default: |
737 break; | |
738 } | |
739 break; | |
740 } | |
34339 | 741 case GUI_RUN_MESSAGE: |
742 break; | |
33732 | 743 case GUI_HANDLE_EVENTS: |
744 break; | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
745 case GUI_SET_MIXER: |
23077 | 746 { |
747 if(audio_out) | |
748 { | |
749 /* Some audio_out drivers do not support balance e.g. dsound */ | |
750 /* FIXME this algo is not correct */ | |
751 float l, r; | |
752 mixer_getvolume(mixer, &l, &r); | |
33555 | 753 guiInfo.Volume = (r > l ? r : l); /* max(r,l) */ |
23077 | 754 if (r != l) |
33555 | 755 guiInfo.Balance = ((r-l) + 100.0f) * 0.5f; |
23077 | 756 else |
33555 | 757 guiInfo.Balance = 50.0f; |
23077 | 758 } |
759 break; | |
760 } | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
761 case GUI_END_FILE: |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
762 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
763 if(!uiGotoTheNext && guiInfo.Playing) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
764 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
765 uiGotoTheNext = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
766 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
767 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
768 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
769 if(uiGotoTheNext && guiInfo.Playing && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
770 (mygui->playlist->current < (mygui->playlist->trackcount - 1)) && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
771 guiInfo.StreamType != STREAMTYPE_DVD && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
772 guiInfo.StreamType != STREAMTYPE_DVDNAV) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
773 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
774 /* we've finished this file, reset the aspect */ |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
775 if(movie_aspect >= 0) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
776 movie_aspect = -1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
777 |
33894 | 778 uiGotoTheNext = 1; |
33890 | 779 guiInfo.NewPlay = GUI_FILE_NEW; |
34075 | 780 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, STREAMTYPE_FILE); |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
781 //sprintf(guiInfo.Filename, mygui->playlist->tracks[(mygui->playlist->current)++]->filename); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
782 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
783 |
33894 | 784 if(guiInfo.NewPlay == GUI_FILE_NEW) |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
785 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
786 |
33897 | 787 guiInfo.ElapsedTime = 0; |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
788 guiInfo.Position = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
789 guiInfo.AudioChannels = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
790 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
791 guiInfo.Track = 1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
792 guiInfo.Chapter = 1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33791
diff
changeset
|
793 guiInfo.Angle = 1; |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
794 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
795 if (mygui->playlist->current == (mygui->playlist->trackcount - 1)) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
796 mygui->playlist->current = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
797 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
798 fullscreen = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
799 if(style == WS_VISIBLE | WS_POPUP) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
800 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
801 style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; |
34697 | 802 SetWindowLong(mygui->videowindow, GWL_STYLE, style); |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
803 } |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
804 gui(GUI_SET_STATE, (void *) GUI_STOP); |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
805 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
806 } |
23077 | 807 default: |
33726 | 808 mp_msg(MSGT_GPLAYER, MSGL_ERR, "[GUI] GOT UNHANDLED EVENT %i\n", what); |
23077 | 809 } |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33661
diff
changeset
|
810 return 1; |
23077 | 811 } |
812 | |
813 /* This function adds/inserts one file into the gui playlist */ | |
33579 | 814 static int import_file_into_gui(char *pathname, int insert) |
23077 | 815 { |
816 char filename[MAX_PATH]; | |
817 char *filepart = filename; | |
818 | |
819 if (strstr(pathname, "://")) | |
820 { | |
821 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding special %s\n", pathname); | |
822 mygui->playlist->add_track(mygui->playlist, pathname, NULL, NULL, 0); | |
823 return 1; | |
824 } | |
825 if (GetFullPathName(pathname, MAX_PATH, filename, &filepart)) | |
826 { | |
827 if (!(GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY)) | |
828 { | |
829 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding filename: %s - fullpath: %s\n", filepart, filename); | |
830 mygui->playlist->add_track(mygui->playlist, filename, NULL, filepart, 0); | |
831 return 1; | |
832 } | |
833 else | |
834 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Cannot add %s\n", filename); | |
835 } | |
836 | |
837 return 0; | |
838 } | |
839 | |
840 /* This function imports the initial playtree (based on cmd-line files) into the gui playlist | |
841 by either: | |
842 - overwriting gui pl (enqueue=0) */ | |
843 | |
33752 | 844 int guiPlaylistInitialize(play_tree_t *my_playtree, m_config_t *config, int enqueue) |
23077 | 845 { |
846 play_tree_iter_t *my_pt_iter = NULL; | |
847 int result = 0; | |
848 | |
849 if(!mygui) guiInit(); | |
850 | |
851 if((my_pt_iter = pt_iter_create(&my_playtree, config))) | |
852 { | |
853 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
854 { | |
855 if (parse_filename(filename, my_playtree, config, 0)) | |
856 result = 1; | |
857 else if (import_file_into_gui(filename, 0)) /* Add it to end of list */ | |
858 result = 1; | |
859 } | |
860 } | |
33555 | 861 uiGotoTheNext = 1; |
23077 | 862 |
863 if (result) | |
864 { | |
865 mygui->playlist->current = 0; | |
34068 | 866 uiSetFileName(NULL, mygui->playlist->tracks[0]->filename, STREAMTYPE_FILE); |
23077 | 867 } |
34084 | 868 |
869 if (enqueue) filename = NULL; | |
870 | |
23077 | 871 return result; |
872 } | |
873 | |
874 /* This function imports and inserts an playtree, that is created "on the fly", for example by | |
875 parsing some MOV-Reference-File; or by loading an playlist with "File Open" | |
876 The file which contained the playlist is thereby replaced with it's contents. */ | |
877 | |
33752 | 878 int guiPlaylistAdd(play_tree_t *my_playtree, m_config_t *config) |
23077 | 879 { |
880 play_tree_iter_t *my_pt_iter = NULL; | |
881 int result = 0; | |
882 | |
883 if((my_pt_iter = pt_iter_create(&my_playtree, config))) | |
884 { | |
885 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
886 if (import_file_into_gui(filename, 1)) /* insert it into the list and set plCurrent = new item */ | |
887 result = 1; | |
888 pt_iter_destroy(&my_pt_iter); | |
889 } | |
890 return result; | |
891 } | |
892 | |
34697 | 893 static int update_videowindow(void) |
23077 | 894 { |
895 int x,y; | |
896 RECT rd; | |
897 WINDOWPOS wp; | |
898 | |
34697 | 899 if(!video_window) |
23077 | 900 { |
33567 | 901 WinID = -1; |
23077 | 902 |
34697 | 903 if(IsWindowVisible(mygui->videowindow) && guiInfo.sh_video && guiInfo.Playing) |
23077 | 904 { |
34697 | 905 ShowWindow(mygui->videowindow, SW_HIDE); |
23077 | 906 return 0; |
907 } | |
33901 | 908 else if(!guiInfo.VideoWindow) |
23077 | 909 return 0; |
34697 | 910 else ShowWindow(mygui->videowindow, SW_SHOW); |
23077 | 911 } |
912 | |
913 /* we've come out of fullscreen at the end of file */ | |
34697 | 914 if((!IsWindowVisible(mygui->videowindow) || IsIconic(mygui->videowindow)) && guiInfo.VideoWindow) |
915 ShowWindow(mygui->videowindow, SW_SHOWNORMAL); | |
23077 | 916 |
917 /* get our current window coordinates */ | |
34697 | 918 GetWindowRect(mygui->videowindow, &rd); |
23077 | 919 |
920 x = rd.left; | |
921 y = rd.top; | |
922 | |
34697 | 923 /* restore video window position when coming out of fullscreen */ |
23077 | 924 if(x <= 0) x = old_rect.left; |
925 if(y <= 0) y = old_rect.top; | |
926 | |
33555 | 927 if(!guiInfo.Playing) |
23077 | 928 { |
929 window *desc = NULL; | |
930 int i; | |
931 | |
932 for (i=0; i<mygui->skin->windowcount; i++) | |
34697 | 933 if(mygui->skin->windows[i]->type == wiVideo) |
23077 | 934 desc = mygui->skin->windows[i]; |
935 | |
936 rd.right = rd.left+desc->base->bitmap[0]->width; | |
937 rd.bottom = rd.top+desc->base->bitmap[0]->height; | |
34697 | 938 video_aspect = (float)(rd.right-rd.left)/(rd.bottom-rd.top); |
23077 | 939 } |
940 else | |
941 { | |
33901 | 942 rd.right = rd.left+guiInfo.VideoWidth; |
943 rd.bottom = rd.top+guiInfo.VideoHeight; | |
23077 | 944 |
945 if (movie_aspect > 0.0) // forced aspect from the cmdline | |
34697 | 946 video_aspect = movie_aspect; |
23077 | 947 } |
948 | |
949 | |
950 AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0); | |
34697 | 951 SetWindowPos(mygui->videowindow, 0, x, y, rd.right-rd.left, rd.bottom-rd.top, SWP_NOOWNERZORDER); |
23077 | 952 |
34697 | 953 wp.hwnd = mygui->videowindow; |
23077 | 954 wp.x = rd.left; |
955 wp.y = rd.top; | |
956 wp.cx = rd.right-rd.left; | |
957 wp.cy = rd.bottom-rd.top; | |
958 wp.flags = SWP_NOOWNERZORDER | SWP_SHOWWINDOW; | |
959 | |
960 /* erase the bitmap image if there's video */ | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
961 if(guiInfo.Playing != GUI_STOP && guiInfo.sh_video) |
34697 | 962 SendMessage(mygui->videowindow, WM_ERASEBKGND, (WPARAM)GetDC(mygui->videowindow), 0); |
23077 | 963 |
964 /* reset the window aspect */ | |
34697 | 965 SendMessage(mygui->videowindow, WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp); |
23077 | 966 return 0; |
967 } |