Mercurial > mplayer.hg
annotate gui/ui/main.c @ 35484:9dceffa5d9b2
Set filename for MPlayer in GUI_PREPARE.
This allows to remove some ugly code from uiEventHandling() (evPlay)
whose sole purpose was setting the global filename variable.
For CD, VCD and DVD this is (indirectly) done in GUI_PREPARE, too,
so do it here for FILE and STREAM as well.
author | ib |
---|---|
date | Mon, 03 Dec 2012 14:10:12 +0000 |
parents | f42cc2361ee4 |
children | a5f5f61a7a35 |
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 |
34699
ed0e00db4306
Cosmetic: Move, change and add some comments on GUI windows.
ib
parents:
34697
diff
changeset
|
19 /* main window */ |
ed0e00db4306
Cosmetic: Move, change and add some comments on GUI windows.
ib
parents:
34697
diff
changeset
|
20 |
23077 | 21 #include <stdlib.h> |
22 #include <stdio.h> | |
23 #include <sys/stat.h> | |
24 #include <unistd.h> | |
23305
22d3d12c6dfb
Include string.h for memcpy, fastmemcpy.h alone is not enough.
reimar
parents:
23154
diff
changeset
|
25 #include <string.h> |
23077 | 26 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
27 #include "config.h" |
23154
e564b9cd7290
Fix several implicit declarations of functions warnings.
diego
parents:
23077
diff
changeset
|
28 #include "gmplayer.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
29 #include "gui/app.h" |
35429 | 30 #include "gui/gui.h" |
33738 | 31 #include "gui/interface.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
32 #include "gui/skin/font.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
33 #include "gui/skin/skin.h" |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
34 #include "gui/util/list.h" |
33739 | 35 #include "gui/util/mem.h" |
33737 | 36 #include "gui/util/string.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
37 #include "gui/wm/ws.h" |
23077 | 38 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
39 #include "help_mp.h" |
34174
a93891202051
Add missing mp_msg.h #includes, remove some unnecessary ones.
diego
parents:
34077
diff
changeset
|
40 #include "mp_msg.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
41 #include "libvo/x11_common.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
42 #include "libvo/fastmemcpy.h" |
33531
84ce059fae34
Get non-multimedia X11 key definitions from libvo/wskeys.h.
ib
parents:
33525
diff
changeset
|
43 #include "libvo/wskeys.h" |
23077 | 44 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
45 #include "stream/stream.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
46 #include "stream/url.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
47 #include "mixer.h" |
32467 | 48 #include "sub/sub.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
49 #include "access_mpcontext.h" |
23077 | 50 |
30537
7bebe34b6ad2
Move movie_aspect extern declaration to libmpcodecs/vd.h.
diego
parents:
30516
diff
changeset
|
51 #include "libmpcodecs/vd.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
52 #include "libmpdemux/demuxer.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
53 #include "libmpdemux/stheader.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
54 #include "codec-cfg.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
55 #include "m_option.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
56 #include "m_property.h" |
30516 | 57 #include "mp_core.h" |
32043
f6249bc89c38
Move extern declarations used by both mplayer.c and mencoder.c to mpcommon.h.
diego
parents:
32041
diff
changeset
|
58 #include "mpcommon.h" |
23077 | 59 |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
60 #define CLEAR_FILE 1 |
34077 | 61 #define CLEAR_VCD 2 |
62 #define CLEAR_DVD 4 | |
63 #define CLEAR_ALL (CLEAR_FILE + CLEAR_VCD + CLEAR_DVD) | |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
64 |
23077 | 65 #define GUI_REDRAW_WAIT 375 |
66 | |
33556 | 67 #include "actions.h" |
23077 | 68 #include "widgets.h" |
69 | |
28051 | 70 unsigned int GetTimerMS( void ); |
23077 | 71 |
33555 | 72 unsigned char * mainDrawBuffer = NULL; |
73 int uiMainRender = 1; | |
23077 | 74 |
33555 | 75 int uiMainAutoPlay = 0; |
76 int uiMiddleMenu = 0; | |
23077 | 77 |
78 int mainVisible = 1; | |
79 | |
80 int boxMoved = 0; | |
81 int sx = 0,sy = 0; | |
82 int i,pot = 0; | |
83 | |
33556 | 84 #include "render.h" |
23077 | 85 |
33555 | 86 void uiMainDraw( void ) |
23077 | 87 { |
88 | |
33768 | 89 if ( guiApp.mainWindow.State == wsWindowClosed ) mplayer( MPLAYER_EXIT_GUI, EXIT_QUIT, 0 ); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
90 |
33555 | 91 if ( guiApp.mainWindow.Visible == wsWindowNotVisible || |
23077 | 92 !mainVisible ) return; |
33555 | 93 // !guiApp.mainWindow.Mapped ) return; |
23077 | 94 |
33555 | 95 if ( uiMainRender && guiApp.mainWindow.State == wsWindowExpose ) |
23077 | 96 { |
33555 | 97 btnModify( evSetMoviePosition,guiInfo.Position ); |
98 btnModify( evSetVolume,guiInfo.Volume ); | |
23077 | 99 |
33555 | 100 fast_memcpy( mainDrawBuffer,guiApp.main.Bitmap.Image,guiApp.main.Bitmap.ImageSize ); |
101 RenderAll( &guiApp.mainWindow,guiApp.mainItems,guiApp.IndexOfMainItems,mainDrawBuffer ); | |
102 uiMainRender=0; | |
23077 | 103 } |
33555 | 104 wsPutImage( &guiApp.mainWindow ); |
23077 | 105 // XFlush( wsDisplay ); |
106 } | |
107 | |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
108 static void guiInfoMediumClear (int what) |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
109 { |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
110 if (what & CLEAR_FILE) |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
111 { |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
112 nfree(guiInfo.Filename); |
33897 | 113 nfree(guiInfo.SubtitleFilename); |
114 nfree(guiInfo.AudioFilename); | |
34663 | 115 listMgr(PLAYLIST_DELETE, 0); |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
116 } |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
117 |
34077 | 118 if (what & CLEAR_VCD) guiInfo.Tracks = 0; |
119 | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
120 if (what & CLEAR_DVD) |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
121 { |
33902 | 122 guiInfo.AudioStreams = 0; |
123 guiInfo.Subtitles = 0; | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
124 guiInfo.Tracks = 0; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
125 guiInfo.Chapters = 0; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
126 guiInfo.Angles = 0; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
127 } |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
128 } |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
129 |
23077 | 130 static unsigned last_redraw_time = 0; |
131 | |
33555 | 132 void uiEventHandling( int msg,float param ) |
23077 | 133 { |
134 int iparam = (int)param; | |
33555 | 135 mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); |
23077 | 136 |
137 switch( msg ) | |
138 { | |
34684 | 139 /* user events */ |
23077 | 140 case evExit: |
33768 | 141 mplayer( MPLAYER_EXIT_GUI, EXIT_QUIT, 0 ); |
23077 | 142 break; |
143 | |
34324 | 144 case evLoadURL: |
34329 | 145 gtkShow( evLoadURL,NULL ); |
23077 | 146 break; |
147 | |
34333 | 148 case ivSetAudio: |
33657 | 149 if ( !mpctx_get_demuxer(guiInfo.mpcontext) || audio_id == iparam ) break; |
34469 | 150 mp_property_do("switch_audio",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); |
151 break; | |
23077 | 152 |
34333 | 153 case ivSetVideo: |
33657 | 154 if ( !mpctx_get_demuxer(guiInfo.mpcontext) || video_id == iparam ) break; |
34469 | 155 mp_property_do("switch_video",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); |
156 break; | |
23077 | 157 |
34333 | 158 case ivSetSubtitle: |
33555 | 159 mp_property_do("sub",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); |
23077 | 160 break; |
161 | |
34387 | 162 #ifdef CONFIG_CDDA |
163 case ivSetCDTrack: | |
164 guiInfo.Track=iparam; | |
165 case evPlayCD: | |
166 guiInfoMediumClear ( CLEAR_ALL ); | |
167 guiInfo.StreamType=STREAMTYPE_CDDA; | |
168 goto play; | |
169 #endif | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
170 #ifdef CONFIG_VCD |
34333 | 171 case ivSetVCDTrack: |
33555 | 172 guiInfo.Track=iparam; |
23077 | 173 case evPlayVCD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
174 guiInfoMediumClear ( CLEAR_ALL ); |
33555 | 175 guiInfo.StreamType=STREAMTYPE_VCD; |
23077 | 176 goto play; |
177 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
178 #ifdef CONFIG_DVDREAD |
34417 | 179 case ivSetDVDSubtitle: |
180 dvdsub_id=iparam; | |
34455
00cf27b14c15
Replace goto label by an internal event case expression.
ib
parents:
34454
diff
changeset
|
181 uiEventHandling( ivPlayDVD, 0 ); |
34417 | 182 break; |
183 case ivSetDVDAudio: | |
184 audio_id=iparam; | |
34455
00cf27b14c15
Replace goto label by an internal event case expression.
ib
parents:
34454
diff
changeset
|
185 uiEventHandling( ivPlayDVD, 0 ); |
34417 | 186 break; |
187 case ivSetDVDChapter: | |
188 guiInfo.Chapter=iparam; | |
34455
00cf27b14c15
Replace goto label by an internal event case expression.
ib
parents:
34454
diff
changeset
|
189 uiEventHandling( ivPlayDVD, 0 ); |
34417 | 190 break; |
191 case ivSetDVDTitle: | |
192 guiInfo.Track=iparam; | |
193 guiInfo.Chapter=1; | |
194 guiInfo.Angle=1; | |
34455
00cf27b14c15
Replace goto label by an internal event case expression.
ib
parents:
34454
diff
changeset
|
195 uiEventHandling( ivPlayDVD, 0 ); |
34417 | 196 break; |
23077 | 197 case evPlayDVD: |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
198 guiInfo.Chapter=1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
199 guiInfo.Angle=1; |
34455
00cf27b14c15
Replace goto label by an internal event case expression.
ib
parents:
34454
diff
changeset
|
200 case ivPlayDVD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
201 guiInfoMediumClear( CLEAR_ALL - CLEAR_DVD ); |
33555 | 202 guiInfo.StreamType=STREAMTYPE_DVD; |
23077 | 203 goto play; |
204 #endif | |
205 case evPlay: | |
206 case evPlaySwitchToPause: | |
207 play: | |
208 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
209 if ( ( msg == evPlaySwitchToPause )&&( guiInfo.Playing == GUI_PAUSE ) ) goto NoPause; |
23077 | 210 |
33555 | 211 switch ( guiInfo.StreamType ) |
23077 | 212 { |
34077 | 213 case STREAMTYPE_FILE: |
23077 | 214 case STREAMTYPE_STREAM: |
34859 | 215 case STREAMTYPE_PLAYLIST: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
216 guiInfoMediumClear( CLEAR_ALL - CLEAR_FILE ); |
33898 | 217 if ( !guiInfo.Track ) |
218 guiInfo.Track=1; | |
33890 | 219 guiInfo.NewPlay=GUI_FILE_NEW; |
23077 | 220 break; |
34454 | 221 |
34387 | 222 case STREAMTYPE_CDDA: |
223 guiInfoMediumClear( CLEAR_ALL - CLEAR_VCD - CLEAR_FILE ); | |
224 if ( guiInfo.Playing != GUI_PAUSE ) | |
225 { | |
226 if ( !guiInfo.Track ) | |
227 guiInfo.Track=1; | |
228 guiInfo.NewPlay=GUI_FILE_SAME; | |
229 } | |
230 break; | |
34454 | 231 |
23077 | 232 case STREAMTYPE_VCD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
233 guiInfoMediumClear( CLEAR_ALL - CLEAR_VCD - CLEAR_FILE ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
234 if ( guiInfo.Playing != GUI_PAUSE ) |
23077 | 235 { |
33555 | 236 if ( !guiInfo.Track ) |
33874 | 237 guiInfo.Track=2; |
33890 | 238 guiInfo.NewPlay=GUI_FILE_SAME; |
23077 | 239 } |
240 break; | |
34454 | 241 |
23077 | 242 case STREAMTYPE_DVD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
243 guiInfoMediumClear( CLEAR_ALL - CLEAR_DVD - CLEAR_FILE ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
244 if ( guiInfo.Playing != GUI_PAUSE ) |
23077 | 245 { |
35422
696a8a165952
Check and set track for DVDs just as for the other StreamTypes.
ib
parents:
35389
diff
changeset
|
246 if ( !guiInfo.Track ) |
696a8a165952
Check and set track for DVDs just as for the other StreamTypes.
ib
parents:
35389
diff
changeset
|
247 guiInfo.Track=1; |
33890 | 248 guiInfo.NewPlay=GUI_FILE_SAME; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
249 } |
23077 | 250 break; |
251 } | |
33555 | 252 uiPlay(); |
23077 | 253 break; |
254 | |
255 case evPause: | |
256 case evPauseSwitchToPlay: | |
257 NoPause: | |
33555 | 258 uiPause(); |
23077 | 259 break; |
260 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
261 case evStop: |
33614 | 262 guiInfo.Playing=GUI_STOP; |
33555 | 263 uiState(); |
23077 | 264 break; |
265 | |
266 case evLoadPlay: | |
33555 | 267 uiMainAutoPlay=1; |
268 // guiInfo.StreamType=STREAMTYPE_FILE; | |
23077 | 269 case evLoad: |
270 gtkShow( evLoad,NULL ); | |
271 break; | |
272 case evLoadSubtitle: gtkShow( evLoadSubtitle,NULL ); break; | |
273 case evDropSubtitle: | |
33897 | 274 nfree( guiInfo.SubtitleFilename ); |
33763 | 275 mplayerLoadSubtitle( NULL ); |
23077 | 276 break; |
277 case evLoadAudioFile: gtkShow( evLoadAudioFile,NULL ); break; | |
33555 | 278 case evPrev: uiPrev(); break; |
279 case evNext: uiNext(); break; | |
23077 | 280 |
34321
daebf766dea6
Cosmetic: Synchronize evPlaylist event and message names.
ib
parents:
34174
diff
changeset
|
281 case evPlaylist: gtkShow( evPlaylist,NULL ); break; |
23077 | 282 case evSkinBrowser: gtkShow( evSkinBrowser,skinName ); break; |
283 case evAbout: gtkShow( evAbout,NULL ); break; | |
284 case evPreferences: gtkShow( evPreferences,NULL ); break; | |
285 case evEqualizer: gtkShow( evEqualizer,NULL ); break; | |
286 | |
33555 | 287 case evForward10min: uiRelSeek( 600 ); break; |
288 case evBackward10min: uiRelSeek( -600 );break; | |
289 case evForward1min: uiRelSeek( 60 ); break; | |
290 case evBackward1min: uiRelSeek( -60 ); break; | |
291 case evForward10sec: uiRelSeek( 10 ); break; | |
292 case evBackward10sec: uiRelSeek( -10 ); break; | |
293 case evSetMoviePosition: uiAbsSeek( param ); break; | |
23077 | 294 |
295 case evIncVolume: vo_x11_putkey( wsGrayMul ); break; | |
296 case evDecVolume: vo_x11_putkey( wsGrayDiv ); break; | |
297 case evMute: mixer_mute( mixer ); break; | |
298 | |
299 case evSetVolume: | |
33555 | 300 guiInfo.Volume=param; |
23077 | 301 goto set_volume; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
302 case evSetBalance: |
33555 | 303 guiInfo.Balance=param; |
23077 | 304 set_volume: |
305 { | |
33555 | 306 float l = guiInfo.Volume * ( ( 100.0 - guiInfo.Balance ) / 50.0 ); |
307 float r = guiInfo.Volume * ( ( guiInfo.Balance ) / 50.0 ); | |
308 if ( l > guiInfo.Volume ) l=guiInfo.Volume; | |
309 if ( r > guiInfo.Volume ) r=guiInfo.Volume; | |
310 // printf( "!!! v: %.2f b: %.2f -> %.2f x %.2f\n",guiInfo.Volume,guiInfo.Balance,l,r ); | |
23077 | 311 mixer_setvolume( mixer,l,r ); |
312 } | |
313 if ( osd_level ) | |
314 { | |
315 osd_visible=(GetTimerMS() + 1000) | 1; | |
316 vo_osd_progbar_type=OSD_VOLUME; | |
33555 | 317 vo_osd_progbar_value=( ( guiInfo.Volume ) * 256.0 ) / 100.0; |
23077 | 318 vo_osd_changed( OSDTYPE_PROGBAR ); |
319 } | |
320 break; | |
321 | |
322 | |
34458 | 323 case evMenu: |
34473 | 324 /*if (guiApp.menuIsPresent) NOTE TO MYSELF: Uncomment only after mouse |
325 { pointer and cursor keys work | |
326 gtkShow( ivHidePopUpMenu,NULL ); with this menu from skin as | |
327 uiShowMenu( 0,0 ); they do with normal menus. | |
34458 | 328 } |
329 else*/ gtkShow( ivShowPopUpMenu,NULL ); | |
330 break; | |
331 | |
23077 | 332 case evIconify: |
333 switch ( iparam ) | |
334 { | |
35355 | 335 case 0: wsIconify( &guiApp.mainWindow ); break; |
336 case 1: wsIconify( &guiApp.videoWindow ); break; | |
23077 | 337 } |
338 break; | |
339 case evHalfSize: | |
33947 | 340 if ( guiInfo.VideoWindow && guiInfo.Playing ) |
23077 | 341 { |
34697 | 342 if ( guiApp.videoWindow.isFullScreen ) |
23077 | 343 { |
33555 | 344 uiFullScreen(); |
23077 | 345 } |
34697 | 346 wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth / 2, guiInfo.VideoHeight / 2 ); |
347 wsMoveWindow( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); | |
33950 | 348 btnSet( evFullScreen,btnReleased ); |
23077 | 349 } |
350 break; | |
351 case evDoubleSize: | |
33947 | 352 if ( guiInfo.VideoWindow && guiInfo.Playing ) |
23077 | 353 { |
34697 | 354 if ( guiApp.videoWindow.isFullScreen ) |
23077 | 355 { |
33555 | 356 uiFullScreen(); |
23077 | 357 } |
34697 | 358 wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth * 2, guiInfo.VideoHeight * 2 ); |
359 wsMoveWindowWithin( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); | |
33950 | 360 btnSet( evFullScreen,btnReleased ); |
23077 | 361 } |
362 break; | |
363 case evNormalSize: | |
33947 | 364 if ( guiInfo.VideoWindow && guiInfo.Playing ) |
23077 | 365 { |
34697 | 366 if ( guiApp.videoWindow.isFullScreen ) |
23077 | 367 { |
33555 | 368 uiFullScreen(); |
23077 | 369 } |
34697 | 370 wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight ); |
371 wsMoveWindow( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); | |
33947 | 372 btnSet( evFullScreen,btnReleased ); |
23077 | 373 break; |
34697 | 374 } else if ( !guiApp.videoWindow.isFullScreen ) break; |
23077 | 375 case evFullScreen: |
33947 | 376 if ( guiInfo.VideoWindow && guiInfo.Playing ) |
377 { | |
33950 | 378 uiFullScreen(); |
34697 | 379 if ( !guiApp.videoWindow.isFullScreen ) |
33950 | 380 { |
34697 | 381 wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight ); |
382 wsMoveWindow( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); | |
33950 | 383 } |
33947 | 384 } |
34697 | 385 if ( guiApp.videoWindow.isFullScreen ) btnSet( evFullScreen,btnPressed ); |
23077 | 386 else btnSet( evFullScreen,btnReleased ); |
387 break; | |
388 | |
389 case evSetAspect: | |
390 switch ( iparam ) | |
391 { | |
392 case 2: movie_aspect=16.0f / 9.0f; break; | |
393 case 3: movie_aspect=4.0f / 3.0f; break; | |
394 case 4: movie_aspect=2.35; break; | |
395 case 1: | |
396 default: movie_aspect=-1; | |
397 } | |
35357
80fe9ad7f318
Pass guiApp's wsTWindow parameters always by reference (if possible).
ib
parents:
35355
diff
changeset
|
398 wsClearWindow( &guiApp.videoWindow ); |
34456 | 399 if ( guiInfo.StreamType == STREAMTYPE_VCD ) uiEventHandling( evPlayVCD, 0 ); |
400 else if ( guiInfo.StreamType == STREAMTYPE_DVD ) uiEventHandling( ivPlayDVD, 0 ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
401 else |
33890 | 402 guiInfo.NewPlay=GUI_FILE_NEW; |
23077 | 403 break; |
404 | |
34684 | 405 /* timer events */ |
34333 | 406 case ivRedraw: |
23077 | 407 { |
408 unsigned now = GetTimerMS(); | |
409 if ((now > last_redraw_time) && | |
410 (now < last_redraw_time + GUI_REDRAW_WAIT) && | |
34035 | 411 !uiPlaybarFade && (iparam == 0)) |
23077 | 412 break; |
413 last_redraw_time = now; | |
414 } | |
33555 | 415 uiMainRender=1; |
416 wsPostRedisplay( &guiApp.mainWindow ); | |
417 wsPostRedisplay( &guiApp.playbarWindow ); | |
23077 | 418 break; |
34684 | 419 /* system events */ |
23077 | 420 case evNone: |
34416 | 421 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] uiEventHandling: evNone\n" ); |
23077 | 422 break; |
423 default: | |
34416 | 424 mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] uiEventHandling: unknown event %d, param %.2f\n", msg, param ); |
23077 | 425 break; |
426 } | |
427 } | |
428 | |
33555 | 429 void uiMainMouseHandle( int Button,int X,int Y,int RX,int RY ) |
23077 | 430 { |
431 static int itemtype = 0; | |
432 int i; | |
433 wItem * item = NULL; | |
434 float value = 0.0f; | |
435 | |
436 static int SelectedItem = -1; | |
437 int currentselected = -1; | |
438 | |
33555 | 439 for ( i=0;i <= guiApp.IndexOfMainItems;i++ ) |
440 if ( ( guiApp.mainItems[i].pressed != btnDisabled )&& | |
441 ( wgIsRect( X,Y,guiApp.mainItems[i].x,guiApp.mainItems[i].y,guiApp.mainItems[i].x+guiApp.mainItems[i].width,guiApp.mainItems[i].y+guiApp.mainItems[i].height ) ) ) | |
23077 | 442 { currentselected=i; break; } |
443 | |
444 switch ( Button ) | |
445 { | |
446 case wsPMMouseButton: | |
34333 | 447 gtkShow( ivHidePopUpMenu,NULL ); |
33555 | 448 uiShowMenu( RX,RY ); |
23077 | 449 itemtype=itPRMButton; |
450 break; | |
451 case wsRMMouseButton: | |
33555 | 452 uiHideMenu( RX,RY,0 ); |
23077 | 453 break; |
454 | |
455 case wsPLMouseButton: | |
34333 | 456 gtkShow( ivHidePopUpMenu,NULL ); |
23077 | 457 sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; |
458 SelectedItem=currentselected; | |
459 if ( SelectedItem == -1 ) break; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
460 boxMoved=0; |
33555 | 461 item=&guiApp.mainItems[SelectedItem]; |
23077 | 462 itemtype=item->type; |
463 item->pressed=btnPressed; | |
464 switch( item->type ) | |
465 { | |
466 case itButton: | |
467 if ( ( SelectedItem > -1 ) && | |
32911 | 468 ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) || |
469 ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) ) | |
23077 | 470 { item->pressed=btnDisabled; } |
471 break; | |
472 } | |
473 break; | |
474 case wsRLMouseButton: | |
475 boxMoved=0; | |
33107 | 476 if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter |
477 { | |
33555 | 478 item=&guiApp.mainItems[SelectedItem]; |
33108 | 479 item->pressed=btnReleased; |
33107 | 480 } |
35351 | 481 if ( currentselected == - 1 || SelectedItem == -1 ) { itemtype=0; break; } |
23077 | 482 SelectedItem=-1; |
483 value=0; | |
484 switch( itemtype ) | |
485 { | |
486 case itPotmeter: | |
487 case itHPotmeter: | |
32911 | 488 btnModify( item->message,(float)( X - item->x ) / item->width * 100.0f ); |
33555 | 489 uiEventHandling( item->message,item->value ); |
23077 | 490 value=item->value; |
491 break; | |
492 case itVPotmeter: | |
32911 | 493 btnModify( item->message, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); |
33555 | 494 uiEventHandling( item->message,item->value ); |
23077 | 495 value=item->value; |
496 break; | |
497 } | |
33555 | 498 uiEventHandling( item->message,value ); |
23077 | 499 itemtype=0; |
500 break; | |
501 | |
502 case wsRRMouseButton: | |
34333 | 503 gtkShow( ivShowPopUpMenu,NULL ); |
23077 | 504 break; |
505 | |
34684 | 506 /* rolled mouse ... de szar :))) */ |
23077 | 507 case wsP5MouseButton: value=-2.5f; goto rollerhandled; |
508 case wsP4MouseButton: value= 2.5f; | |
509 rollerhandled: | |
35365 | 510 if (currentselected != - 1) |
511 { | |
35366 | 512 item=&guiApp.mainItems[currentselected]; |
513 if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) | |
514 { | |
515 item->value+=value; | |
516 btnModify( item->message,item->value ); | |
517 uiEventHandling( item->message,item->value ); | |
518 } | |
35365 | 519 } |
23077 | 520 break; |
521 | |
34684 | 522 /* moving */ |
23077 | 523 case wsMoveMouse: |
33555 | 524 item=&guiApp.mainItems[SelectedItem]; |
23077 | 525 switch ( itemtype ) |
526 { | |
527 case itPLMButton: | |
33993 | 528 wsMoveWindow( &guiApp.mainWindow,True,RX - abs( sx ),RY - abs( sy ) ); |
33555 | 529 uiMainRender=0; |
23077 | 530 break; |
531 case itPRMButton: | |
34472 | 532 uiMenuMouseHandle( RX,RY ); |
23077 | 533 break; |
534 case itPotmeter: | |
535 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
536 goto potihandled; | |
537 case itVPotmeter: | |
538 item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f; | |
539 goto potihandled; | |
540 case itHPotmeter: | |
541 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
542 potihandled: | |
543 if ( item->value > 100.0f ) item->value=100.0f; | |
544 if ( item->value < 0.0f ) item->value=0.0f; | |
33555 | 545 uiEventHandling( item->message,item->value ); |
23077 | 546 break; |
547 } | |
548 break; | |
549 } | |
550 } | |
551 | |
552 int keyPressed = 0; | |
553 | |
33555 | 554 void uiMainKeyHandle( int KeyCode,int Type,int Key ) |
23077 | 555 { |
556 int msg = evNone; | |
557 | |
558 if ( Type != wsKeyPressed ) return; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
559 |
23077 | 560 if ( !Key ) |
561 { | |
562 switch ( KeyCode ) | |
563 { | |
33524 | 564 // NOTE TO MYSELF: This is only for the Acer AirKey V keyboard. |
33536
fc1402410163
Remove support for Acer AirKey V keyboard multimedia keys.
ib
parents:
33535
diff
changeset
|
565 /*case wsXFMMPrev: msg=evPrev; break; |
23077 | 566 case wsXFMMStop: msg=evStop; break; |
567 case wsXFMMPlay: msg=evPlaySwitchToPause; break; | |
568 case wsXFMMNext: msg=evNext; break; | |
569 case wsXFMMVolUp: msg=evIncVolume; break; | |
570 case wsXFMMVolDown: msg=evDecVolume; break; | |
33536
fc1402410163
Remove support for Acer AirKey V keyboard multimedia keys.
ib
parents:
33535
diff
changeset
|
571 case wsXFMMMute: msg=evMute; break;*/ |
23077 | 572 } |
573 } | |
574 else | |
575 { | |
576 switch ( Key ) | |
577 { | |
578 case wsEnter: msg=evPlay; break; | |
579 case wsXF86LowerVolume: msg=evDecVolume; break; | |
580 case wsXF86RaiseVolume: msg=evIncVolume; break; | |
581 case wsXF86Mute: msg=evMute; break; | |
33525 | 582 case wsXF86Pause: |
23077 | 583 case wsXF86Play: msg=evPlaySwitchToPause; break; |
584 case wsXF86Stop: msg=evStop; break; | |
585 case wsXF86Prev: msg=evPrev; break; | |
586 case wsXF86Next: msg=evNext; break; | |
587 case wsXF86Media: msg=evLoad; break; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
588 case wsEscape: |
34697 | 589 if ( guiInfo.VideoWindow && guiInfo.Playing && guiApp.videoWindow.isFullScreen ) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
590 { |
33555 | 591 uiEventHandling( evNormalSize,0 ); |
23077 | 592 return; |
593 } | |
594 default: vo_x11_putkey( Key ); return; | |
595 } | |
596 } | |
33555 | 597 if ( msg != evNone ) uiEventHandling( msg,0 ); |
23077 | 598 } |
599 | |
600 /* this will be used to handle Drag&Drop files */ | |
33555 | 601 void uiDandDHandler(int num,char** files) |
23077 | 602 { |
603 struct stat buf; | |
604 int f = 0; | |
605 | |
606 char* subtitles = NULL; | |
607 char* filename = NULL; | |
35384 | 608 char* s; |
23077 | 609 |
610 if (num <= 0) | |
611 return; | |
612 | |
613 | |
614 /* now fill it with new items */ | |
615 for(f=0; f < num; f++){ | |
616 char* str = strdup( files[f] ); | |
617 plItem* item; | |
618 | |
24086
f5b32d12b691
remove gconvert_uri_to_filename() and use url_unescape_string() instead.
iive
parents:
23457
diff
changeset
|
619 url_unescape_string(str, files[f]); |
23077 | 620 |
621 if(stat(str,&buf) == 0 && S_ISDIR(buf.st_mode) == 0) { | |
622 /* this is not a directory so try to play it */ | |
623 mp_msg( MSGT_GPLAYER,MSGL_V,"Received D&D %s\n",str ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
624 |
23077 | 625 /* check if it is a subtitle file */ |
626 { | |
627 char* ext = strrchr(str,'.'); | |
628 if (ext) { | |
629 static char supported[] = "utf/sub/srt/smi/rt//txt/ssa/aqt/"; | |
630 char* type; | |
631 int len; | |
632 if((len=strlen(++ext)) && (type=strstr(supported,ext)) &&\ | |
633 (type-supported)%4 == 0 && *(type+len) == '/'){ | |
634 /* handle subtitle file */ | |
33739 | 635 nfree(subtitles); |
23077 | 636 subtitles = str; |
637 continue; | |
638 } | |
639 } | |
640 } | |
641 | |
642 /* clear playlist */ | |
643 if (filename == NULL) { | |
644 filename = files[f]; | |
34663 | 645 listMgr(PLAYLIST_DELETE,0); |
23077 | 646 } |
647 | |
648 item = calloc(1,sizeof(plItem)); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
649 |
35384 | 650 s = strrchr( str,'/' ); |
651 | |
23077 | 652 /* FIXME: decompose file name ? */ |
653 /* yes -- Pontscho */ | |
35384 | 654 if ( s ) { |
655 *s=0; s++; | |
23077 | 656 item->name = gstrdup( s ); |
657 item->path = gstrdup( str ); | |
658 } else { | |
35385 | 659 // NOTE TO MYSELF: this shouldn't happen, make sure we have a full path |
23077 | 660 item->name = strdup(str); |
35385 | 661 item->path = strdup("."); |
23077 | 662 } |
34681 | 663 listMgr(PLAYLIST_ITEM_APPEND,item); |
23077 | 664 } else { |
665 mp_msg( MSGT_GPLAYER,MSGL_WARN,MSGTR_NotAFile,str ); | |
666 } | |
667 free( str ); | |
668 } | |
669 | |
670 if (filename) { | |
35452 | 671 uiSetFile( NULL,filename,STREAMTYPE_FILE ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
672 if ( guiInfo.Playing == GUI_PLAY ) uiEventHandling( evStop,0 ); |
33555 | 673 uiEventHandling( evPlay,0 ); |
23077 | 674 } |
675 if (subtitles) { | |
33897 | 676 nfree(guiInfo.SubtitleFilename); |
677 guiInfo.SubtitleFilename = subtitles; | |
678 mplayerLoadSubtitle(guiInfo.SubtitleFilename); | |
23077 | 679 } |
680 } |