Mercurial > mplayer.hg
annotate gui/ui/actions.c @ 37195:ac6c37d85d65 default tip
configure: Fix initialization of variable def_local_aligned_32
It contiained the #define of HAVE_LOCAL_ALIGNED_16 instead
of HAVE_LOCAL_ALIGNED_32.
author | al |
---|---|
date | Sun, 28 Sep 2014 18:38:41 +0000 |
parents | 885a91949d89 |
children |
rev | line source |
---|---|
26458 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
23077 | 18 |
35437 | 19 /** |
20 * @file | |
21 * @brief User interface actions | |
22 */ | |
23 | |
36772
0da6c7ff95d2
Revise code of listMgr() command PLAYLIST_ITEM_GET_POS.
ib
parents:
36762
diff
changeset
|
24 #include <stdint.h> |
37170 | 25 #include <stdio.h> |
23077 | 26 #include <stdlib.h> |
27 #include <string.h> | |
28 | |
33556 | 29 #include "actions.h" |
35528 | 30 #include "ui.h" |
36032 | 31 #include "gui/interface.h" |
35525 | 32 #include "gui/app/app.h" |
35771 | 33 #include "gui/app/cfg.h" |
35525 | 34 #include "gui/app/gui.h" |
35771 | 35 #include "gui/dialog/dialog.h" |
32881 | 36 #include "gui/skin/skin.h" |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33740
diff
changeset
|
37 #include "gui/util/list.h" |
33739 | 38 #include "gui/util/mem.h" |
33737 | 39 #include "gui/util/string.h" |
35435 | 40 #include "gui/wm/ws.h" |
32881 | 41 #include "gui/wm/wsxdnd.h" |
23077 | 42 |
35771 | 43 #include "access_mpcontext.h" |
44 #include "config.h" | |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
45 #include "help_mp.h" |
36032 | 46 #include "m_property.h" |
47 #include "mixer.h" | |
48 #include "mp_core.h" | |
36894
669e2f7fb150
Directly call mplayer_put_key() instead of vo_x11_putkey().
ib
parents:
36772
diff
changeset
|
49 #include "mp_fifo.h" |
36032 | 50 #include "mp_msg.h" |
51 #include "mpcommon.h" | |
52 #include "mplayer.h" | |
32881 | 53 #include "input/input.h" |
35431 | 54 #include "libmpdemux/demuxer.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
55 #include "libvo/video_out.h" |
36894
669e2f7fb150
Directly call mplayer_put_key() instead of vo_x11_putkey().
ib
parents:
36772
diff
changeset
|
56 #include "osdep/keycodes.h" |
35771 | 57 #include "osdep/timer.h" |
58 #include "stream/stream.h" | |
59 #include "sub/sub.h" | |
60 | |
35776 | 61 #define GUI_REDRAW_WAIT 375 // in milliseconds |
35771 | 62 |
35777 | 63 int uiLoadPlay; |
64 | |
35775 | 65 static unsigned int last_redraw_time; |
35771 | 66 |
35776 | 67 /** |
68 * @brief Clear information not used for this @a type of stream. | |
69 * | |
70 * @param type stream type | |
71 */ | |
35771 | 72 static void MediumPrepare(int type) |
73 { | |
74 switch (type) { | |
75 case STREAMTYPE_DVD: | |
76 listMgr(PLAYLIST_DELETE, 0); | |
77 break; | |
78 | |
79 case STREAMTYPE_CDDA: | |
80 case STREAMTYPE_VCD: | |
36429 | 81 case STREAMTYPE_TV: |
82 case STREAMTYPE_DVB: | |
35771 | 83 listMgr(PLAYLIST_DELETE, 0); |
84 case STREAMTYPE_FILE: | |
85 case STREAMTYPE_STREAM: | |
86 case STREAMTYPE_PLAYLIST: | |
87 guiInfo.AudioStreams = 0; | |
88 guiInfo.Subtitles = 0; | |
89 guiInfo.Chapters = 0; | |
90 guiInfo.Angles = 0; | |
91 break; | |
92 } | |
93 } | |
94 | |
35773 | 95 void uiEvent(int ev, float param) |
35771 | 96 { |
36935 | 97 int iparam = (int)param; |
35771 | 98 mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); |
36262
703a51ce08c8
Enable the change of the movie aspect ratio on the fly.
ib
parents:
36032
diff
changeset
|
99 float aspect; |
36274 | 100 char cmd[40]; |
35771 | 101 |
35773 | 102 switch (ev) { |
35771 | 103 /* user events */ |
104 case evExit: | |
105 mplayer(MPLAYER_EXIT_GUI, EXIT_QUIT, 0); | |
106 break; | |
107 | |
108 case evLoadURL: | |
109 gtkShow(evLoadURL, NULL); | |
110 break; | |
111 | |
112 case ivSetAudio: | |
113 | |
114 if (!mpctx_get_demuxer(guiInfo.mpcontext) || audio_id == iparam) | |
115 break; | |
116 | |
117 mp_property_do("switch_audio", M_PROPERTY_SET, &iparam, guiInfo.mpcontext); | |
118 break; | |
119 | |
120 case ivSetVideo: | |
121 | |
122 if (!mpctx_get_demuxer(guiInfo.mpcontext) || video_id == iparam) | |
123 break; | |
124 | |
125 mp_property_do("switch_video", M_PROPERTY_SET, &iparam, guiInfo.mpcontext); | |
126 break; | |
127 | |
128 case ivSetSubtitle: | |
129 mp_property_do("sub", M_PROPERTY_SET, &iparam, guiInfo.mpcontext); | |
130 break; | |
131 | |
132 #ifdef CONFIG_CDDA | |
133 case ivSetCDTrack: | |
134 guiInfo.Track = iparam; | |
135 | |
136 case evPlayCD: | |
137 guiInfo.StreamType = STREAMTYPE_CDDA; | |
138 goto play; | |
139 #endif | |
140 #ifdef CONFIG_VCD | |
141 case ivSetVCDTrack: | |
142 guiInfo.Track = iparam; | |
143 | |
144 case evPlayVCD: | |
145 guiInfo.StreamType = STREAMTYPE_VCD; | |
146 goto play; | |
147 #endif | |
148 #ifdef CONFIG_DVDREAD | |
149 case ivSetDVDSubtitle: | |
150 dvdsub_id = iparam; | |
35773 | 151 uiEvent(ivPlayDVD, 0); |
35771 | 152 break; |
153 | |
154 case ivSetDVDAudio: | |
155 audio_id = iparam; | |
35773 | 156 uiEvent(ivPlayDVD, 0); |
35771 | 157 break; |
158 | |
159 case ivSetDVDChapter: | |
160 guiInfo.Chapter = iparam; | |
35773 | 161 uiEvent(ivPlayDVD, 0); |
35771 | 162 break; |
163 | |
164 case ivSetDVDTitle: | |
165 guiInfo.Track = iparam; | |
166 guiInfo.Chapter = 1; | |
167 guiInfo.Angle = 1; | |
35773 | 168 uiEvent(ivPlayDVD, 0); |
35771 | 169 break; |
170 | |
171 case evPlayDVD: | |
172 guiInfo.Chapter = 1; | |
173 guiInfo.Angle = 1; | |
174 | |
175 case ivPlayDVD: | |
176 guiInfo.StreamType = STREAMTYPE_DVD; | |
177 goto play; | |
178 #endif | |
36429 | 179 #ifdef CONFIG_TV |
180 case evPlayTV: | |
181 guiInfo.StreamType = guiTV[gui_tv_digital].StreamType; | |
182 goto play; | |
183 #endif | |
35771 | 184 case evPlay: |
185 case evPlaySwitchToPause: | |
186 play: | |
187 | |
35791 | 188 if (guiInfo.Playing != GUI_PAUSE) { |
35792 | 189 MediumPrepare(guiInfo.StreamType); |
35771 | 190 |
35792 | 191 switch (guiInfo.StreamType) { |
192 case STREAMTYPE_FILE: | |
193 case STREAMTYPE_STREAM: | |
194 case STREAMTYPE_PLAYLIST: | |
35771 | 195 |
35792 | 196 if (!guiInfo.Track) |
197 guiInfo.Track = 1; | |
35771 | 198 |
36937
ad939f49bb28
Cosmetic: Rename guiInfo member NewPlay MediumChanged.
ib
parents:
36936
diff
changeset
|
199 guiInfo.MediumChanged = GUI_MEDIUM_NEW; |
36938 | 200 guiInfo.PlaylistNext = !guiInfo.Playing; |
35791 | 201 |
35792 | 202 break; |
35771 | 203 |
35792 | 204 case STREAMTYPE_CDDA: |
205 case STREAMTYPE_VCD: | |
206 case STREAMTYPE_DVD: | |
36429 | 207 case STREAMTYPE_TV: |
208 case STREAMTYPE_DVB: | |
35771 | 209 |
210 if (!guiInfo.Track) | |
35793 | 211 guiInfo.Track = (guiInfo.StreamType == STREAMTYPE_VCD ? 2 : 1); |
35771 | 212 |
36937
ad939f49bb28
Cosmetic: Rename guiInfo member NewPlay MediumChanged.
ib
parents:
36936
diff
changeset
|
213 guiInfo.MediumChanged = GUI_MEDIUM_SAME; |
35771 | 214 |
35792 | 215 break; |
216 } | |
35791 | 217 } |
35771 | 218 |
219 uiPlay(); | |
220 break; | |
221 | |
222 case evPause: | |
223 case evPauseSwitchToPlay: | |
224 uiPause(); | |
225 break; | |
226 | |
227 case evStop: | |
228 guiInfo.Playing = GUI_STOP; | |
229 uiState(); | |
230 break; | |
231 | |
232 case evLoadPlay: | |
233 uiLoadPlay = True; | |
234 | |
235 // guiInfo.StreamType=STREAMTYPE_FILE; | |
236 case evLoad: | |
237 gtkShow(evLoad, NULL); | |
238 break; | |
239 | |
240 case evLoadSubtitle: | |
241 gtkShow(evLoadSubtitle, NULL); | |
242 break; | |
243 | |
244 case evDropSubtitle: | |
245 nfree(guiInfo.SubtitleFilename); | |
246 mplayerLoadSubtitle(NULL); | |
247 break; | |
248 | |
249 case evLoadAudioFile: | |
250 gtkShow(evLoadAudioFile, NULL); | |
251 break; | |
252 | |
253 case evPrev: | |
254 uiPrev(); | |
255 break; | |
256 | |
257 case evNext: | |
258 uiNext(); | |
259 break; | |
260 | |
261 case evPlaylist: | |
262 gtkShow(evPlaylist, NULL); | |
263 break; | |
264 | |
265 case evSkinBrowser: | |
266 gtkShow(evSkinBrowser, skinName); | |
267 break; | |
268 | |
269 case evAbout: | |
270 gtkShow(evAbout, NULL); | |
271 break; | |
272 | |
273 case evPreferences: | |
274 gtkShow(evPreferences, NULL); | |
275 break; | |
276 | |
277 case evEqualizer: | |
278 gtkShow(evEqualizer, NULL); | |
279 break; | |
280 | |
281 case evForward10min: | |
282 uiRelSeek(600); | |
283 break; | |
284 | |
285 case evBackward10min: | |
286 uiRelSeek(-600); | |
287 break; | |
288 | |
289 case evForward1min: | |
290 uiRelSeek(60); | |
291 break; | |
292 | |
293 case evBackward1min: | |
294 uiRelSeek(-60); | |
295 break; | |
296 | |
297 case evForward10sec: | |
298 uiRelSeek(10); | |
299 break; | |
300 | |
301 case evBackward10sec: | |
302 uiRelSeek(-10); | |
303 break; | |
304 | |
305 case evSetMoviePosition: | |
36931 | 306 guiInfo.Position = param; |
307 uiAbsSeek(guiInfo.Position); | |
35771 | 308 break; |
309 | |
310 case evIncVolume: | |
36894
669e2f7fb150
Directly call mplayer_put_key() instead of vo_x11_putkey().
ib
parents:
36772
diff
changeset
|
311 mplayer_put_key(KEY_VOLUME_UP); |
35771 | 312 break; |
313 | |
314 case evDecVolume: | |
36894
669e2f7fb150
Directly call mplayer_put_key() instead of vo_x11_putkey().
ib
parents:
36772
diff
changeset
|
315 mplayer_put_key(KEY_VOLUME_DOWN); |
35771 | 316 break; |
317 | |
318 case evMute: | |
319 mixer_mute(mixer); | |
320 break; | |
321 | |
322 case evSetVolume: | |
36933 | 323 case ivSetVolume: |
35771 | 324 guiInfo.Volume = param; |
325 { | |
36902 | 326 float l = guiInfo.Volume * (100.0 - guiInfo.Balance) / 50.0; |
327 float r = guiInfo.Volume * guiInfo.Balance / 50.0; | |
35771 | 328 mixer_setvolume(mixer, FFMIN(l, guiInfo.Volume), FFMIN(r, guiInfo.Volume)); |
329 } | |
330 | |
36956 | 331 if (ev == ivSetVolume) |
36933 | 332 break; |
333 | |
35771 | 334 if (osd_level) { |
335 osd_visible = (GetTimerMS() + 1000) | 1; | |
336 vo_osd_progbar_type = OSD_VOLUME; | |
36902 | 337 vo_osd_progbar_value = guiInfo.Volume * 256.0 / 100.0; |
35771 | 338 vo_osd_changed(OSDTYPE_PROGBAR); |
339 } | |
340 | |
341 break; | |
342 | |
343 case evSetBalance: | |
36958 | 344 case ivSetBalance: |
35771 | 345 guiInfo.Balance = param; |
346 mixer_setbalance(mixer, (guiInfo.Balance - 50.0) / 50.0); // transform 0..100 to -1..1 | |
36935 | 347 uiEvent(ivSetVolume, guiInfo.Volume); |
35771 | 348 |
36958 | 349 if (ev == ivSetBalance) |
350 break; | |
351 | |
35771 | 352 if (osd_level) { |
353 osd_visible = (GetTimerMS() + 1000) | 1; | |
354 vo_osd_progbar_type = OSD_BALANCE; | |
36902 | 355 vo_osd_progbar_value = guiInfo.Balance * 256.0 / 100.0; |
35771 | 356 vo_osd_changed(OSDTYPE_PROGBAR); |
357 } | |
358 | |
359 break; | |
360 | |
361 case evMenu: | |
362 /*if (guiApp.menuIsPresent) NOTE TO MYSELF: Uncomment only after mouse | |
363 * { pointer and cursor keys work | |
364 * gtkShow( ivHidePopUpMenu,NULL ); with this menu from skin as | |
365 * uiMenuShow( 0,0 ); they do with normal menus. | |
366 * } | |
367 * else*/gtkShow(ivShowPopUpMenu, NULL); | |
368 break; | |
369 | |
370 case evIconify: | |
371 | |
372 switch (iparam) { | |
373 case 0: | |
374 wsWindowIconify(&guiApp.mainWindow); | |
375 break; | |
376 | |
377 case 1: | |
378 wsWindowIconify(&guiApp.videoWindow); | |
379 break; | |
380 } | |
381 | |
382 break; | |
383 | |
384 case evHalfSize: | |
385 | |
386 if (guiInfo.VideoWindow && guiInfo.Playing) { | |
387 if (guiApp.videoWindow.isFullScreen) { | |
388 uiFullScreen(); | |
389 } | |
390 | |
391 wsWindowResize(&guiApp.videoWindow, guiInfo.VideoWidth / 2, guiInfo.VideoHeight / 2); | |
392 btnSet(evFullScreen, btnReleased); | |
393 } | |
394 | |
395 break; | |
396 | |
397 case evDoubleSize: | |
398 | |
399 if (guiInfo.VideoWindow && guiInfo.Playing) { | |
400 if (guiApp.videoWindow.isFullScreen) { | |
401 uiFullScreen(); | |
402 } | |
403 | |
404 wsWindowResize(&guiApp.videoWindow, guiInfo.VideoWidth * 2, guiInfo.VideoHeight * 2); | |
405 wsWindowMoveWithin(&guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y); | |
406 btnSet(evFullScreen, btnReleased); | |
407 } | |
408 | |
409 break; | |
410 | |
411 case evNormalSize: | |
412 | |
413 if (guiInfo.VideoWindow && guiInfo.Playing) { | |
414 if (guiApp.videoWindow.isFullScreen) { | |
415 uiFullScreen(); | |
416 } | |
417 | |
418 wsWindowResize(&guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight); | |
419 btnSet(evFullScreen, btnReleased); | |
420 break; | |
421 } else if (!guiApp.videoWindow.isFullScreen) | |
422 break; | |
423 | |
424 case evFullScreen: | |
425 | |
426 if (guiInfo.VideoWindow && (guiInfo.Playing || !iparam)) { | |
427 uiFullScreen(); | |
428 | |
429 if (!guiApp.videoWindow.isFullScreen) | |
430 wsWindowResize(&guiApp.videoWindow, iparam ? guiInfo.VideoWidth : guiApp.video.width, iparam ? guiInfo.VideoHeight : guiApp.video.height); | |
431 } | |
432 | |
433 if (guiApp.videoWindow.isFullScreen) | |
434 btnSet(evFullScreen, btnPressed); | |
435 else | |
436 btnSet(evFullScreen, btnReleased); | |
437 | |
438 break; | |
439 | |
440 case evSetAspect: | |
441 | |
442 switch (iparam) { | |
443 case 2: | |
36262
703a51ce08c8
Enable the change of the movie aspect ratio on the fly.
ib
parents:
36032
diff
changeset
|
444 aspect = 16.0f / 9.0f; |
35771 | 445 break; |
446 | |
447 case 3: | |
36262
703a51ce08c8
Enable the change of the movie aspect ratio on the fly.
ib
parents:
36032
diff
changeset
|
448 aspect = 4.0f / 3.0f; |
35771 | 449 break; |
450 | |
451 case 4: | |
36276 | 452 aspect = 2.35f; |
35771 | 453 break; |
454 | |
455 case 1: | |
456 default: | |
36272
aa0011dfbfdc
Use again special value -1 to set original aspect ratio.
ib
parents:
36264
diff
changeset
|
457 aspect = -1; |
37061 | 458 break; |
35771 | 459 } |
460 | |
36274 | 461 snprintf(cmd, sizeof(cmd), "pausing_keep switch_ratio %f", aspect); |
36262
703a51ce08c8
Enable the change of the movie aspect ratio on the fly.
ib
parents:
36032
diff
changeset
|
462 mp_input_queue_cmd(mp_input_parse_cmd(cmd)); |
35771 | 463 |
464 break; | |
465 | |
37081 | 466 case evSetRotation: |
467 | |
468 switch (iparam) { | |
469 case 90: | |
470 guiInfo.Rotation = 1; | |
471 break; | |
472 | |
473 case -90: | |
474 guiInfo.Rotation = 2; | |
475 break; | |
476 | |
477 case 180: | |
478 guiInfo.Rotation = 8; | |
479 break; | |
480 | |
481 case 0: | |
482 default: | |
483 guiInfo.Rotation = -1; | |
484 break; | |
485 } | |
486 | |
487 guiInfo.MediumChanged = GUI_MEDIUM_SAME; | |
488 | |
489 break; | |
490 | |
35771 | 491 /* timer events */ |
492 case ivRedraw: | |
493 { | |
35775 | 494 unsigned int now = GetTimerMS(); |
35771 | 495 |
496 if ((now > last_redraw_time) && | |
497 (now < last_redraw_time + GUI_REDRAW_WAIT) && | |
498 !uiPlaybarFade && (iparam == 0)) | |
499 break; | |
500 | |
501 last_redraw_time = now; | |
502 } | |
503 uiMainRender = True; | |
504 wsWindowRedraw(&guiApp.mainWindow); | |
505 wsWindowRedraw(&guiApp.playbarWindow); | |
506 break; | |
507 | |
508 /* system events */ | |
509 case evNone: | |
35773 | 510 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[actions] uiEvent: evNone\n"); |
35771 | 511 break; |
512 | |
513 default: | |
35773 | 514 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[actions] uiEvent: unknown event %d, param %.2f\n", ev, param); |
35771 | 515 break; |
516 } | |
517 } | |
23077 | 518 |
35437 | 519 /** |
520 * @brief Switch video window fullscreen mode. | |
521 * | |
522 * Switch normal video to fullscreen and fullscreen video to normal. | |
523 */ | |
33555 | 524 void uiFullScreen(void) |
23077 | 525 { |
33960 | 526 if (!guiInfo.VideoWindow) |
32881 | 527 return; |
528 | |
35681
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
529 wsWindowFullscreen(&guiApp.videoWindow); |
23077 | 530 |
34697 | 531 vo_fs = guiApp.videoWindow.isFullScreen; |
23077 | 532 |
35681
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
533 wsWindowLayer(wsDisplay, guiApp.mainWindow.WindowID, guiApp.videoWindow.isFullScreen); |
32881 | 534 |
33555 | 535 if (guiApp.menuIsPresent) |
35681
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
536 wsWindowLayer(wsDisplay, guiApp.menuWindow.WindowID, guiApp.videoWindow.isFullScreen); |
23077 | 537 } |
538 | |
35437 | 539 /** |
540 * @brief Switch to play mode. | |
541 */ | |
33555 | 542 void uiPlay(void) |
23077 | 543 { |
34401
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
544 if (guiInfo.Playing == GUI_PLAY) |
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
545 return; |
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
546 |
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
547 if (guiInfo.StreamType != STREAMTYPE_CDDA && |
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
548 guiInfo.StreamType != STREAMTYPE_VCD && |
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
549 guiInfo.StreamType != STREAMTYPE_DVD && |
36429 | 550 guiInfo.StreamType != STREAMTYPE_TV && |
551 guiInfo.StreamType != STREAMTYPE_DVB && | |
34401
af8838c2b60b
Allow uiPlay() without guiInfo.Filename for some stream types.
ib
parents:
34400
diff
changeset
|
552 (!guiInfo.Filename || (guiInfo.Filename[0] == 0))) |
32881 | 553 return; |
23077 | 554 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
555 if (guiInfo.Playing == GUI_PAUSE) { |
33555 | 556 uiPause(); |
32881 | 557 return; |
558 } | |
559 | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33725
diff
changeset
|
560 gui(GUI_SET_STATE, (void *)GUI_PLAY); |
23077 | 561 } |
562 | |
35437 | 563 /** |
564 * @brief Switch to pause mode. | |
565 */ | |
33555 | 566 void uiPause(void) |
23077 | 567 { |
33555 | 568 if (!guiInfo.Playing) |
32881 | 569 return; |
570 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
571 if (guiInfo.Playing == GUI_PLAY) { |
32881 | 572 mp_cmd_t *cmd = calloc(1, sizeof(*cmd)); |
35433 | 573 |
35432 | 574 if (cmd) { |
35433 | 575 cmd->id = MP_CMD_PAUSE; |
576 cmd->name = strdup("pause"); | |
577 mp_input_queue_cmd(cmd); | |
35432 | 578 } |
32881 | 579 } else |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
580 guiInfo.Playing = GUI_PLAY; |
23077 | 581 } |
582 | |
35437 | 583 /** |
584 * @brief Adjust GUI items to reflect current state (i.e. current playing mode). | |
585 */ | |
33555 | 586 void uiState(void) |
32881 | 587 { |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
588 if (guiInfo.Playing == GUI_STOP || guiInfo.Playing == GUI_PAUSE) { |
33978 | 589 btnSet(evPlaySwitchToPause, btnReleased); |
590 btnSet(evPauseSwitchToPlay, btnDisabled); | |
32881 | 591 } else { |
35434 | 592 btnSet(evPauseSwitchToPlay, btnReleased); |
33978 | 593 btnSet(evPlaySwitchToPause, btnDisabled); |
32881 | 594 } |
23077 | 595 } |
596 | |
35437 | 597 /** |
598 * @brief Seek new playback position. | |
599 * | |
35438 | 600 * The new position is a relative one. |
35437 | 601 * |
602 * @param sec seconds to seek (either forward (> 0) or backward (< 0)) | |
603 */ | |
33555 | 604 void uiRelSeek(float sec) |
32881 | 605 { |
32971 | 606 rel_seek_secs = sec; |
32881 | 607 abs_seek_pos = 0; |
608 } | |
609 | |
35437 | 610 /** |
611 * @brief Seek new playback position. | |
612 * | |
35438 | 613 * The new position is an absolute one. |
35437 | 614 * |
615 * @param percent percentage of playback time to position to | |
616 */ | |
33555 | 617 void uiAbsSeek(float percent) |
32881 | 618 { |
32971 | 619 rel_seek_secs = percent / 100.0; |
35431 | 620 abs_seek_pos = SEEK_ABSOLUTE | SEEK_FACTOR; |
23077 | 621 } |
622 | |
35437 | 623 /** |
624 * @brief Change to a different skin. | |
625 * | |
626 * @param name name of the skin to change to | |
627 */ | |
33555 | 628 void uiChangeSkin(char *name) |
23077 | 629 { |
35799 | 630 int was_menu, was_playbar; |
32881 | 631 |
35799 | 632 was_menu = guiApp.menuIsPresent; |
633 was_playbar = guiApp.playbarIsPresent; | |
32881 | 634 |
35493 | 635 mainVisible = False; |
32881 | 636 |
32893 | 637 if (skinRead(name) != 0) { |
638 if (skinRead(skinName) != 0) { | |
36694 | 639 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_GUI_MSG_SkinCfgError, skinName); |
35801
98693cc5df48
Exit GUI if we can't return to the skin we started with.
ib
parents:
35800
diff
changeset
|
640 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0); |
32893 | 641 } |
32881 | 642 } |
643 | |
35800 | 644 /* reload main window (must be first!) */ |
23077 | 645 |
35800 | 646 uiMainDone(); |
647 uiMainInit(); | |
32881 | 648 |
35800 | 649 wsWindowVisibility(&guiApp.mainWindow, wsShowWindow); |
650 mainVisible = True; | |
23077 | 651 |
35805 | 652 /* adjust video window */ |
23077 | 653 |
35805 | 654 if (guiApp.video.Bitmap.Image) { |
35681
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
655 wsImageResize(&guiApp.videoWindow, guiApp.video.Bitmap.Width, guiApp.video.Bitmap.Height); |
35805 | 656 wsImageRender(&guiApp.videoWindow, guiApp.video.Bitmap.Image); |
657 } | |
32881 | 658 |
35805 | 659 if (!guiInfo.Playing) { |
660 if (!guiApp.videoWindow.isFullScreen) { | |
35806 | 661 wsWindowResize(&guiApp.videoWindow, guiApp.video.width, guiApp.video.height); |
662 wsWindowMove(&guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y); | |
663 } | |
32881 | 664 |
35681
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
665 wsWindowRedraw(&guiApp.videoWindow); |
35805 | 666 } |
32881 | 667 |
34684 | 668 /* reload playbar */ |
32881 | 669 |
35799 | 670 if (was_playbar) |
35796
497a1c45a597
Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents:
35795
diff
changeset
|
671 uiPlaybarDone(); |
32881 | 672 |
33555 | 673 uiPlaybarInit(); |
23077 | 674 |
35800 | 675 /* reload menu window */ |
676 | |
35804
25852c740093
Remove code almost identical to uiMenuDone() plus uiMenuInit().
ib
parents:
35801
diff
changeset
|
677 if (was_menu) |
25852c740093
Remove code almost identical to uiMenuDone() plus uiMenuInit().
ib
parents:
35801
diff
changeset
|
678 uiMenuDone(); |
32881 | 679 |
35804
25852c740093
Remove code almost identical to uiMenuDone() plus uiMenuInit().
ib
parents:
35801
diff
changeset
|
680 uiMenuInit(); |
35800 | 681 |
682 /* */ | |
32881 | 683 |
36973
79fe279d3bac
Set state for buttons volume and balance on skin change.
ib
parents:
36967
diff
changeset
|
684 if (guiInfo.AudioPassthrough) |
79fe279d3bac
Set state for buttons volume and balance on skin change.
ib
parents:
36967
diff
changeset
|
685 btnSet(evSetVolume, btnDisabled); |
79fe279d3bac
Set state for buttons volume and balance on skin change.
ib
parents:
36967
diff
changeset
|
686 if (guiInfo.AudioChannels < 2 || guiInfo.AudioPassthrough) |
79fe279d3bac
Set state for buttons volume and balance on skin change.
ib
parents:
36967
diff
changeset
|
687 btnSet(evSetBalance, btnDisabled); |
79fe279d3bac
Set state for buttons volume and balance on skin change.
ib
parents:
36967
diff
changeset
|
688 |
36975 | 689 btnSet(evFullScreen, guiApp.videoWindow.isFullScreen ? btnPressed : btnReleased); |
23077 | 690 |
35681
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
691 wsWindowLayer(wsDisplay, guiApp.mainWindow.WindowID, guiApp.videoWindow.isFullScreen); |
80c5c89f77d6
Cosmetic: Rename ws functions for the sake of consistency.
ib
parents:
35658
diff
changeset
|
692 wsWindowLayer(wsDisplay, guiApp.menuWindow.WindowID, guiApp.videoWindow.isFullScreen); |
32881 | 693 } |
694 | |
35437 | 695 /** |
35452 | 696 * @brief Set the file to be played. |
35437 | 697 * |
698 * @param dir directory (optional, else NULL) | |
699 * @param name filename | |
700 * @param type stream type of the file | |
35483
8ac7761bcb7c
Clear information associated with a file when setting a new one.
ib
parents:
35462
diff
changeset
|
701 * |
8ac7761bcb7c
Clear information associated with a file when setting a new one.
ib
parents:
35462
diff
changeset
|
702 * @note All #guiInfo members associated with the file will be cleared. |
35437 | 703 */ |
35968 | 704 void uiSetFile(const char *dir, const char *name, int type) |
32881 | 705 { |
706 if (!dir) | |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
707 setdup(&guiInfo.Filename, name); |
32881 | 708 else |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
709 setddup(&guiInfo.Filename, dir, name); |
23077 | 710 |
34064 | 711 filename = guiInfo.Filename; |
34399
f2c03009068d
Don't explicitly set stream type if the type doesn't change.
ib
parents:
34387
diff
changeset
|
712 |
35483
8ac7761bcb7c
Clear information associated with a file when setting a new one.
ib
parents:
35462
diff
changeset
|
713 if (type != SAME_STREAMTYPE) { |
34400 | 714 guiInfo.StreamType = type; |
35568 | 715 uiUnsetMedia(False); |
35483
8ac7761bcb7c
Clear information associated with a file when setting a new one.
ib
parents:
35462
diff
changeset
|
716 } |
23077 | 717 } |
718 | |
35437 | 719 /** |
35453 | 720 * @brief Unset the file being played. |
721 */ | |
722 void uiUnsetFile(void) | |
723 { | |
724 uiSetFile(NULL, NULL, STREAMTYPE_DUMMY); | |
725 } | |
726 | |
727 /** | |
35562 | 728 * @brief Unset media information. |
35568 | 729 * |
37063 | 730 * @param totals whether to additionally unset number of chapters and angles (#True) |
731 * or just track, chapter and angle (#False) | |
35562 | 732 */ |
35568 | 733 void uiUnsetMedia(int totals) |
35562 | 734 { |
36967 | 735 guiInfo.VideoWidth = 0; |
736 guiInfo.VideoHeight = 0; | |
737 guiInfo.AudioChannels = 0; | |
36966 | 738 guiInfo.AudioPassthrough = False; |
36967 | 739 guiInfo.RunningTime = 0; |
35568 | 740 |
741 if (totals) { | |
742 guiInfo.Chapters = 0; | |
743 guiInfo.Angles = 0; | |
744 } else { | |
35569 | 745 guiInfo.Track = 0; |
746 guiInfo.Chapter = 0; | |
747 guiInfo.Angle = 0; | |
35568 | 748 } |
35562 | 749 |
750 nfree(guiInfo.CodecName); | |
751 nfree(guiInfo.AudioFilename); | |
752 nfree(guiInfo.SubtitleFilename); | |
753 } | |
754 | |
755 /** | |
35437 | 756 * @brief Set file to be played to current playlist entry. |
757 */ | |
33555 | 758 void uiCurr(void) |
23077 | 759 { |
32881 | 760 plItem *curr; |
23077 | 761 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
762 if (guiInfo.Playing == GUI_PAUSE) |
32881 | 763 return; |
23077 | 764 |
33555 | 765 switch (guiInfo.StreamType) { |
34387 | 766 case STREAMTYPE_CDDA: |
34077 | 767 case STREAMTYPE_VCD: |
768 case STREAMTYPE_DVD: | |
36429 | 769 case STREAMTYPE_TV: |
770 case STREAMTYPE_DVB: | |
35433 | 771 |
32881 | 772 break; |
773 | |
774 default: | |
775 | |
34663 | 776 curr = listMgr(PLAYLIST_ITEM_GET_CURR, 0); |
32881 | 777 |
778 if (curr) { | |
35452 | 779 uiSetFile(curr->path, curr->name, STREAMTYPE_FILE); |
35493 | 780 guiInfo.PlaylistNext = False; |
36772
0da6c7ff95d2
Revise code of listMgr() command PLAYLIST_ITEM_GET_POS.
ib
parents:
36762
diff
changeset
|
781 guiInfo.Track = (uintptr_t)listMgr(PLAYLIST_ITEM_GET_POS, curr); |
32881 | 782 break; |
783 } | |
784 | |
785 return; | |
786 } | |
787 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
788 if (guiInfo.Playing == GUI_PLAY) |
35773 | 789 uiEvent(evPlay, 0); |
23077 | 790 } |
791 | |
35437 | 792 /** |
793 * @brief Switch to previous playback track. | |
794 */ | |
33555 | 795 void uiPrev(void) |
23077 | 796 { |
35571
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
797 int stop = False, unset = True; |
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
798 plItem *prev = NULL; |
32881 | 799 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
800 if (guiInfo.Playing == GUI_PAUSE) |
32881 | 801 return; |
802 | |
33555 | 803 switch (guiInfo.StreamType) { |
34387 | 804 case STREAMTYPE_CDDA: |
35426 | 805 |
34387 | 806 if (--guiInfo.Track == 0) { |
807 guiInfo.Track = 1; | |
35493 | 808 stop = True; |
34387 | 809 } |
35426 | 810 |
34387 | 811 break; |
812 | |
34077 | 813 case STREAMTYPE_VCD: |
35426 | 814 |
34077 | 815 if (--guiInfo.Track == 1) { |
816 guiInfo.Track = 2; | |
35493 | 817 stop = True; |
34077 | 818 } |
35426 | 819 |
34077 | 820 break; |
821 | |
32881 | 822 case STREAMTYPE_DVD: |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27370
diff
changeset
|
823 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
824 if (--guiInfo.Chapter == 0) { |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
825 guiInfo.Chapter = 1; |
32881 | 826 |
35428 | 827 if (--guiInfo.Track == 0) { |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
828 guiInfo.Track = 1; |
35493 | 829 stop = True; |
32881 | 830 } |
35571
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
831 } else |
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
832 unset = False; |
32881 | 833 |
834 break; | |
835 | |
36429 | 836 case STREAMTYPE_TV: |
837 case STREAMTYPE_DVB: | |
838 | |
839 if (guiInfo.Playing == GUI_PLAY) | |
840 mp_input_queue_cmd(mp_input_parse_cmd("tv_step_channel -1")); | |
841 | |
842 return; | |
843 | |
32881 | 844 default: |
845 | |
34663 | 846 prev = listMgr(PLAYLIST_ITEM_GET_PREV, 0); |
32881 | 847 |
848 if (prev) { | |
35452 | 849 uiSetFile(prev->path, prev->name, STREAMTYPE_FILE); |
35500 | 850 guiInfo.PlaylistNext = !guiInfo.Playing; |
36772
0da6c7ff95d2
Revise code of listMgr() command PLAYLIST_ITEM_GET_POS.
ib
parents:
36762
diff
changeset
|
851 guiInfo.Track = (uintptr_t)listMgr(PLAYLIST_ITEM_GET_POS, prev); |
32881 | 852 break; |
853 } | |
854 | |
855 return; | |
856 } | |
857 | |
858 if (stop) | |
35773 | 859 uiEvent(evStop, 0); |
32881 | 860 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
861 if (guiInfo.Playing == GUI_PLAY) |
35773 | 862 uiEvent(evPlay, 0); |
35571
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
863 else if (!stop && !prev && unset) |
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
864 uiUnsetMedia(True); |
23077 | 865 } |
866 | |
35437 | 867 /** |
868 * @brief Switch to next playback track. | |
869 */ | |
33555 | 870 void uiNext(void) |
23077 | 871 { |
35571
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
872 int stop = False, unset = True; |
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
873 plItem *next = NULL; |
23077 | 874 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
875 if (guiInfo.Playing == GUI_PAUSE) |
32881 | 876 return; |
877 | |
33555 | 878 switch (guiInfo.StreamType) { |
34387 | 879 case STREAMTYPE_CDDA: |
35425 | 880 case STREAMTYPE_VCD: |
34387 | 881 |
882 if (++guiInfo.Track > guiInfo.Tracks) { | |
883 guiInfo.Track = guiInfo.Tracks; | |
35493 | 884 stop = True; |
34387 | 885 } |
886 | |
887 break; | |
888 | |
32881 | 889 case STREAMTYPE_DVD: |
890 | |
35570 | 891 if (guiInfo.Chapter++ >= guiInfo.Chapters) { |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
892 guiInfo.Chapter = 1; |
32881 | 893 |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
894 if (++guiInfo.Track > guiInfo.Tracks) { |
35561 | 895 guiInfo.Track = guiInfo.Tracks; |
35560
1a2200a93ea8
Make DVD stop if manually advancing beyond last chapter of last track.
ib
parents:
35528
diff
changeset
|
896 guiInfo.Chapter = guiInfo.Chapters; |
35493 | 897 stop = True; |
32881 | 898 } |
35571
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
899 } else |
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
900 unset = False; |
32881 | 901 |
902 break; | |
903 | |
36429 | 904 case STREAMTYPE_TV: |
905 case STREAMTYPE_DVB: | |
906 | |
907 if (guiInfo.Playing == GUI_PLAY) | |
908 mp_input_queue_cmd(mp_input_parse_cmd("tv_step_channel 1")); | |
909 | |
910 return; | |
911 | |
32881 | 912 default: |
913 | |
34663 | 914 next = listMgr(PLAYLIST_ITEM_GET_NEXT, 0); |
32881 | 915 |
916 if (next) { | |
35452 | 917 uiSetFile(next->path, next->name, STREAMTYPE_FILE); |
35500 | 918 guiInfo.PlaylistNext = !guiInfo.Playing; |
36772
0da6c7ff95d2
Revise code of listMgr() command PLAYLIST_ITEM_GET_POS.
ib
parents:
36762
diff
changeset
|
919 guiInfo.Track = (uintptr_t)listMgr(PLAYLIST_ITEM_GET_POS, next); |
32881 | 920 break; |
921 } | |
922 | |
923 return; | |
924 } | |
925 | |
926 if (stop) | |
35773 | 927 uiEvent(evStop, 0); |
32881 | 928 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
929 if (guiInfo.Playing == GUI_PLAY) |
35773 | 930 uiEvent(evPlay, 0); |
35571
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
931 else if (!stop && !next && unset) |
29761b2b8cb0
Reset media information while changing tracks in stop mode.
ib
parents:
35570
diff
changeset
|
932 uiUnsetMedia(True); |
23077 | 933 } |