Mercurial > mplayer.hg
annotate gui/interface.c @ 33741:962dc701989d
Create new file list.c for list related functions.
Move gaddlist() and greplace() from interface.c to list.c.
author | ib |
---|---|
date | Thu, 07 Jul 2011 10:37:58 +0000 |
parents | 2c02269701bd |
children | e1539e14d60f |
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 |
19 #include <stdlib.h> | |
20 #include <string.h> | |
21 | |
32984 | 22 #include "interface.h" |
23 #include "app.h" | |
24 #include "skin/skin.h" | |
33556 | 25 #include "ui/gmplayer.h" |
26 #include "ui/widgets.h" | |
33741 | 27 #include "util/list.h" |
33739 | 28 #include "util/mem.h" |
33737 | 29 #include "util/string.h" |
23077 | 30 #include "wm/ws.h" |
31 #include "wm/wsxdnd.h" | |
32 | |
33 #include "access_mpcontext.h" | |
32984 | 34 #include "config.h" |
23077 | 35 #include "help_mp.h" |
32984 | 36 #include "input/input.h" |
37 #include "libaf/equalizer.h" | |
33689
8d0290220239
Replace numeric constants for gtkEquChannels array size.
ib
parents:
33688
diff
changeset
|
38 #include "libavutil/common.h" |
32984 | 39 #include "libmpcodecs/dec_audio.h" |
40 #include "libmpcodecs/dec_video.h" | |
41 #include "libmpcodecs/vd.h" | |
42 #include "libmpcodecs/vf.h" | |
33398 | 43 #include "libvo/video_out.h" |
32984 | 44 #include "libvo/x11_common.h" |
45 #include "mixer.h" | |
46 #include "mp_msg.h" | |
32032 | 47 #include "mpcommon.h" |
30536
39a4dd7ec420
Move GUI-related extern declarations to a GUI header file.
diego
parents:
30535
diff
changeset
|
48 #include "mplayer.h" |
32984 | 49 #include "path.h" |
32466
9e627a1793b1
Move font_load.[ch], font_load_ft.c and osd_font.h from libvo to sub.
cigaes
parents:
32461
diff
changeset
|
50 #include "sub/font_load.h" |
32467 | 51 #include "sub/sub.h" |
23077 | 52 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
53 #ifdef CONFIG_DVDREAD |
23077 | 54 #include "stream/stream_dvd.h" |
55 #endif | |
56 | |
33662 | 57 guiInterface_t guiInfo = { |
33664 | 58 .StreamType = STREAMTYPE_DUMMY, |
33663 | 59 .MovieWindow = True, |
33664 | 60 .Balance = 50.0f |
33662 | 61 }; |
23077 | 62 |
32984 | 63 int guiWinID = -1; |
23077 | 64 |
32900 | 65 char *skinName; |
66 char *skinDirInHome; | |
67 char *skinMPlayerDir; | |
68 | |
32984 | 69 plItem *plCurrent = NULL; |
70 plItem *plList = NULL; | |
71 plItem *plLastPlayed = NULL; | |
72 | |
33555 | 73 urlItem *URLList = NULL; |
32984 | 74 |
75 char *fsHistory[fsPersistant_MaxPos] = { NULL, NULL, NULL, NULL, NULL }; | |
76 | |
77 float gtkEquChannels[6][10]; | |
78 | |
33265 | 79 static int initialized; |
80 | |
32984 | 81 void guiInit(void) |
23077 | 82 { |
32984 | 83 int i; |
23077 | 84 |
33530 | 85 mp_msg(MSGT_GPLAYER, MSGL_V, "GUI init.\n"); |
86 | |
32984 | 87 #ifdef CONFIG_DXR3 |
88 if (!gtkDXR3Device) | |
89 gtkDXR3Device = strdup("/dev/em8300-0"); | |
90 #endif | |
32927 | 91 |
32984 | 92 if (stream_cache_size > 0) { |
93 gtkCacheOn = 1; | |
94 gtkCacheSize = stream_cache_size; | |
95 } else if (stream_cache_size == 0) | |
96 gtkCacheOn = 0; | |
97 | |
98 if (autosync && (autosync != gtkAutoSync)) { | |
99 gtkAutoSyncOn = 1; | |
100 gtkAutoSync = autosync; | |
101 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
102 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
103 #ifdef CONFIG_ASS |
32984 | 104 gtkASS.enabled = ass_enabled; |
105 gtkASS.use_margins = ass_use_margins; | |
106 gtkASS.top_margin = ass_top_margin; | |
107 gtkASS.bottom_margin = ass_bottom_margin; | |
23077 | 108 #endif |
109 | |
32984 | 110 gtkInit(); |
111 | |
112 // initialize X | |
33463 | 113 wsXInit(mDisplay); |
32984 | 114 |
115 // load skin | |
116 | |
117 skinDirInHome = get_path("skins"); | |
118 skinMPlayerDir = MPLAYER_DATADIR "/skins"; | |
119 | |
33530 | 120 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] skin directory #1: %s\n", skinDirInHome); |
121 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] skin directory #2: %s\n", skinMPlayerDir); | |
32984 | 122 |
123 if (!skinName) | |
124 skinName = strdup("default"); | |
125 | |
126 i = skinRead(skinName); | |
127 | |
128 if (i == -1 && strcmp(skinName, "default") != 0) { | |
129 mp_msg(MSGT_GPLAYER, MSGL_WARN, MSGTR_SKIN_SKINCFG_SelectedSkinNotFound, skinName); | |
130 | |
131 skinName = strdup("default"); | |
132 i = skinRead(skinName); | |
133 } | |
134 | |
135 switch (i) { | |
136 case -1: | |
33024 | 137 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_SKIN_SKINCFG_SkinNotFound, skinName); |
33263 | 138 guiExit(EXIT_ERROR); |
23077 | 139 |
32984 | 140 case -2: |
33025 | 141 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_SKIN_SKINCFG_SkinCfgError, skinName); |
33263 | 142 guiExit(EXIT_ERROR); |
32984 | 143 } |
144 | |
145 // initialize windows | |
146 | |
33555 | 147 mainDrawBuffer = malloc(guiApp.main.Bitmap.ImageSize); |
32984 | 148 |
33555 | 149 if (!mainDrawBuffer) { |
33024 | 150 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_NEMDB); |
33263 | 151 guiExit(EXIT_ERROR); |
32984 | 152 } |
23077 | 153 |
32984 | 154 if (gui_save_pos) { |
33218
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33053
diff
changeset
|
155 if (gui_main_pos_x != -3) |
33555 | 156 guiApp.main.x = gui_main_pos_x; |
33218
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33053
diff
changeset
|
157 if (gui_main_pos_y != -3) |
33555 | 158 guiApp.main.y = gui_main_pos_y; |
33218
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33053
diff
changeset
|
159 if (gui_sub_pos_x != -3) |
33555 | 160 guiApp.sub.x = gui_sub_pos_x; |
33218
f0c2a62e3e89
Position windows initially at coordinates given in skin file.
ib
parents:
33053
diff
changeset
|
161 if (gui_sub_pos_y != -3) |
33555 | 162 guiApp.sub.y = gui_sub_pos_y; |
32984 | 163 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
164 |
32984 | 165 if (WinID > 0) { |
33555 | 166 guiApp.subWindow.Parent = WinID; |
167 guiApp.sub.x = 0; | |
168 guiApp.sub.y = 0; | |
32984 | 169 } |
23077 | 170 |
32984 | 171 if (guiWinID >= 0) |
33555 | 172 guiApp.mainWindow.Parent = guiWinID; |
23077 | 173 |
33555 | 174 wsCreateWindow(&guiApp.subWindow, guiApp.sub.x, guiApp.sub.y, guiApp.sub.width, guiApp.sub.height, wsNoBorder, wsShowMouseCursor | wsHandleMouseButton | wsHandleMouseMove, wsShowFrame | wsHideWindow, "MPlayer - Video"); |
175 wsDestroyImage(&guiApp.subWindow); | |
176 wsCreateImage(&guiApp.subWindow, guiApp.sub.Bitmap.Width, guiApp.sub.Bitmap.Height); | |
177 wsXDNDMakeAwareness(&guiApp.subWindow); | |
32984 | 178 |
33555 | 179 uiMenuInit(); |
180 uiPlaybarInit(); | |
23077 | 181 |
182 // i=wsHideFrame|wsMaxSize|wsHideWindow; | |
33555 | 183 // if ( guiApp.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow; |
32984 | 184 i = wsShowFrame | wsMaxSize | wsHideWindow; |
33555 | 185 wsCreateWindow(&guiApp.mainWindow, guiApp.main.x, guiApp.main.y, guiApp.main.width, guiApp.main.height, wsNoBorder, wsShowMouseCursor | wsHandleMouseButton | wsHandleMouseMove, i, "MPlayer"); |
186 wsSetShape(&guiApp.mainWindow, guiApp.main.Mask.Image); | |
187 wsXDNDMakeAwareness(&guiApp.mainWindow); | |
23077 | 188 |
33530 | 189 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] screen depth: %d\n", wsDepthOnScreen); |
33555 | 190 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] mainWindow ID: 0x%x\n", (int)guiApp.mainWindow.WindowID); |
191 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] subWindow ID: 0x%x\n", (int)guiApp.subWindow.WindowID); | |
23077 | 192 |
33555 | 193 guiApp.mainWindow.ReDraw = (void *)uiMainDraw; |
194 guiApp.mainWindow.MouseHandler = uiMainMouseHandle; | |
195 guiApp.mainWindow.KeyHandler = uiMainKeyHandle; | |
196 guiApp.mainWindow.DandDHandler = uiDandDHandler; | |
32984 | 197 |
33555 | 198 guiApp.subWindow.ReDraw = (void *)uiSubDraw; |
199 guiApp.subWindow.MouseHandler = uiSubMouseHandle; | |
200 guiApp.subWindow.KeyHandler = uiMainKeyHandle; | |
201 guiApp.subWindow.DandDHandler = uiDandDHandler; | |
23077 | 202 |
33555 | 203 wsSetBackgroundRGB(&guiApp.subWindow, guiApp.sub.R, guiApp.sub.G, guiApp.sub.B); |
204 wsClearWindow(guiApp.subWindow); | |
23077 | 205 |
33555 | 206 if (guiApp.sub.Bitmap.Image) |
207 wsConvert(&guiApp.subWindow, guiApp.sub.Bitmap.Image); | |
32984 | 208 |
33555 | 209 btnModify(evSetVolume, guiInfo.Volume); |
210 btnModify(evSetBalance, guiInfo.Balance); | |
211 btnModify(evSetMoviePosition, guiInfo.Position); | |
23077 | 212 |
33555 | 213 wsSetIcon(wsDisplay, guiApp.mainWindow.WindowID, &guiIcon); |
214 wsSetIcon(wsDisplay, guiApp.subWindow.WindowID, &guiIcon); | |
32984 | 215 |
33555 | 216 if (!guiApp.mainDecoration) |
217 wsWindowDecoration(&guiApp.mainWindow, 0); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
218 |
33555 | 219 wsVisibleWindow(&guiApp.mainWindow, wsShowWindow); |
23077 | 220 |
221 #if 0 | |
33555 | 222 wsVisibleWindow(&guiApp.subWindow, wsShowWindow); |
32984 | 223 { |
224 XEvent xev; | |
23077 | 225 |
32984 | 226 do |
227 XNextEvent(wsDisplay, &xev); | |
33555 | 228 while (xev.type != MapNotify || xev.xmap.event != guiApp.subWindow.WindowID); |
32984 | 229 |
33555 | 230 guiApp.subWindow.Mapped = wsMapped; |
32984 | 231 } |
232 | |
233 if (!fullscreen) | |
234 fullscreen = gtkLoadFullscreen; | |
23077 | 235 |
32984 | 236 if (fullscreen) { |
33555 | 237 uiFullScreen(); |
32984 | 238 btnModify(evFullScreen, btnPressed); |
239 } | |
240 #else | |
241 if (!fullscreen) | |
242 fullscreen = gtkLoadFullscreen; | |
243 | |
244 if (gtkShowVideoWindow) { | |
33555 | 245 wsVisibleWindow(&guiApp.subWindow, wsShowWindow); |
32984 | 246 { |
247 XEvent xev; | |
248 | |
249 do | |
250 XNextEvent(wsDisplay, &xev); | |
33555 | 251 while (xev.type != MapNotify || xev.xmap.event != guiApp.subWindow.WindowID); |
32984 | 252 |
33555 | 253 guiApp.subWindow.Mapped = wsMapped; |
32984 | 254 } |
23077 | 255 |
32984 | 256 if (fullscreen) { |
33555 | 257 uiFullScreen(); |
32984 | 258 btnModify(evFullScreen, btnPressed); |
259 } | |
260 } else { | |
261 if (fullscreen) { | |
33555 | 262 wsVisibleWindow(&guiApp.subWindow, wsShowWindow); |
32984 | 263 { |
264 XEvent xev; | |
265 | |
266 do | |
267 XNextEvent(wsDisplay, &xev); | |
33555 | 268 while (xev.type != MapNotify || xev.xmap.event != guiApp.subWindow.WindowID); |
32984 | 269 |
33555 | 270 guiApp.subWindow.Mapped = wsMapped; |
32984 | 271 } |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
272 guiInfo.Playing = GUI_PAUSE; // because of !gtkShowVideoWindow... |
33630 | 273 uiFullScreen(); // ...guiInfo.Playing is required |
33609 | 274 wsVisibleWindow(&guiApp.subWindow, wsHideWindow); |
32984 | 275 btnModify(evFullScreen, btnPressed); |
276 } | |
277 } | |
23077 | 278 #endif |
32984 | 279 |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
280 guiInfo.Playing = GUI_STOP; |
33609 | 281 |
33555 | 282 uiSubRender = 1; |
32984 | 283 |
284 if (plCurrent && !filename) | |
33555 | 285 uiSetFileName(plCurrent->path, plCurrent->name, STREAMTYPE_FILE); |
32984 | 286 |
287 if (subdata) | |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
288 setdup(&guiInfo.Subtitlename, subdata->filename); |
32984 | 289 |
290 guiLoadFont(); | |
33265 | 291 |
292 initialized = 1; | |
23077 | 293 } |
294 | |
32984 | 295 void guiDone(void) |
23077 | 296 { |
33307 | 297 if (initialized) { |
33555 | 298 uiMainRender = 0; |
32984 | 299 |
33308 | 300 if (gui_save_pos) { |
33555 | 301 gui_main_pos_x = guiApp.mainWindow.X; |
302 gui_main_pos_y = guiApp.mainWindow.Y; | |
303 gui_sub_pos_x = guiApp.subWindow.X; | |
304 gui_sub_pos_y = guiApp.subWindow.Y; | |
33308 | 305 } |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
306 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
307 #ifdef CONFIG_ASS |
33308 | 308 ass_enabled = gtkASS.enabled; |
309 ass_use_margins = gtkASS.use_margins; | |
310 ass_top_margin = gtkASS.top_margin; | |
311 ass_bottom_margin = gtkASS.bottom_margin; | |
23077 | 312 #endif |
313 | |
33308 | 314 cfg_write(); |
315 wsXDone(); | |
33307 | 316 } |
33263 | 317 |
33307 | 318 appFreeStruct(); |
33542 | 319 free(guiIcon.collection); |
33307 | 320 |
321 if (gui_conf) { | |
322 m_config_free(gui_conf); | |
323 gui_conf = NULL; | |
324 } | |
33530 | 325 |
326 mp_msg(MSGT_GPLAYER, MSGL_V, "GUI done.\n"); | |
33263 | 327 } |
328 | |
33309 | 329 void guiExit(enum exit_reason how) |
33263 | 330 { |
33307 | 331 exit_player_with_rc(how, how >= EXIT_ERROR); |
23077 | 332 } |
333 | |
32984 | 334 void guiLoadFont(void) |
23077 | 335 { |
27393 | 336 #ifdef CONFIG_FREETYPE |
32984 | 337 load_font_ft(vo_image_width, vo_image_height, &vo_font, font_name, osd_font_scale_factor); |
23077 | 338 #else |
32984 | 339 if (vo_font) { |
340 int i; | |
341 | |
342 free(vo_font->name); | |
343 free(vo_font->fpath); | |
344 | |
345 for (i = 0; i < 16; i++) { | |
346 if (vo_font->pic_a[i]) { | |
347 free(vo_font->pic_a[i]->bmp); | |
348 free(vo_font->pic_a[i]->pal); | |
349 } | |
350 } | |
351 | |
352 for (i = 0; i < 16; i++) { | |
353 if (vo_font->pic_b[i]) { | |
354 free(vo_font->pic_b[i]->bmp); | |
355 free(vo_font->pic_b[i]->pal); | |
356 } | |
357 } | |
358 | |
359 free(vo_font); | |
360 vo_font = NULL; | |
361 } | |
362 | |
363 if (font_name) { | |
364 vo_font = read_font_desc(font_name, font_factor, 0); | |
365 | |
366 if (!vo_font) | |
33530 | 367 gmp_msg(MSGT_GPLAYER, MSGL_ERR, MSGTR_CantLoadFont, font_name); |
32984 | 368 } else { |
369 font_name = gstrdup(get_path("font/font.desc")); | |
370 vo_font = read_font_desc(font_name, font_factor, 0); | |
371 | |
372 if (!vo_font) { | |
33739 | 373 nfree(font_name); |
32984 | 374 font_name = gstrdup(MPLAYER_DATADIR "/font/font.desc"); |
375 vo_font = read_font_desc(font_name, font_factor, 0); | |
376 } | |
377 } | |
23077 | 378 #endif |
379 } | |
380 | |
32984 | 381 void guiLoadSubtitle(char *name) |
23077 | 382 { |
33555 | 383 if (guiInfo.Playing == 0) { |
384 guiInfo.SubtitleChanged = 1; // what is this for? (mw) | |
32984 | 385 return; |
23077 | 386 } |
32984 | 387 |
388 if (subdata) { | |
389 mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_DeletingSubtitles); | |
390 | |
391 sub_free(subdata); | |
392 subdata = NULL; | |
393 vo_sub = NULL; | |
394 | |
395 if (vo_osd_list) { | |
396 int len; | |
397 mp_osd_obj_t *osd; | |
398 | |
399 osd = vo_osd_list; | |
400 | |
401 while (osd) { | |
402 if (osd->type == OSDTYPE_SUBTITLE) | |
403 break; | |
404 | |
405 osd = osd->next; | |
406 } | |
23077 | 407 |
32984 | 408 if (osd && (osd->flags & OSDFLAG_VISIBLE)) { |
409 len = osd->stride * (osd->bbox.y2 - osd->bbox.y1); | |
410 memset(osd->bitmap_buffer, 0, len); | |
411 memset(osd->alpha_buffer, 0, len); | |
412 } | |
413 } | |
414 } | |
415 | |
416 if (name) { | |
417 mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_LoadingSubtitles, name); | |
418 | |
33555 | 419 subdata = sub_read_file(name, guiInfo.FPS); |
32984 | 420 |
421 if (!subdata) | |
33530 | 422 gmp_msg(MSGT_GPLAYER, MSGL_ERR, MSGTR_CantLoadSub, name); |
32984 | 423 |
424 sub_name = (malloc(2 * sizeof(char *))); // when mplayer will be restarted | |
425 sub_name[0] = strdup(name); // sub_name[0] will be read | |
426 sub_name[1] = NULL; | |
427 } | |
428 | |
429 update_set_of_subtitles(); | |
23077 | 430 } |
431 | |
32984 | 432 static void add_vf(char *str) |
23077 | 433 { |
32984 | 434 void *p; |
435 | |
436 if (vf_settings) { | |
437 int i = 0; | |
438 | |
439 while (vf_settings[i].name) { | |
440 if (!gstrcmp(vf_settings[i++].name, str)) { | |
441 i = -1; | |
442 break; | |
443 } | |
444 } | |
445 | |
446 if (i != -1) { | |
447 p = realloc(vf_settings, (i + 2) * sizeof(m_obj_settings_t)); | |
32712 | 448 |
32984 | 449 if (!p) |
450 return; | |
451 | |
452 vf_settings = p; | |
453 vf_settings[i].name = strdup(str); | |
454 vf_settings[i].attribs = NULL; | |
455 vf_settings[i + 1].name = NULL; | |
456 } | |
457 } else { | |
458 vf_settings = malloc(2 * sizeof(m_obj_settings_t)); | |
459 vf_settings[0].name = strdup(str); | |
460 vf_settings[0].attribs = NULL; | |
461 vf_settings[1].name = NULL; | |
32712 | 462 } |
463 | |
33530 | 464 mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_AddingVideoFilter, str); |
23077 | 465 } |
466 | |
33726 | 467 int gui(int what, void *arg) |
23077 | 468 { |
32984 | 469 mixer_t *mixer = NULL; |
33685
ca6c9a80a062
Make assignments to variables in guiGetEvent() only if needed.
ib
parents:
33683
diff
changeset
|
470 stream_t *stream; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
471 #ifdef CONFIG_DVDREAD |
33687 | 472 dvd_priv_t *dvd; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
473 #endif |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
474 plItem *next; |
23077 | 475 |
33555 | 476 if (guiInfo.mpcontext) |
477 mixer = mpctx_get_mixer(guiInfo.mpcontext); | |
23077 | 478 |
33726 | 479 switch (what) { |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
480 case GUI_SET_CONTEXT: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
481 guiInfo.mpcontext = arg; |
23077 | 482 break; |
32984 | 483 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
484 case GUI_SET_STATE: |
32984 | 485 |
486 switch ((int)arg) { | |
33631 | 487 case GUI_STOP: |
33614 | 488 case GUI_PLAY: |
33555 | 489 // if ( !gtkShowVideoWindow ) wsVisibleWindow( &guiApp.subWindow,wsHideWindow ); |
33614 | 490 case GUI_PAUSE: |
33631 | 491 guiInfo.Playing = (int)arg; |
32984 | 492 break; |
493 } | |
494 | |
33555 | 495 uiState(); |
23077 | 496 break; |
32984 | 497 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
498 case GUI_SET_FILE: |
32984 | 499 |
33555 | 500 // if ( guiInfo.Playing == 1 && guiInfo.FilenameChanged ) |
501 if (guiInfo.FilenameChanged) { | |
32984 | 502 audio_id = -1; |
503 video_id = -1; | |
504 dvdsub_id = -1; | |
505 vobsub_id = -1; | |
506 stream_cache_size = -1; | |
507 autosync = 0; | |
508 dvd_title = 0; | |
509 force_fps = 0; | |
510 } | |
511 | |
33555 | 512 guiInfo.sh_video = NULL; |
513 wsPostRedisplay(&guiApp.subWindow); | |
32984 | 514 |
515 break; | |
516 | |
33732 | 517 case GUI_HANDLE_EVENTS: |
518 if (!guiInfo.Playing || !guiInfo.MovieWindow) | |
519 wsHandleEvents(); | |
520 gtkEventHandling(); | |
521 break; | |
522 | |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
523 case GUI_RUN_COMMAND: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
524 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
525 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] GUI_RUN_COMMAND: %d\n", (int)arg); |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
526 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
527 switch ((int)arg) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
528 case MP_CMD_VO_FULLSCREEN: |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
529 uiEventHandling(evFullScreen, 0); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
530 break; |
33696
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
531 |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
532 case MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
533 uiEventHandling(evNext, 0); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
534 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
535 |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
536 case -MP_CMD_PLAY_TREE_STEP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
537 uiEventHandling(evPrev, 0); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
538 break; |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
539 |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
540 case MP_CMD_STOP: |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
541 uiEventHandling(evStop, 0); |
24d919fb6778
Don't let MPlayer directly call user interface functions.
ib
parents:
33695
diff
changeset
|
542 break; |
33697 | 543 |
544 case MP_CMD_QUIT: | |
545 uiEventHandling(evExit, 0); | |
546 break; | |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
547 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
548 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
549 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
550 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
551 case GUI_PREPARE: |
32984 | 552 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
553 gui(GUI_SET_FILE, 0); |
32984 | 554 |
33555 | 555 switch (guiInfo.StreamType) { |
32984 | 556 case STREAMTYPE_PLAYLIST: |
557 break; | |
558 | |
559 #ifdef CONFIG_VCD | |
560 case STREAMTYPE_VCD: | |
561 { | |
562 char tmp[512]; | |
563 | |
33555 | 564 sprintf(tmp, "vcd://%d", guiInfo.Track + 1); |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
565 setdup(&guiInfo.Filename, tmp); |
32984 | 566 } |
567 break; | |
568 #endif | |
569 | |
570 #ifdef CONFIG_DVDREAD | |
571 case STREAMTYPE_DVD: | |
572 { | |
573 char tmp[512]; | |
574 | |
33555 | 575 sprintf(tmp, "dvd://%d", guiInfo.Title); |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
576 setdup(&guiInfo.Filename, tmp); |
32984 | 577 } |
578 | |
33555 | 579 dvd_chapter = guiInfo.Chapter; |
580 dvd_angle = guiInfo.Angle; | |
32984 | 581 |
582 break; | |
583 #endif | |
584 } | |
585 | |
33555 | 586 // if ( guiInfo.StreamType != STREAMTYPE_PLAYLIST ) // Does not make problems anymore! |
32984 | 587 { |
33555 | 588 if (guiInfo.Filename) |
589 filename = gstrdup(guiInfo.Filename); | |
32984 | 590 else if (filename) |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
591 setdup(&guiInfo.Filename, filename); |
32984 | 592 } |
593 | |
594 // video opts | |
595 | |
596 if (!video_driver_list) { | |
597 int i = 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
598 |
32984 | 599 while (video_out_drivers[i++]) { |
600 if (video_out_drivers[i - 1]->control(VOCTRL_GUISUPPORT, NULL) == VO_TRUE) { | |
601 gaddlist(&video_driver_list, (char *)video_out_drivers[i - 1]->info->short_name); | |
602 break; | |
603 } | |
604 } | |
605 } | |
606 | |
607 if (!video_driver_list && !video_driver_list[0]) { | |
33024 | 608 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, MSGTR_IDFGCVD); |
33263 | 609 guiExit(EXIT_ERROR); |
32984 | 610 } |
611 | |
612 { | |
613 int i = 0; | |
614 | |
33655 | 615 guiInfo.MovieWindow = True; |
32984 | 616 |
617 while (video_out_drivers[i++]) { | |
618 if (video_out_drivers[i - 1]->control(VOCTRL_GUISUPPORT, NULL) == VO_TRUE) { | |
619 if ((video_driver_list && !gstrcmp(video_driver_list[0], (char *)video_out_drivers[i - 1]->info->short_name)) && (video_out_drivers[i - 1]->control(VOCTRL_GUI_NOWINDOW, NULL) == VO_TRUE)) { | |
33655 | 620 guiInfo.MovieWindow = False; |
32984 | 621 break; |
622 } | |
623 } | |
624 } | |
625 } | |
626 | |
627 #ifdef CONFIG_DXR3 | |
628 if (video_driver_list && !gstrcmp(video_driver_list[0], "dxr3")) | |
33555 | 629 if (guiInfo.StreamType != STREAMTYPE_DVD && guiInfo.StreamType != STREAMTYPE_VCD) |
32984 | 630 if (gtkVfLAVC) |
631 add_vf("lavc"); | |
632 #endif | |
633 | |
634 if (gtkVfPP) | |
635 add_vf("pp"); | |
636 | |
637 // audio opts | |
638 | |
639 // if ( ao_plugin_cfg.plugin_list ) { free( ao_plugin_cfg.plugin_list ); ao_plugin_cfg.plugin_list=NULL; } | |
640 if (gtkAONorm) | |
641 greplace(&af_cfg.list, "volnorm", "volnorm"); | |
642 | |
643 if (gtkEnableAudioEqualizer) | |
644 greplace(&af_cfg.list, "equalizer", "equalizer"); | |
645 | |
646 if (gtkAOExtraStereo) { | |
647 char *name; | |
648 | |
649 name = malloc(12 + 20 + 1); | |
650 snprintf(name, 12 + 20, "extrastereo=%f", gtkAOExtraStereoMul); | |
651 name[12 + 20] = 0; | |
652 greplace(&af_cfg.list, "extrastereo", name); | |
653 free(name); | |
654 } | |
655 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
656 #ifdef CONFIG_OSS_AUDIO |
32984 | 657 if (audio_driver_list && !gstrncmp(audio_driver_list[0], "oss", 3)) { |
658 char *tmp; | |
659 | |
660 mixer_device = gtkAOOSSMixer; | |
661 mixer_channel = gtkAOOSSMixerChannel; | |
662 | |
663 if (gtkAOOSSDevice) { | |
664 tmp = calloc(1, strlen(gtkAOOSSDevice) + 7); | |
665 sprintf(tmp, "oss:%s", gtkAOOSSDevice); | |
666 } else | |
667 tmp = strdup("oss"); | |
668 | |
669 gaddlist(&audio_driver_list, tmp); | |
670 free(tmp); | |
671 } | |
23077 | 672 #endif |
32984 | 673 |
27390
9d95dc936e66
Introduce CONFIG_ALSA preprocessor directive for ALSA 0.9 and 1.x.
diego
parents:
27387
diff
changeset
|
674 #ifdef CONFIG_ALSA |
32984 | 675 if (audio_driver_list && !gstrncmp(audio_driver_list[0], "alsa", 4)) { |
676 char *tmp; | |
677 | |
678 mixer_device = gtkAOALSAMixer; | |
679 mixer_channel = gtkAOALSAMixerChannel; | |
680 | |
681 if (gtkAOALSADevice) { | |
682 tmp = calloc(1, strlen(gtkAOALSADevice) + 14); | |
683 sprintf(tmp, "alsa:device=%s", gtkAOALSADevice); | |
684 } else | |
685 tmp = strdup("alsa"); | |
686 | |
687 gaddlist(&audio_driver_list, tmp); | |
688 free(tmp); | |
689 } | |
23077 | 690 #endif |
32984 | 691 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27359
diff
changeset
|
692 #ifdef CONFIG_SDL |
32984 | 693 if (audio_driver_list && !gstrncmp(audio_driver_list[0], "sdl", 3)) { |
694 char *tmp; | |
695 | |
696 if (gtkAOSDLDriver) { | |
697 tmp = calloc(1, strlen(gtkAOSDLDriver) + 10); | |
698 sprintf(tmp, "sdl:%s", gtkAOSDLDriver); | |
699 } else | |
700 tmp = strdup("sdl"); | |
701 | |
702 gaddlist(&audio_driver_list, tmp); | |
703 free(tmp); | |
704 } | |
23077 | 705 #endif |
32984 | 706 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
707 #ifdef CONFIG_ESD |
32984 | 708 if (audio_driver_list && !gstrncmp(audio_driver_list[0], "esd", 3)) { |
709 char *tmp; | |
710 | |
711 if (gtkAOESDDevice) { | |
712 tmp = calloc(1, strlen(gtkAOESDDevice) + 10); | |
713 sprintf(tmp, "esd:%s", gtkAOESDDevice); | |
714 } else | |
715 tmp = strdup("esd"); | |
716 | |
717 gaddlist(&audio_driver_list, tmp); | |
718 free(tmp); | |
719 } | |
23077 | 720 #endif |
32984 | 721 |
722 // subtitle | |
723 | |
33555 | 724 // subdata->filename=gstrdup( guiInfo.Subtitlename ); |
32984 | 725 stream_dump_type = 0; |
726 | |
727 if (gtkSubDumpMPSub) | |
728 stream_dump_type = 4; | |
729 | |
730 if (gtkSubDumpSrt) | |
731 stream_dump_type = 6; | |
732 | |
733 gtkSubDumpMPSub = gtkSubDumpSrt = 0; | |
23077 | 734 guiLoadFont(); |
735 | |
32984 | 736 // misc |
737 | |
738 if (gtkCacheOn) | |
739 stream_cache_size = gtkCacheSize; | |
740 | |
741 if (gtkAutoSyncOn) | |
742 autosync = gtkAutoSync; | |
23077 | 743 |
33555 | 744 if (guiInfo.AudioFile) |
745 audio_stream = gstrdup(guiInfo.AudioFile); | |
746 else if (guiInfo.FilenameChanged) | |
33739 | 747 nfree(audio_stream); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
748 |
32984 | 749 // audio_stream = NULL; |
750 | |
33555 | 751 guiInfo.DiskChanged = 0; |
752 guiInfo.FilenameChanged = 0; | |
753 guiInfo.NewPlay = 0; | |
23077 | 754 |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
755 #ifdef CONFIG_ASS |
32984 | 756 ass_enabled = gtkASS.enabled; |
757 ass_use_margins = gtkASS.use_margins; | |
758 ass_top_margin = gtkASS.top_margin; | |
23077 | 759 ass_bottom_margin = gtkASS.bottom_margin; |
760 #endif | |
761 | |
32984 | 762 break; |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
763 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
764 case GUI_SET_STREAM: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
765 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
766 stream = arg; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
767 guiInfo.StreamType = stream->type; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
768 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
769 switch (guiInfo.StreamType) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
770 #ifdef CONFIG_DVDREAD |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
771 case STREAMTYPE_DVD: |
33730 | 772 dvd = stream->priv; |
773 guiInfo.DVD.titles = dvd->vmg_file->tt_srpt->nr_of_srpts; | |
774 guiInfo.DVD.chapters = dvd->vmg_file->tt_srpt->title[dvd_title].nr_of_ptts; | |
775 guiInfo.DVD.angles = dvd->vmg_file->tt_srpt->title[dvd_title].nr_of_angles; | |
776 guiInfo.DVD.nr_of_audio_channels = dvd->nr_of_channels; | |
777 memcpy(guiInfo.DVD.audio_streams, dvd->audio_streams, sizeof(dvd->audio_streams)); | |
778 guiInfo.DVD.nr_of_subtitles = dvd->nr_of_subtitles; | |
779 memcpy(guiInfo.DVD.subtitles, dvd->subtitles, sizeof(dvd->subtitles)); | |
780 guiInfo.DVD.current_title = dvd_title + 1; | |
781 guiInfo.DVD.current_chapter = dvd_chapter + 1; | |
782 guiInfo.DVD.current_angle = dvd_angle + 1; | |
783 guiInfo.Track = dvd_title + 1; | |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
784 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
785 #endif |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
786 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
787 #ifdef CONFIG_VCD |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
788 case STREAMTYPE_VCD: |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
789 guiInfo.VCDTracks = 0; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
790 stream_control(stream, STREAM_CTRL_GET_NUM_CHAPTERS, &guiInfo.VCDTracks); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
791 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
792 #endif |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
793 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
794 default: |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
795 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
796 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
797 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
798 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
799 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
800 case GUI_SET_AFILTER: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
801 guiInfo.afilter = arg; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
802 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
803 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
804 case GUI_SET_VIDEO: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
805 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
806 // video |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
807 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
808 guiInfo.sh_video = arg; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
809 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
810 if (arg) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
811 sh_video_t *sh = arg; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
812 guiInfo.FPS = sh->fps; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
813 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
814 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
815 if (guiInfo.StreamType == STREAMTYPE_STREAM) |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
816 btnSet(evSetMoviePosition, btnDisabled); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
817 else |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
818 btnSet(evSetMoviePosition, btnReleased); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
819 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
820 #ifdef CONFIG_DXR3 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
821 if (video_driver_list && !gstrcmp(video_driver_list[0], "dxr3") && (((demuxer_t *)mpctx_get_demuxer(guiInfo.mpcontext))->file_format != DEMUXER_TYPE_MPEG_PS) && !gtkVfLAVC) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
822 gtkMessageBox(GTK_MB_FATAL, MSGTR_NEEDLAVC); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
823 return False; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
824 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
825 #endif |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
826 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
827 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
828 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
829 case GUI_SET_AUDIO: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
830 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
831 guiInfo.AudioChannels = arg ? ((sh_audio_t *)arg)->channels : 0; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
832 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
833 if (arg && !guiInfo.sh_video) |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
834 guiInfo.MovieWindow = False; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
835 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
836 gui(GUI_SET_MIXER, 0); |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
837 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
838 if (gtkEnableAudioEqualizer) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
839 equalizer_t eq; |
33693
006a2db8bd55
Use unsigned index variable for comparison with array size.
ib
parents:
33692
diff
changeset
|
840 unsigned int i, j; |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
841 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
842 for (i = 0; i < FF_ARRAY_ELEMS(gtkEquChannels); i++) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
843 for (j = 0; j < FF_ARRAY_ELEMS(*gtkEquChannels); j++) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
844 eq.channel = i; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
845 eq.band = j; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
846 eq.gain = gtkEquChannels[i][j]; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
847 gtkSet(gtkSetEqualizer, 0, &eq); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
848 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
849 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
850 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
851 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
852 wsVisibleWindow(&guiApp.subWindow, (guiInfo.MovieWindow ? wsShowWindow : wsHideWindow)); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
853 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
854 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
855 case GUI_SET_MIXER: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
856 if (mixer) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
857 float l, r; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
858 static float last_balance = -1; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
859 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
860 mixer_getvolume(mixer, &l, &r); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
861 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
862 guiInfo.Volume = FFMAX(l, r); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
863 btnModify(evSetVolume, guiInfo.Volume); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
864 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
865 if (guiInfo.Balance != last_balance) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
866 if (guiInfo.Volume) |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
867 guiInfo.Balance = ((r - l) / guiInfo.Volume + 1.0) * 50.0; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
868 else |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
869 guiInfo.Balance = 50.0f; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
870 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
871 last_balance = guiInfo.Balance; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
872 btnModify(evSetBalance, guiInfo.Balance); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
873 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
874 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
875 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
876 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
877 case GUI_REDRAW: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
878 uiEventHandling(evRedraw, 0); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
879 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
880 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
881 case GUI_SETUP_VIDEO_WINDOW: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
882 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
883 if (!guiApp.subWindow.isFullScreen) { |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
884 wsResizeWindow(&guiApp.subWindow, vo_dwidth, vo_dheight); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
885 wsMoveWindow(&guiApp.subWindow, True, guiApp.sub.x, guiApp.sub.y); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
886 } |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
887 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
888 guiInfo.MovieWidth = vo_dwidth; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
889 guiInfo.MovieHeight = vo_dheight; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
890 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
891 if (guiWinID >= 0) |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
892 wsMoveWindow(&guiApp.mainWindow, False, 0, vo_dheight); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
893 |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
894 WinID = guiApp.subWindow.WindowID; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
895 break; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
896 |
33733 | 897 case GUI_HANDLE_X_EVENT: |
33692
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
898 guiInfo.event_struct = arg; |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
899 wsEvents(wsDisplay, arg); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
900 gtkEventHandling(); |
0e9a5c0194ed
Cosmetic: Arrange guiGetEvent() types in the sequence they are called.
ib
parents:
33691
diff
changeset
|
901 break; |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
902 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
903 case GUI_END_FILE: |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
904 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
905 if (!uiGotoTheNext && guiInfo.Playing) { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
906 uiGotoTheNext = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
907 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
908 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
909 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
910 if (guiInfo.Playing && (next = gtkSet(gtkGetNextPlItem, 0, NULL)) && (plLastPlayed != next)) { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
911 plLastPlayed = next; |
33740
2c02269701bd
Remove macros guiSetFilename() and guiSetDF() from interface.h.
ib
parents:
33739
diff
changeset
|
912 setddup(&guiInfo.Filename, next->path, next->name); |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
913 guiInfo.StreamType = STREAMTYPE_FILE; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
914 guiInfo.FilenameChanged = guiInfo.NewPlay = 1; |
33739 | 915 nfree(guiInfo.AudioFile); |
916 nfree(guiInfo.Subtitlename); | |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
917 } else { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
918 if (guiInfo.FilenameChanged || guiInfo.NewPlay) |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
919 break; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
920 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
921 guiInfo.TimeSec = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
922 guiInfo.Position = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
923 guiInfo.AudioChannels = 0; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
924 guiInfo.MovieWindow = True; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
925 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
926 #ifdef CONFIG_DVDREAD |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
927 guiInfo.DVD.current_title = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
928 guiInfo.DVD.current_chapter = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
929 guiInfo.DVD.current_angle = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
930 #endif |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
931 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
932 if (!guiApp.subWindow.isFullScreen && gtkShowVideoWindow) { |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
933 wsResizeWindow(&guiApp.subWindow, guiApp.sub.width, guiApp.sub.height); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
934 wsMoveWindow(&guiApp.subWindow, True, guiApp.sub.x, guiApp.sub.y); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
935 } else |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
936 wsVisibleWindow(&guiApp.subWindow, wsHideWindow); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
937 |
33731
81f71d910333
Cosmetic: Change prefix for symbolic constants from GMP to GUI.
ib
parents:
33730
diff
changeset
|
938 gui(GUI_SET_STATE, (void *)GUI_STOP); |
33694
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
939 uiSubRender = 1; |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
940 wsSetBackgroundRGB(&guiApp.subWindow, guiApp.sub.R, guiApp.sub.G, guiApp.sub.B); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
941 wsClearWindow(guiApp.subWindow); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
942 wsPostRedisplay(&guiApp.subWindow); |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
943 } |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
944 |
45553d0f65c6
Don't let MPlayer directly call user interface functions.
ib
parents:
33693
diff
changeset
|
945 break; |
32984 | 946 } |
947 | |
33666
0f592e8530f1
Change return code of guiGetEvent() to indicate success.
ib
parents:
33664
diff
changeset
|
948 return True; |
23077 | 949 } |
950 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
951 // --- |
32984 | 952 #if defined(MP_DEBUG) && 0 |
953 void list(void) | |
954 { | |
955 plItem *next = plList; | |
23077 | 956 |
32984 | 957 printf("--- list ---\n"); |
23077 | 958 |
32984 | 959 while (next || next->next) { |
960 printf("item: %s/%s\n", next->path, next->name); | |
961 | |
962 if (next->next) | |
963 next = next->next; | |
964 else | |
965 break; | |
966 } | |
967 | |
968 printf("--- end of list ---\n"); | |
23077 | 969 } |
970 #else | |
971 #define list(); | |
972 #endif | |
973 | |
32984 | 974 void *gtkSet(int cmd, float fparam, void *vparam) |
23077 | 975 { |
32984 | 976 equalizer_t *eq = (equalizer_t *)vparam; |
977 plItem *item = (plItem *)vparam; | |
33555 | 978 urlItem *url_item = (urlItem *)vparam; |
32984 | 979 int is_added = True; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
980 |
32984 | 981 switch (cmd) { |
982 // handle playlist | |
983 | |
984 // add item to playlist | |
985 case gtkAddPlItem: | |
23077 | 986 |
32984 | 987 if (plList) { |
988 plItem *next = plList; | |
989 | |
990 while (next->next) | |
991 // { | |
992 // printf( "%s\n",next->name ); | |
993 next = next->next; | |
994 // } | |
995 | |
996 next->next = item; | |
997 item->prev = next; | |
33475
b1bda1dded08
When adding a playlist item, preventively set its next pointer to NULL.
ib
parents:
33473
diff
changeset
|
998 item->next = NULL; |
32984 | 999 } else { |
1000 item->prev = item->next = NULL; | |
1001 plCurrent = plList = item; | |
1002 } | |
1003 | |
23077 | 1004 list(); |
33053 | 1005 |
23077 | 1006 return NULL; |
32984 | 1007 |
1008 // add item into playlist after current | |
1009 case gtkInsertPlItem: | |
1010 if (plCurrent) { | |
1011 plItem *curr = plCurrent; | |
1012 item->next = curr->next; | |
1013 | |
1014 if (item->next) | |
1015 item->next->prev = item; | |
1016 | |
1017 item->prev = curr; | |
1018 curr->next = item; | |
1019 plCurrent = plCurrent->next; | |
1020 | |
1021 return plCurrent; | |
1022 } else | |
1023 return gtkSet(gtkAddPlItem, 0, (void *)item); | |
1024 return NULL; // NOTE TO MYSELF: remove this | |
1025 | |
33473 | 1026 // get next item from playlist |
32984 | 1027 case gtkGetNextPlItem: |
1028 if (plCurrent && plCurrent->next) { | |
1029 plCurrent = plCurrent->next; | |
1030 // if (!plCurrent && plList) | |
1031 // { | |
1032 // plItem *next = plList; | |
1033 // | |
1034 // while (next->next) | |
1035 // { | |
1036 // if (!next->next) break; | |
1037 // next = next->next; | |
1038 // } | |
1039 // | |
1040 // plCurrent = next; | |
1041 // } | |
1042 return plCurrent; | |
1043 } | |
33053 | 1044 |
23077 | 1045 return NULL; |
32984 | 1046 |
33473 | 1047 // get previous item from playlist |
32984 | 1048 case gtkGetPrevPlItem: |
1049 if (plCurrent && plCurrent->prev) { | |
1050 plCurrent = plCurrent->prev; | |
1051 // if ( !plCurrent && plList ) plCurrent=plList; | |
1052 return plCurrent; | |
1053 } | |
33053 | 1054 |
23077 | 1055 return NULL; |
32984 | 1056 |
1057 // set current item | |
1058 case gtkSetCurrPlItem: | |
1059 plCurrent = item; | |
1060 return plCurrent; | |
1061 | |
1062 // get current item | |
1063 case gtkGetCurrPlItem: | |
23077 | 1064 return plCurrent; |
32984 | 1065 |
1066 // delete current item | |
1067 case gtkDelCurrPlItem: | |
1068 { | |
1069 plItem *curr = plCurrent; | |
1070 | |
1071 if (!curr) | |
1072 return NULL; | |
23077 | 1073 |
32984 | 1074 if (curr->prev) |
1075 curr->prev->next = curr->next; | |
1076 if (curr->next) | |
1077 curr->next->prev = curr->prev; | |
1078 if (curr == plList) | |
1079 plList = curr->next; | |
1080 | |
1081 plCurrent = curr->next; | |
1082 | |
1083 // free it | |
1084 free(curr->path); | |
1085 free(curr->name); | |
1086 free(curr); | |
1087 } | |
1088 | |
33555 | 1089 uiCurr(); // instead of using uiNext && uiPrev |
33053 | 1090 |
32984 | 1091 return plCurrent; |
1092 | |
1093 // delete list | |
1094 case gtkDelPl: | |
1095 { | |
1096 plItem *curr = plList; | |
1097 plItem *next; | |
1098 | |
1099 if (!plList) | |
1100 return NULL; | |
23077 | 1101 |
32984 | 1102 if (!curr->next) { |
1103 free(curr->path); | |
1104 free(curr->name); | |
1105 free(curr); | |
1106 } else { | |
1107 while (curr->next) { | |
1108 next = curr->next; | |
1109 free(curr->path); | |
1110 free(curr->name); | |
1111 free(curr); | |
1112 curr = next; | |
1113 } | |
1114 } | |
1115 | |
1116 plList = NULL; | |
1117 plCurrent = NULL; | |
1118 } | |
33053 | 1119 |
23077 | 1120 return NULL; |
32984 | 1121 |
1122 // handle url | |
1123 case gtkAddURLItem: | |
1124 if (URLList) { | |
33555 | 1125 urlItem *next_url = URLList; |
32984 | 1126 is_added = False; |
1127 | |
1128 while (next_url->next) { | |
1129 if (!gstrcmp(next_url->url, url_item->url)) { | |
1130 is_added = True; | |
1131 break; | |
1132 } | |
1133 | |
1134 next_url = next_url->next; | |
1135 } | |
1136 | |
1137 if (!is_added && gstrcmp(next_url->url, url_item->url)) | |
1138 next_url->next = url_item; | |
1139 } else { | |
1140 url_item->next = NULL; | |
1141 URLList = url_item; | |
1142 } | |
33053 | 1143 |
23077 | 1144 return NULL; |
32984 | 1145 |
1146 // subtitle | |
1147 | |
27393 | 1148 #ifndef CONFIG_FREETYPE |
32984 | 1149 case gtkSetFontFactor: |
1150 font_factor = fparam; | |
1151 guiLoadFont(); | |
1152 return NULL; | |
23077 | 1153 #else |
32984 | 1154 case gtkSetFontOutLine: |
1155 subtitle_font_thickness = (8.0f / 100.0f) * fparam; | |
1156 guiLoadFont(); | |
1157 return NULL; | |
1158 | |
1159 case gtkSetFontBlur: | |
1160 subtitle_font_radius = (8.0f / 100.0f) * fparam; | |
1161 guiLoadFont(); | |
1162 return NULL; | |
1163 | |
1164 case gtkSetFontTextScale: | |
1165 text_font_scale_factor = fparam; | |
1166 guiLoadFont(); | |
1167 return NULL; | |
1168 | |
1169 case gtkSetFontOSDScale: | |
1170 osd_font_scale_factor = fparam; | |
1171 guiLoadFont(); | |
1172 return NULL; | |
1173 | |
1174 case gtkSetFontEncoding: | |
33739 | 1175 nfree(subtitle_font_encoding); |
32984 | 1176 subtitle_font_encoding = gstrdup((char *)vparam); |
1177 guiLoadFont(); | |
1178 return NULL; | |
1179 | |
1180 case gtkSetFontAutoScale: | |
1181 subtitle_autoscale = (int)fparam; | |
1182 guiLoadFont(); | |
1183 return NULL; | |
23077 | 1184 #endif |
32984 | 1185 |
27393 | 1186 #ifdef CONFIG_ICONV |
32984 | 1187 case gtkSetSubEncoding: |
33739 | 1188 nfree(sub_cp); |
32984 | 1189 sub_cp = gstrdup((char *)vparam); |
1190 break; | |
23077 | 1191 #endif |
32984 | 1192 |
1193 // misc | |
1194 | |
1195 case gtkClearStruct: | |
1196 | |
1197 if ((unsigned int)vparam & guiFilenames) { | |
33739 | 1198 nfree(guiInfo.Filename); |
1199 nfree(guiInfo.Subtitlename); | |
1200 nfree(guiInfo.AudioFile); | |
32984 | 1201 gtkSet(gtkDelPl, 0, NULL); |
1202 } | |
1203 | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
1204 #ifdef CONFIG_DVDREAD |
32984 | 1205 if ((unsigned int)vparam & guiDVD) |
33555 | 1206 memset(&guiInfo.DVD, 0, sizeof(guiDVDStruct)); |
23077 | 1207 #endif |
32984 | 1208 |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27359
diff
changeset
|
1209 #ifdef CONFIG_VCD |
32984 | 1210 if ((unsigned int)vparam & guiVCD) |
33555 | 1211 guiInfo.VCDTracks = 0; |
23077 | 1212 #endif |
32984 | 1213 |
1214 return NULL; | |
1215 | |
1216 case gtkSetExtraStereo: | |
1217 gtkAOExtraStereoMul = fparam; | |
33555 | 1218 if (guiInfo.afilter) |
1219 af_control_any_rev(guiInfo.afilter, AF_CONTROL_ES_MUL | AF_CONTROL_SET, >kAOExtraStereoMul); | |
32984 | 1220 return NULL; |
1221 | |
1222 case gtkSetPanscan: | |
1223 { | |
1224 mp_cmd_t *mp_cmd; | |
1225 | |
1226 mp_cmd = calloc(1, sizeof(*mp_cmd)); | |
1227 mp_cmd->id = MP_CMD_PANSCAN; | |
1228 mp_cmd->name = strdup("panscan"); | |
1229 mp_cmd->args[0].v.f = fparam; | |
1230 mp_cmd->args[1].v.i = 1; | |
1231 mp_input_queue_cmd(mp_cmd); | |
1232 } | |
33053 | 1233 |
23077 | 1234 return NULL; |
32984 | 1235 |
1236 case gtkSetAutoq: | |
1237 auto_quality = (int)fparam; | |
1238 return NULL; | |
1239 | |
1240 // set equalizers | |
1241 | |
1242 case gtkSetContrast: | |
33555 | 1243 if (guiInfo.sh_video) |
1244 set_video_colors(guiInfo.sh_video, "contrast", (int)fparam); | |
32984 | 1245 return NULL; |
1246 | |
1247 case gtkSetBrightness: | |
33555 | 1248 if (guiInfo.sh_video) |
1249 set_video_colors(guiInfo.sh_video, "brightness", (int)fparam); | |
32984 | 1250 return NULL; |
1251 | |
1252 case gtkSetHue: | |
33555 | 1253 if (guiInfo.sh_video) |
1254 set_video_colors(guiInfo.sh_video, "hue", (int)fparam); | |
23077 | 1255 return NULL; |
32984 | 1256 |
1257 case gtkSetSaturation: | |
33555 | 1258 if (guiInfo.sh_video) |
1259 set_video_colors(guiInfo.sh_video, "saturation", (int)fparam); | |
32984 | 1260 return NULL; |
1261 | |
1262 case gtkSetEqualizer: | |
1263 { | |
23077 | 1264 af_control_ext_t tmp; |
32984 | 1265 |
1266 if (eq) { | |
1267 gtkEquChannels[eq->channel][eq->band] = eq->gain; | |
1268 tmp.ch = eq->channel; | |
1269 tmp.arg = gtkEquChannels[eq->channel]; | |
1270 | |
33555 | 1271 if (guiInfo.afilter) |
1272 af_control_any_rev(guiInfo.afilter, AF_CONTROL_EQUALIZER_GAIN | AF_CONTROL_SET, &tmp); | |
32984 | 1273 } else { |
33693
006a2db8bd55
Use unsigned index variable for comparison with array size.
ib
parents:
33692
diff
changeset
|
1274 unsigned int i; |
32984 | 1275 |
1276 memset(gtkEquChannels, 0, sizeof(gtkEquChannels)); | |
1277 | |
33555 | 1278 if (guiInfo.afilter) { |
33689
8d0290220239
Replace numeric constants for gtkEquChannels array size.
ib
parents:
33688
diff
changeset
|
1279 for (i = 0; i < FF_ARRAY_ELEMS(gtkEquChannels); i++) { |
32984 | 1280 tmp.ch = i; |
1281 tmp.arg = gtkEquChannels[i]; | |
33555 | 1282 af_control_any_rev(guiInfo.afilter, AF_CONTROL_EQUALIZER_GAIN | AF_CONTROL_SET, &tmp); |
32984 | 1283 } |
1284 } | |
1285 } | |
1286 | |
1287 return NULL; | |
1288 } | |
1289 } | |
1290 | |
1291 return NULL; | |
23077 | 1292 } |
1293 | |
32984 | 1294 // This function adds/inserts one file into the gui playlist. |
1295 static int import_file_into_gui(char *temp, int insert) | |
1296 { | |
1297 char *filename, *pathname; | |
1298 plItem *item; | |
23077 | 1299 |
32984 | 1300 filename = strdup(mp_basename(temp)); |
1301 pathname = strdup(temp); | |
1302 | |
1303 if (strlen(pathname) - strlen(filename) > 0) | |
1304 pathname[strlen(pathname) - strlen(filename) - 1] = 0; // we have some path, so remove / at end | |
1305 else | |
1306 pathname[strlen(pathname) - strlen(filename)] = 0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
1307 |
33530 | 1308 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[interface] playtree, add: %s/%s\n", pathname, filename); |
32984 | 1309 |
1310 item = calloc(1, sizeof(plItem)); | |
1311 | |
1312 if (!item) | |
1313 return 0; | |
1314 | |
1315 item->name = filename; | |
1316 item->path = pathname; | |
1317 | |
1318 if (insert) | |
1319 gtkSet(gtkInsertPlItem, 0, (void *)item); // inserts the item after current, and makes current=item | |
1320 else | |
1321 gtkSet(gtkAddPlItem, 0, (void *)item); | |
1322 | |
1323 return 1; | |
23077 | 1324 } |
1325 | |
32984 | 1326 // This function imports the initial playtree (based on cmd-line files) |
1327 // into the gui playlist by either: | |
1328 // - overwriting gui pl (enqueue=0) | |
1329 // - appending it to gui pl (enqueue=1) | |
33734 | 1330 int guiInitializePlaylist(play_tree_t *my_playtree, m_config_t *config, int enqueue) |
32984 | 1331 { |
1332 play_tree_iter_t *my_pt_iter = NULL; | |
1333 int result = 0; | |
23077 | 1334 |
32984 | 1335 if (!enqueue) |
1336 gtkSet(gtkDelPl, 0, 0); // delete playlist before "appending" | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
1337 |
32984 | 1338 if ((my_pt_iter = pt_iter_create(&my_playtree, config))) { |
1339 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
1340 // add it to end of list | |
1341 if (import_file_into_gui(filename, 0)) | |
1342 result = 1; | |
23077 | 1343 } |
1344 | |
33555 | 1345 uiCurr(); // update filename |
1346 uiGotoTheNext = 1; | |
23077 | 1347 |
32984 | 1348 if (!enqueue) |
33555 | 1349 filename = guiInfo.Filename; // Backward compatibility; if file is specified on commandline, |
1350 // gmplayer does directly start in Play-Mode. | |
32984 | 1351 else |
1352 filename = NULL; | |
23077 | 1353 |
32984 | 1354 return result; |
23077 | 1355 } |
1356 | |
32984 | 1357 // This function imports and inserts an playtree, that is created "on the fly", |
1358 // for example by parsing some MOV-Reference-File; or by loading an playlist | |
1359 // with "File Open". | |
23077 | 1360 // The file which contained the playlist is thereby replaced with it's contents. |
33734 | 1361 int guiAddPlaylist(play_tree_t *my_playtree, m_config_t *config) |
32984 | 1362 { |
1363 play_tree_iter_t *my_pt_iter = NULL; | |
1364 int result = 0; | |
1365 plItem *save; | |
23077 | 1366 |
32984 | 1367 save = (plItem *)gtkSet(gtkGetCurrPlItem, 0, 0); // save current item |
23077 | 1368 |
32984 | 1369 if ((my_pt_iter = pt_iter_create(&my_playtree, config))) { |
1370 while ((filename = pt_iter_get_next_file(my_pt_iter)) != NULL) | |
1371 // insert it into the list and set plCurrent=new item | |
1372 if (import_file_into_gui(filename, 1)) | |
1373 result = 1; | |
1374 | |
1375 pt_iter_destroy(&my_pt_iter); | |
23077 | 1376 } |
1377 | |
32984 | 1378 if (save) |
1379 gtkSet(gtkSetCurrPlItem, 0, (void *)save); | |
1380 else | |
1381 gtkSet(gtkSetCurrPlItem, 0, (void *)plList); // go to head, if plList was empty before | |
23077 | 1382 |
32984 | 1383 if (save && result) |
1384 gtkSet(gtkDelCurrPlItem, 0, 0); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
1385 |
33555 | 1386 uiCurr(); // update filename |
32984 | 1387 filename = NULL; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
27393
diff
changeset
|
1388 |
32984 | 1389 return result; |
23077 | 1390 } |
33023 | 1391 |
1392 // NOTE TO MYSELF: This function is nonsense. | |
33289 | 1393 // MPlayer should pass messages to the GUI |
1394 // which must decide then which message has | |
1395 // to be shown (MSGL_FATAL, for example). | |
1396 // But with this function it is at least | |
1397 // possible to show GUI's very critical or | |
1398 // abort messages. | |
33023 | 1399 void gmp_msg(int mod, int lev, const char *format, ...) |
1400 { | |
1401 char msg[512]; | |
1402 va_list va; | |
1403 | |
1404 va_start(va, format); | |
1405 vsnprintf(msg, sizeof(msg), format, va); | |
1406 va_end(va); | |
1407 | |
1408 mp_msg(mod, lev, msg); | |
1409 | |
1410 if (mp_msg_test(mod, lev)) | |
1411 gtkMessageBox(GTK_MB_FATAL, msg); | |
1412 } |