Mercurial > mplayer.hg
annotate gui/win32/interface.c @ 33696:24d919fb6778
Don't let MPlayer directly call user interface functions.
Provide the necessary actions for MPlayer commands by guiGetEvent type
guiRunCommand instead. That way, access is possible through the official
interface function.
author | ib |
---|---|
date | Wed, 29 Jun 2011 15:22:22 +0000 |
parents | 60093217cb01 |
children | c919fb3d2531 |
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 |
24 #include <windows.h> | |
33358 | 25 |
26 #if defined(__CYGWIN__) | |
27 #define _beginthreadex CreateThread | |
28 #else | |
29 #include <process.h> | |
30 #endif | |
31 | |
30901 | 32 #include "path.h" |
26372
76413880bfad
Update include paths to account for build system changes.
diego
parents:
26193
diff
changeset
|
33 #include "gui/interface.h" |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
34 #include "m_option.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
35 #include "mixer.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
36 #include "mp_msg.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
37 #include "help_mp.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
38 #include "codec-cfg.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
39 #include "stream/stream.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
40 #include "libmpdemux/demuxer.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
41 #include "libmpdemux/stheader.h" |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
42 #ifdef CONFIG_DVDREAD |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
43 #include "stream/stream_dvd.h" |
23077 | 44 #endif |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
45 #include "input/input.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
46 #include "libvo/video_out.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
47 #include "libao2/audio_out.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
48 #include "access_mpcontext.h" |
30558 | 49 #include "libmpcodecs/vd.h" |
31425
2392ad3cec9c
Move af_cfg extern variable declaration to dec_audio.h.
diego
parents:
31312
diff
changeset
|
50 #include "libmpcodecs/dec_audio.h" |
33557 | 51 #include "gui/ui/gmplayer.h" |
30558 | 52 #include "mp_core.h" |
32093 | 53 #include "mpcommon.h" |
23077 | 54 #include "gui.h" |
55 #include "dialogs.h" | |
27391
1d2faa1020fb
Rename a bunch of miscellaneous preprocessor directives.
diego
parents:
27341
diff
changeset
|
56 #ifdef CONFIG_LIBCDIO |
23077 | 57 #include <cdio/cdio.h> |
58 #endif | |
59 | |
60 int guiWinID = 0; | |
61 | |
62 char *skinName = NULL; | |
63 char *codecname = NULL; | |
33555 | 64 int uiGotoTheNext = 1; |
23077 | 65 static gui_t *mygui = NULL; |
66 static int update_subwindow(void); | |
67 static RECT old_rect; | |
68 static DWORD style; | |
24992 | 69 static HANDLE hThread; |
70 static unsigned threadId; | |
25765
304fc0bbefe1
audio_out / video_out structs should be treated as const
reimar
parents:
24992
diff
changeset
|
71 const ao_functions_t *audio_out = NULL; |
304fc0bbefe1
audio_out / video_out structs should be treated as const
reimar
parents:
24992
diff
changeset
|
72 const vo_functions_t *video_out = NULL; |
23077 | 73 mixer_t *mixer = NULL; |
74 | |
75 /* test for playlist files, no need to specify -playlist on the commandline. | |
76 * add any conceivable playlist extensions here. | |
77 * - Erik | |
78 */ | |
79 int parse_filename(char *file, play_tree_t *playtree, m_config_t *mconfig, int clear) | |
80 { | |
81 if(clear) | |
82 mygui->playlist->clear_playlist(mygui->playlist); | |
83 | |
84 if(strstr(file, ".m3u") || strstr(file, ".pls")) | |
85 { | |
86 playtree = parse_playlist_file(file); | |
87 import_playtree_playlist_into_gui(playtree, mconfig); | |
88 return 1; | |
89 } | |
90 return 0; | |
91 } | |
92 | |
93 /** | |
94 * \brief this actually creates a new list containing only one element... | |
95 */ | |
96 void gaddlist( char ***list, const char *entry) | |
97 { | |
98 int i; | |
99 | |
100 if (*list) | |
101 { | |
102 for (i=0; (*list)[i]; i++) free((*list)[i]); | |
103 free(*list); | |
104 } | |
105 | |
106 *list = malloc(2 * sizeof(char **)); | |
107 (*list)[0] = gstrdup(entry); | |
108 (*list)[1] = NULL; | |
109 } | |
110 | |
111 char *gstrdup(const char *str) | |
112 { | |
113 if (!str) return NULL; | |
114 return strdup(str); | |
115 } | |
116 | |
117 /** | |
118 * \brief this replaces a string starting with search by replace. | |
119 * If not found, replace is appended. | |
120 */ | |
33579 | 121 static void greplace(char ***list, char *search, char *replace) |
23077 | 122 { |
123 int i = 0; | |
124 int len = (search) ? strlen(search) : 0; | |
125 | |
126 if (*list) | |
127 { | |
128 for (i = 0; (*list)[i]; i++) | |
129 { | |
130 if (search && (!strncmp((*list)[i], search, len))) | |
131 { | |
132 free((*list)[i]); | |
133 (*list)[i] = gstrdup(replace); | |
134 return; | |
135 } | |
136 } | |
137 *list = realloc(*list, (i + 2) * sizeof(char *)); | |
138 } | |
139 else | |
140 *list = malloc(2 * sizeof(char *)); | |
141 | |
142 (*list)[i] = gstrdup(replace); | |
143 (*list)[i + 1] = NULL; | |
144 } | |
145 | |
146 /* this function gets called by the gui to update mplayer */ | |
147 static void guiSetEvent(int event) | |
148 { | |
33555 | 149 if(guiInfo.mpcontext) |
150 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
23077 | 151 |
152 switch(event) | |
153 { | |
154 case evPlay: | |
155 case evPlaySwitchToPause: | |
23148
71efd1fc20c8
add missing case value, fixes functionality when using some skins.
vayne
parents:
23147
diff
changeset
|
156 case evPauseSwitchToPlay: |
33555 | 157 uiPlay(); |
23077 | 158 break; |
159 case evPause: | |
33555 | 160 uiPause(); |
23077 | 161 break; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
162 #ifdef CONFIG_DVDREAD |
23077 | 163 case evPlayDVD: |
164 { | |
165 static char dvdname[MAX_PATH]; | |
33555 | 166 guiInfo.DVD.current_title = dvd_title; |
167 guiInfo.DVD.current_chapter = dvd_chapter; | |
168 guiInfo.DVD.current_angle = dvd_angle; | |
169 guiInfo.DiskChanged = 1; | |
23077 | 170 |
33555 | 171 uiSetFileName(NULL, dvd_device, STREAMTYPE_DVD); |
23077 | 172 dvdname[0] = 0; |
173 strcat(dvdname, "DVD Movie"); | |
174 GetVolumeInformation(dvd_device, dvdname, MAX_PATH, NULL, NULL, NULL, NULL, 0); | |
175 capitalize(dvdname); | |
176 mp_msg(MSGT_GPLAYER, MSGL_V, "Opening DVD %s -> %s\n", dvd_device, dvdname); | |
33658
3a617d41751a
Rename guiGetEvent type guiSetParameters guiPreparation.
ib
parents:
33657
diff
changeset
|
177 guiGetEvent(guiPreparation, (void *) STREAMTYPE_DVD); |
23077 | 178 mygui->playlist->clear_playlist(mygui->playlist); |
179 mygui->playlist->add_track(mygui->playlist, filename, NULL, dvdname, 0); | |
180 mygui->startplay(mygui); | |
181 break; | |
182 } | |
183 #endif | |
27391
1d2faa1020fb
Rename a bunch of miscellaneous preprocessor directives.
diego
parents:
27341
diff
changeset
|
184 #ifdef CONFIG_LIBCDIO |
23077 | 185 case evPlayCD: |
186 { | |
187 int i; | |
188 char track[10]; | |
189 char trackname[10]; | |
190 CdIo_t *p_cdio = cdio_open(NULL, DRIVER_UNKNOWN); | |
191 track_t i_tracks; | |
192 | |
193 if(p_cdio == NULL) printf("Couldn't find a driver.\n"); | |
194 i_tracks = cdio_get_num_tracks(p_cdio); | |
195 | |
196 mygui->playlist->clear_playlist(mygui->playlist); | |
197 for(i=0;i<i_tracks;i++) | |
198 { | |
199 sprintf(track, "cdda://%d", i+1); | |
200 sprintf(trackname, "Track %d", i+1); | |
201 mygui->playlist->add_track(mygui->playlist, track, NULL, trackname, 0); | |
202 } | |
203 cdio_destroy(p_cdio); | |
204 mygui->startplay(mygui); | |
205 break; | |
206 } | |
207 #endif | |
208 case evFullScreen: | |
209 mp_input_queue_cmd(mp_input_parse_cmd("vo_fullscreen")); | |
210 break; | |
211 case evExit: | |
212 { | |
213 /* We are asking mplayer to exit, later it will ask us after uninit is made | |
214 this should be the only safe way to quit */ | |
215 mygui->activewidget = NULL; | |
216 mp_input_queue_cmd(mp_input_parse_cmd("quit")); | |
217 break; | |
218 } | |
219 case evStop: | |
33555 | 220 if(guiInfo.Playing) |
33614 | 221 guiGetEvent(guiSetState, (void *) GUI_STOP); |
23077 | 222 break; |
223 case evSetMoviePosition: | |
224 { | |
33555 | 225 rel_seek_secs = guiInfo.Position / 100.0f; |
23077 | 226 abs_seek_pos = 3; |
227 break; | |
228 } | |
229 case evForward10sec: | |
230 { | |
231 rel_seek_secs = 10.0f; | |
232 abs_seek_pos = 0; | |
233 break; | |
234 } | |
235 case evBackward10sec: | |
236 { | |
237 rel_seek_secs = -10.0f; | |
238 abs_seek_pos = 0; | |
239 break; | |
240 } | |
241 case evSetBalance: | |
242 case evSetVolume: | |
243 { | |
244 float l,r; | |
245 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
246 if (guiInfo.Playing == GUI_STOP) |
23077 | 247 break; |
248 | |
33555 | 249 if (guiInfo.Balance == 50.0f) |
250 mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); | |
23077 | 251 |
33555 | 252 l = guiInfo.Volume * ((100.0f - guiInfo.Balance) / 50.0f); |
253 r = guiInfo.Volume * ((guiInfo.Balance) / 50.0f); | |
23077 | 254 |
33555 | 255 if (l > guiInfo.Volume) l=guiInfo.Volume; |
256 if (r > guiInfo.Volume) r=guiInfo.Volume; | |
23077 | 257 mixer_setvolume(mixer, l, r); |
258 /* Check for balance support on mixer - there is a better way ?? */ | |
259 if (r != l) | |
260 { | |
261 mixer_getvolume(mixer, &l, &r); | |
262 if (r == l) | |
263 { | |
264 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Mixer doesn't support balanced audio\n"); | |
33555 | 265 mixer_setvolume(mixer, guiInfo.Volume, guiInfo.Volume); |
266 guiInfo.Balance = 50.0f; | |
23077 | 267 } |
268 } | |
269 break; | |
270 } | |
271 case evMute: | |
272 { | |
273 mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); | |
274 cmd->id=MP_CMD_MUTE; | |
275 cmd->name=strdup("mute"); | |
276 mp_input_queue_cmd(cmd); | |
277 break; | |
278 } | |
279 case evDropFile: | |
280 case evLoadPlay: | |
281 { | |
33555 | 282 switch(guiInfo.StreamType) |
23077 | 283 { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
284 #ifdef CONFIG_DVDREAD |
23077 | 285 case STREAMTYPE_DVD: |
286 { | |
33555 | 287 guiInfo.Title = guiInfo.DVD.current_title; |
288 guiInfo.Chapter = guiInfo.DVD.current_chapter; | |
289 guiInfo.Angle = guiInfo.DVD.current_angle; | |
290 guiInfo.DiskChanged = 1; | |
33614 | 291 guiGetEvent(guiSetState, (void *) GUI_PLAY); |
23077 | 292 break; |
293 } | |
23147
21c35763b178
compilation fix for disabling dvd functionality, patch by <bangbangbear at gmail dot com>, slightly modified by me.
vayne
parents:
23123
diff
changeset
|
294 #endif |
23077 | 295 default: |
296 { | |
33555 | 297 guiInfo.FilenameChanged = guiInfo.NewPlay = 1; |
23077 | 298 update_playlistwindow(); |
33555 | 299 uiGotoTheNext = guiInfo.Playing? 0 : 1; |
33614 | 300 guiGetEvent(guiSetState, (void *) GUI_STOP); |
301 guiGetEvent(guiSetState, (void *) GUI_PLAY); | |
23077 | 302 break; |
303 } | |
304 } | |
305 break; | |
306 } | |
307 case evNext: | |
33555 | 308 uiNext(); |
23077 | 309 break; |
310 case evPrev: | |
33555 | 311 uiPrev(); |
23077 | 312 break; |
313 } | |
314 } | |
315 | |
33555 | 316 void uiPlay( void ) |
23077 | 317 { |
33555 | 318 if((!guiInfo.Filename ) || (guiInfo.Filename[0] == 0)) |
23077 | 319 return; |
320 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
321 if(guiInfo.Playing > GUI_STOP) |
23077 | 322 { |
33555 | 323 uiPause(); |
23077 | 324 return; |
325 } | |
33555 | 326 guiInfo.NewPlay = 1; |
33614 | 327 guiGetEvent(guiSetState, (void *) GUI_PLAY); |
23077 | 328 } |
329 | |
33555 | 330 void uiPause( void ) |
23077 | 331 { |
33555 | 332 if(!guiInfo.Playing) return; |
23077 | 333 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
334 if(guiInfo.Playing == GUI_PLAY) |
23077 | 335 { |
336 mp_cmd_t * cmd = calloc(1, sizeof(*cmd)); | |
337 cmd->id=MP_CMD_PAUSE; | |
338 cmd->name=strdup("pause"); | |
339 mp_input_queue_cmd(cmd); | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
340 } else guiInfo.Playing = GUI_PLAY; |
23077 | 341 } |
342 | |
33555 | 343 void uiNext(void) |
23077 | 344 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
345 if(guiInfo.Playing == GUI_PAUSE) return; |
33555 | 346 switch(guiInfo.StreamType) |
23077 | 347 { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
348 #ifdef CONFIG_DVDREAD |
23077 | 349 case STREAMTYPE_DVD: |
33555 | 350 if(guiInfo.DVD.current_chapter == (guiInfo.DVD.chapters - 1)) |
23077 | 351 return; |
33555 | 352 guiInfo.DVD.current_chapter++; |
23077 | 353 break; |
354 #endif | |
355 default: | |
356 if(mygui->playlist->current == (mygui->playlist->trackcount - 1)) | |
357 return; | |
33555 | 358 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, |
23077 | 359 STREAMTYPE_STREAM); |
360 break; | |
361 } | |
362 mygui->startplay(mygui); | |
363 } | |
364 | |
33555 | 365 void uiPrev(void) |
23077 | 366 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
367 if(guiInfo.Playing == GUI_PAUSE) return; |
33555 | 368 switch(guiInfo.StreamType) |
23077 | 369 { |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
370 #ifdef CONFIG_DVDREAD |
23077 | 371 case STREAMTYPE_DVD: |
33555 | 372 if(guiInfo.DVD.current_chapter == 1) |
23077 | 373 return; |
33555 | 374 guiInfo.DVD.current_chapter--; |
23077 | 375 break; |
376 #endif | |
377 default: | |
378 if(mygui->playlist->current == 0) | |
379 return; | |
33555 | 380 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)--]->filename, |
23077 | 381 STREAMTYPE_STREAM); |
382 break; | |
383 } | |
384 mygui->startplay(mygui); | |
385 } | |
386 | |
33555 | 387 void uiSetFileName(char *dir, char *name, int type) |
23077 | 388 { |
389 if(!name) return; | |
390 if(!dir) | |
33555 | 391 guiSetFilename(guiInfo.Filename, name) |
23077 | 392 else |
33555 | 393 guiSetDF(guiInfo.Filename, dir, name); |
23077 | 394 |
33555 | 395 guiInfo.StreamType = type; |
396 free(guiInfo.AudioFile); | |
397 guiInfo.AudioFile = NULL; | |
398 free(guiInfo.Subtitlename); | |
399 guiInfo.Subtitlename = NULL; | |
23077 | 400 } |
401 | |
33555 | 402 void uiFullScreen( void ) |
23077 | 403 { |
33555 | 404 if(!guiInfo.sh_video) return; |
23077 | 405 |
406 if(sub_window) | |
407 { | |
408 if(!fullscreen && IsWindowVisible(mygui->subwindow) && !IsIconic(mygui->subwindow)) | |
409 GetWindowRect(mygui->subwindow, &old_rect); | |
410 | |
411 if(fullscreen) | |
412 { | |
413 fullscreen = 0; | |
414 style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; | |
415 } else { | |
416 fullscreen = 1; | |
417 style = WS_VISIBLE | WS_POPUP; | |
418 } | |
419 SetWindowLong(mygui->subwindow, GWL_STYLE, style); | |
420 update_subwindow(); | |
421 } | |
422 video_out->control(VOCTRL_FULLSCREEN, 0); | |
423 if(sub_window) ShowWindow(mygui->subwindow, SW_SHOW); | |
424 } | |
425 | |
24992 | 426 static unsigned __stdcall GuiThread(void* param) |
23077 | 427 { |
428 MSG msg; | |
429 | |
430 if(!skinName) skinName = strdup("Blue"); | |
431 if(!mygui) mygui = create_gui(get_path("skins"), skinName, guiSetEvent); | |
30558 | 432 if(!mygui) exit_player(EXIT_ERROR); |
23077 | 433 |
434 if(autosync && autosync != gtkAutoSync) | |
435 { | |
436 gtkAutoSyncOn = 1; | |
437 gtkAutoSync = autosync; | |
438 } | |
439 | |
24992 | 440 while(GetMessage(&msg, NULL, 0, 0)) |
23077 | 441 { |
442 TranslateMessage(&msg); | |
443 DispatchMessage(&msg); | |
444 } | |
23078 | 445 fprintf(stderr, "[GUI] GUI thread terminated.\n"); |
23077 | 446 fflush(stderr); |
447 return 0; | |
448 } | |
449 | |
450 void guiInit(void) | |
451 { | |
33555 | 452 memset(&guiInfo, 0, sizeof(guiInfo)); |
23077 | 453 /* Create The gui thread */ |
454 if (!mygui) | |
455 { | |
33358 | 456 hThread = _beginthreadex(NULL, 0, GuiThread, NULL, 0, &threadId); |
23077 | 457 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Creating GUI Thread 0x%04x\n", threadId); |
458 } | |
459 | |
460 /* Wait until the gui is created */ | |
461 while(!mygui) Sleep(100); | |
23078 | 462 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] GUI thread started.\n"); |
23077 | 463 } |
464 | |
465 void guiDone(void) | |
466 { | |
467 if(mygui) | |
468 { | |
469 fprintf(stderr, "[GUI] Closed by main mplayer window\n"); | |
470 fflush(stderr); | |
24992 | 471 PostThreadMessage(threadId, WM_QUIT, 0, 0); |
472 WaitForSingleObject(hThread, INFINITE); | |
473 CloseHandle(hThread); | |
23077 | 474 mygui->uninit(mygui); |
475 free(mygui); | |
476 mygui = NULL; | |
477 } | |
478 /* Remove tray icon */ | |
479 Shell_NotifyIcon(NIM_DELETE, &nid); | |
480 cfg_write(); | |
481 } | |
482 | |
483 /* this function gets called by mplayer to update the gui */ | |
30722
b0342ca7ea61
Fix windows Gui compilation and remove some related typecasts.
reimar
parents:
30558
diff
changeset
|
484 int guiGetEvent(int type, void *arg) |
23077 | 485 { |
30722
b0342ca7ea61
Fix windows Gui compilation and remove some related typecasts.
reimar
parents:
30558
diff
changeset
|
486 stream_t *stream = arg; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
487 #ifdef CONFIG_DVDREAD |
30722
b0342ca7ea61
Fix windows Gui compilation and remove some related typecasts.
reimar
parents:
30558
diff
changeset
|
488 dvd_priv_t *dvdp = arg; |
23077 | 489 #endif |
490 if(!mygui || !mygui->skin) return 0; | |
491 | |
33555 | 492 if(guiInfo.mpcontext) |
23077 | 493 { |
33555 | 494 audio_out = mpctx_get_audio_out(guiInfo.mpcontext); |
495 video_out = mpctx_get_video_out(guiInfo.mpcontext); | |
496 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
497 playtree = mpctx_get_playtree_iter(guiInfo.mpcontext); | |
23077 | 498 } |
499 | |
500 switch (type) | |
501 { | |
33658
3a617d41751a
Rename guiGetEvent type guiSetParameters guiPreparation.
ib
parents:
33657
diff
changeset
|
502 case guiPreparation: |
23077 | 503 { |
33695 | 504 guiGetEvent(guiNewFile, NULL); |
33555 | 505 guiInfo.DiskChanged = 0; |
506 guiInfo.FilenameChanged = 0; | |
507 guiInfo.NewPlay = 0; | |
508 switch(guiInfo.StreamType) | |
23077 | 509 { |
510 case STREAMTYPE_PLAYLIST: | |
511 break; | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
512 #ifdef CONFIG_DVDREAD |
23077 | 513 case STREAMTYPE_DVD: |
514 { | |
515 char tmp[512]; | |
33555 | 516 dvd_title = guiInfo.DVD.current_title; |
517 dvd_chapter = guiInfo.DVD.current_chapter; | |
518 dvd_angle = guiInfo.DVD.current_angle; | |
519 sprintf(tmp,"dvd://%d", guiInfo.Title); | |
520 guiSetFilename(guiInfo.Filename, tmp); | |
23077 | 521 break; |
522 } | |
523 #endif | |
524 } | |
33555 | 525 if(guiInfo.Filename) |
526 filename = strdup(guiInfo.Filename); | |
23077 | 527 else if(filename) |
33555 | 528 strcpy(guiInfo.Filename, filename); |
23077 | 529 break; |
530 } | |
33661 | 531 case guiSetAudio: |
23077 | 532 { |
33679 | 533 guiInfo.MovieWindow = (arg && !guiInfo.sh_video); |
33661 | 534 // NOTE: This type doesn't mean (and never meant) that we have |
535 // *just* audio, so there probably should be a check before | |
536 // hiding (see gui/interface.c). | |
23077 | 537 if(IsWindowVisible(mygui->subwindow)) |
538 ShowWindow(mygui->subwindow, SW_HIDE); | |
539 break; | |
540 } | |
541 case guiSetContext: | |
33555 | 542 guiInfo.mpcontext = arg; |
23077 | 543 break; |
33660 | 544 case guiSetVideo: |
23077 | 545 { |
33555 | 546 guiInfo.sh_video = arg; |
23077 | 547 if (arg) |
548 { | |
30722
b0342ca7ea61
Fix windows Gui compilation and remove some related typecasts.
reimar
parents:
30558
diff
changeset
|
549 sh_video_t *sh = arg; |
23077 | 550 codecname = sh->codec->name; |
33555 | 551 guiInfo.FPS = sh->fps; |
23077 | 552 |
553 /* we have video, show the subwindow */ | |
554 if(!IsWindowVisible(mygui->subwindow) || IsIconic(mygui->subwindow)) | |
555 ShowWindow(mygui->subwindow, SW_SHOWNORMAL); | |
556 if(WinID == -1) | |
557 update_subwindow(); | |
558 | |
559 } | |
560 break; | |
561 } | |
33653
86819da22c57
Rename guiGetEvent type guiSetVideo guiSetVideoWindow.
ib
parents:
33651
diff
changeset
|
562 case guiSetVideoWindow: |
23077 | 563 { |
33555 | 564 guiInfo.MovieWidth = vo_dwidth; |
565 guiInfo.MovieHeight = vo_dheight; | |
23077 | 566 |
33555 | 567 sub_aspect = (float)guiInfo.MovieWidth/guiInfo.MovieHeight; |
23077 | 568 if(WinID != -1) |
569 update_subwindow(); | |
570 break; | |
571 } | |
572 case guiSetStream: | |
573 { | |
33555 | 574 guiInfo.StreamType = stream->type; |
23077 | 575 switch(stream->type) |
576 { | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
577 #ifdef CONFIG_DVDREAD |
23077 | 578 case STREAMTYPE_DVD: |
33595 | 579 guiGetEvent(guiSetDVD, stream->priv); |
23077 | 580 break; |
581 #endif | |
582 } | |
583 break; | |
584 } | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26457
diff
changeset
|
585 #ifdef CONFIG_DVDREAD |
23077 | 586 case guiSetDVD: |
587 { | |
33555 | 588 guiInfo.DVD.titles = dvdp->vmg_file->tt_srpt->nr_of_srpts; |
589 guiInfo.DVD.chapters = dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
590 guiInfo.DVD.angles = dvdp->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
591 guiInfo.DVD.nr_of_audio_channels = dvdp->nr_of_channels; | |
592 memcpy(guiInfo.DVD.audio_streams, dvdp->audio_streams, sizeof(dvdp->audio_streams)); | |
593 guiInfo.DVD.nr_of_subtitles = dvdp->nr_of_subtitles; | |
594 memcpy(guiInfo.DVD.subtitles, dvdp->subtitles, sizeof(dvdp->subtitles)); | |
595 guiInfo.DVD.current_title = dvd_title + 1; | |
596 guiInfo.DVD.current_chapter = dvd_chapter + 1; | |
597 guiInfo.DVD.current_angle = dvd_angle + 1; | |
598 guiInfo.Track = dvd_title + 1; | |
23077 | 599 break; |
600 } | |
601 #endif | |
602 case guiReDraw: | |
603 mygui->updatedisplay(mygui, mygui->mainwindow); | |
604 break; | |
605 case guiSetAfilter: | |
33555 | 606 guiInfo.afilter = arg; |
23077 | 607 break; |
33611 | 608 case guiSetState: |
23077 | 609 { |
33555 | 610 guiInfo.Playing = (int) arg; |
611 switch (guiInfo.Playing) | |
23077 | 612 { |
33614 | 613 case GUI_PLAY: |
23077 | 614 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
615 guiInfo.Playing = GUI_PLAY; |
23077 | 616 break; |
617 } | |
33614 | 618 case GUI_STOP: |
23077 | 619 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
620 guiInfo.Playing = GUI_STOP; |
23077 | 621 if(movie_aspect >= 0) |
622 movie_aspect = -1; | |
623 update_subwindow(); | |
624 break; | |
625 } | |
33614 | 626 case GUI_PAUSE: |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
627 guiInfo.Playing = GUI_PAUSE; |
23077 | 628 break; |
629 } | |
630 break; | |
631 } | |
33659 | 632 case guiRunCommand: |
23077 | 633 { |
634 mp_msg(MSGT_GPLAYER,MSGL_V, "cmd: %d\n", (int) arg); | |
635 /* MPlayer asks us to quit */ | |
636 switch((int) arg) | |
637 { | |
31312
0b7792622c88
Remove Gui-specific slave commands and associated key-bindings and other code.
reimar
parents:
30901
diff
changeset
|
638 case MP_CMD_VO_FULLSCREEN: |
33555 | 639 uiFullScreen(); |
23077 | 640 break; |
641 case MP_CMD_QUIT: | |
642 { | |
643 mygui->uninit(mygui); | |
644 free(mygui); | |
645 mygui = NULL; | |
30558 | 646 exit_player(EXIT_QUIT); |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33661
diff
changeset
|
647 return 1; |
23077 | 648 } |
33696
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
649 case MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
650 guiSetEvent(evNext); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
651 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
652 case -MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
653 guiSetEvent(evPrev); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
654 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
655 case MP_CMD_STOP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
656 guiSetEvent(evStop); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
657 break; |
23077 | 658 default: |
659 break; | |
660 } | |
661 break; | |
662 } | |
33695 | 663 case guiNewFile: |
23077 | 664 { |
665 audio_id = -1; | |
666 video_id = -1; | |
667 dvdsub_id = -1; | |
668 vobsub_id = -1; | |
669 stream_cache_size = -1; | |
670 autosync = 0; | |
671 dvd_title = 0; | |
672 force_fps = 0; | |
673 if(!mygui->playlist->tracks) return 0; | |
33555 | 674 filename = guiInfo.Filename = mygui->playlist->tracks[mygui->playlist->current]->filename; |
675 guiInfo.Track = mygui->playlist->current + 1; | |
23077 | 676 if(gtkAONorm) greplace(&af_cfg.list, "volnorm", "volnorm"); |
677 if(gtkAOExtraStereo) | |
678 { | |
679 char *name = malloc(12 + 20 + 1); | |
680 snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul); | |
681 name[12 + 20] = 0; | |
682 greplace(&af_cfg.list, "extrastereo", name); | |
683 free(name); | |
684 } | |
685 if(gtkCacheOn) stream_cache_size = gtkCacheSize; | |
686 if(gtkAutoSyncOn) autosync = gtkAutoSync; | |
687 break; | |
688 } | |
33670 | 689 case guiSetMixer: |
23077 | 690 { |
691 if(audio_out) | |
692 { | |
693 /* Some audio_out drivers do not support balance e.g. dsound */ | |
694 /* FIXME this algo is not correct */ | |
695 float l, r; | |
696 mixer_getvolume(mixer, &l, &r); | |
33555 | 697 guiInfo.Volume = (r > l ? r : l); /* max(r,l) */ |
23077 | 698 if (r != l) |
33555 | 699 guiInfo.Balance = ((r-l) + 100.0f) * 0.5f; |
23077 | 700 else |
33555 | 701 guiInfo.Balance = 50.0f; |
23077 | 702 } |
703 break; | |
704 } | |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
705 case guiEndFile: |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
706 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
707 if(!uiGotoTheNext && guiInfo.Playing) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
708 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
709 uiGotoTheNext = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
710 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
711 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
712 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
713 if(uiGotoTheNext && guiInfo.Playing && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
714 (mygui->playlist->current < (mygui->playlist->trackcount - 1)) && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
715 guiInfo.StreamType != STREAMTYPE_DVD && |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
716 guiInfo.StreamType != STREAMTYPE_DVDNAV) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
717 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
718 /* we've finished this file, reset the aspect */ |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
719 if(movie_aspect >= 0) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
720 movie_aspect = -1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
721 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
722 uiGotoTheNext = guiInfo.FilenameChanged = guiInfo.NewPlay = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
723 uiSetFileName(NULL, mygui->playlist->tracks[(mygui->playlist->current)++]->filename, STREAMTYPE_STREAM); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
724 //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
|
725 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
726 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
727 if(guiInfo.FilenameChanged && guiInfo.NewPlay) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
728 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
729 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
730 guiInfo.TimeSec = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
731 guiInfo.Position = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
732 guiInfo.AudioChannels = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
733 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
734 #ifdef CONFIG_DVDREAD |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
735 guiInfo.DVD.current_title = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
736 guiInfo.DVD.current_chapter = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
737 guiInfo.DVD.current_angle = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
738 #endif |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
739 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
740 if (mygui->playlist->current == (mygui->playlist->trackcount - 1)) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
741 mygui->playlist->current = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
742 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
743 fullscreen = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
744 if(style == WS_VISIBLE | WS_POPUP) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
745 { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
746 style = WS_OVERLAPPEDWINDOW | WS_SIZEBOX; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
747 SetWindowLong(mygui->subwindow, GWL_STYLE, style); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
748 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
749 guiGetEvent(guiSetState, (void *) GUI_STOP); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
750 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33691
diff
changeset
|
751 } |
23077 | 752 default: |
753 mp_msg(MSGT_GPLAYER, MSGL_ERR, "[GUI] GOT UNHANDLED EVENT %i\n", type); | |
754 } | |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33661
diff
changeset
|
755 return 1; |
23077 | 756 } |
757 | |
758 /* This function adds/inserts one file into the gui playlist */ | |
33579 | 759 static int import_file_into_gui(char *pathname, int insert) |
23077 | 760 { |
761 char filename[MAX_PATH]; | |
762 char *filepart = filename; | |
763 | |
764 if (strstr(pathname, "://")) | |
765 { | |
766 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding special %s\n", pathname); | |
767 mygui->playlist->add_track(mygui->playlist, pathname, NULL, NULL, 0); | |
768 return 1; | |
769 } | |
770 if (GetFullPathName(pathname, MAX_PATH, filename, &filepart)) | |
771 { | |
772 if (!(GetFileAttributes(filename) & FILE_ATTRIBUTE_DIRECTORY)) | |
773 { | |
774 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Adding filename: %s - fullpath: %s\n", filepart, filename); | |
775 mygui->playlist->add_track(mygui->playlist, filename, NULL, filepart, 0); | |
776 return 1; | |
777 } | |
778 else | |
779 mp_msg(MSGT_GPLAYER, MSGL_V, "[GUI] Cannot add %s\n", filename); | |
780 } | |
781 | |
782 return 0; | |
783 } | |
784 | |
785 /* This function imports the initial playtree (based on cmd-line files) into the gui playlist | |
786 by either: | |
787 - overwriting gui pl (enqueue=0) */ | |
788 | |
789 int import_initial_playtree_into_gui(play_tree_t *my_playtree, m_config_t *config, int enqueue) | |
790 { | |
791 play_tree_iter_t *my_pt_iter = NULL; | |
792 int result = 0; | |
793 | |
794 if(!mygui) guiInit(); | |
795 | |
796 if((my_pt_iter = pt_iter_create(&my_playtree, config))) | |
797 { | |
798 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
799 { | |
800 if (parse_filename(filename, my_playtree, config, 0)) | |
801 result = 1; | |
802 else if (import_file_into_gui(filename, 0)) /* Add it to end of list */ | |
803 result = 1; | |
804 } | |
805 } | |
33555 | 806 uiGotoTheNext = 1; |
23077 | 807 |
808 if (result) | |
809 { | |
810 mygui->playlist->current = 0; | |
811 filename = mygui->playlist->tracks[0]->filename; | |
812 } | |
813 return result; | |
814 } | |
815 | |
816 /* This function imports and inserts an playtree, that is created "on the fly", for example by | |
817 parsing some MOV-Reference-File; or by loading an playlist with "File Open" | |
818 The file which contained the playlist is thereby replaced with it's contents. */ | |
819 | |
820 int import_playtree_playlist_into_gui(play_tree_t *my_playtree, m_config_t *config) | |
821 { | |
822 play_tree_iter_t *my_pt_iter = NULL; | |
823 int result = 0; | |
824 | |
825 if((my_pt_iter = pt_iter_create(&my_playtree, config))) | |
826 { | |
827 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
828 if (import_file_into_gui(filename, 1)) /* insert it into the list and set plCurrent = new item */ | |
829 result = 1; | |
830 pt_iter_destroy(&my_pt_iter); | |
831 } | |
832 filename = NULL; | |
833 return result; | |
834 } | |
835 | |
33579 | 836 static inline void gtkMessageBox(int type, const char *str) |
23077 | 837 { |
838 if (type & GTK_MB_FATAL) | |
839 MessageBox(NULL, str, "MPlayer GUI for Windows Error", MB_OK | MB_ICONERROR); | |
840 | |
841 fprintf(stderr, "[GUI] MessageBox: %s\n", str); | |
842 fflush(stderr); | |
843 } | |
844 | |
845 static int update_subwindow(void) | |
846 { | |
847 int x,y; | |
848 RECT rd; | |
849 WINDOWPOS wp; | |
850 | |
851 if(!sub_window) | |
852 { | |
33567 | 853 WinID = -1; |
23077 | 854 |
33555 | 855 if(IsWindowVisible(mygui->subwindow) && guiInfo.sh_video && guiInfo.Playing) |
23077 | 856 { |
857 ShowWindow(mygui->subwindow, SW_HIDE); | |
858 return 0; | |
859 } | |
33679 | 860 else if(!guiInfo.MovieWindow) |
23077 | 861 return 0; |
862 else ShowWindow(mygui->subwindow, SW_SHOW); | |
863 } | |
864 | |
865 /* we've come out of fullscreen at the end of file */ | |
33679 | 866 if((!IsWindowVisible(mygui->subwindow) || IsIconic(mygui->subwindow)) && guiInfo.MovieWindow) |
23077 | 867 ShowWindow(mygui->subwindow, SW_SHOWNORMAL); |
868 | |
869 /* get our current window coordinates */ | |
870 GetWindowRect(mygui->subwindow, &rd); | |
871 | |
872 x = rd.left; | |
873 y = rd.top; | |
874 | |
875 /* restore sub window position when coming out of fullscreen */ | |
876 if(x <= 0) x = old_rect.left; | |
877 if(y <= 0) y = old_rect.top; | |
878 | |
33555 | 879 if(!guiInfo.Playing) |
23077 | 880 { |
881 window *desc = NULL; | |
882 int i; | |
883 | |
884 for (i=0; i<mygui->skin->windowcount; i++) | |
885 if(mygui->skin->windows[i]->type == wiSub) | |
886 desc = mygui->skin->windows[i]; | |
887 | |
888 rd.right = rd.left+desc->base->bitmap[0]->width; | |
889 rd.bottom = rd.top+desc->base->bitmap[0]->height; | |
890 sub_aspect = (float)(rd.right-rd.left)/(rd.bottom-rd.top); | |
891 } | |
892 else | |
893 { | |
33555 | 894 rd.right = rd.left+guiInfo.MovieWidth; |
895 rd.bottom = rd.top+guiInfo.MovieHeight; | |
23077 | 896 |
897 if (movie_aspect > 0.0) // forced aspect from the cmdline | |
898 sub_aspect = movie_aspect; | |
899 } | |
900 | |
901 | |
902 AdjustWindowRect(&rd, WS_OVERLAPPEDWINDOW | WS_SIZEBOX, 0); | |
903 SetWindowPos(mygui->subwindow, 0, x, y, rd.right-rd.left, rd.bottom-rd.top, SWP_NOOWNERZORDER); | |
904 | |
905 wp.hwnd = mygui->subwindow; | |
906 wp.x = rd.left; | |
907 wp.y = rd.top; | |
908 wp.cx = rd.right-rd.left; | |
909 wp.cy = rd.bottom-rd.top; | |
910 wp.flags = SWP_NOOWNERZORDER | SWP_SHOWWINDOW; | |
911 | |
912 /* erase the bitmap image if there's video */ | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
913 if(guiInfo.Playing != GUI_STOP && guiInfo.sh_video) |
23077 | 914 SendMessage(mygui->subwindow, WM_ERASEBKGND, (WPARAM)GetDC(mygui->subwindow), 0); |
915 | |
916 /* reset the window aspect */ | |
917 SendMessage(mygui->subwindow, WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp); | |
918 return 0; | |
919 } | |
920 | |
921 void guiEventHandling(void) {} |