Mercurial > mplayer.hg
annotate gui/ui/main.c @ 33902:dd0e5dc6ebbf
Add guiDVDStruct members to guiInfo.
Additionally, rename nr_of_audio_channels AudioStreams, audio_streams[]
AudioStream[], nr_of_subtitles Subtitles and subtitles[] Subtitle[].
author | ib |
---|---|
date | Mon, 15 Aug 2011 18:37:10 +0000 |
parents | d4f80f889106 |
children | de065d751a8c |
rev | line source |
---|---|
26458 | 1 /* |
2 * main window | |
3 * | |
4 * This file is part of MPlayer. | |
5 * | |
6 * MPlayer is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * MPlayer is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 */ | |
23077 | 20 |
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" |
33738 | 30 #include "gui/interface.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
31 #include "gui/skin/font.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
32 #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
|
33 #include "gui/util/list.h" |
33739 | 34 #include "gui/util/mem.h" |
33737 | 35 #include "gui/util/string.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
36 #include "gui/wm/ws.h" |
23077 | 37 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
38 #include "help_mp.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
39 #include "libvo/x11_common.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
40 #include "libvo/fastmemcpy.h" |
33531
84ce059fae34
Get non-multimedia X11 key definitions from libvo/wskeys.h.
ib
parents:
33525
diff
changeset
|
41 #include "libvo/wskeys.h" |
23077 | 42 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
43 #include "stream/stream.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
44 #include "stream/url.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
45 #include "mixer.h" |
32467 | 46 #include "sub/sub.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
47 #include "access_mpcontext.h" |
23077 | 48 |
30537
7bebe34b6ad2
Move movie_aspect extern declaration to libmpcodecs/vd.h.
diego
parents:
30516
diff
changeset
|
49 #include "libmpcodecs/vd.h" |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
50 #include "libmpdemux/demuxer.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
51 #include "libmpdemux/stheader.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
52 #include "codec-cfg.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
53 #include "m_option.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
54 #include "m_property.h" |
30516 | 55 #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
|
56 #include "mpcommon.h" |
23077 | 57 |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
58 #define CLEAR_FILE 1 |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
59 #define CLEAR_DVD 2 |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
60 #define CLEAR_VCD 4 |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
61 #define CLEAR_ALL (CLEAR_FILE + CLEAR_DVD + CLEAR_VCD) |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
62 |
23077 | 63 #define GUI_REDRAW_WAIT 375 |
64 | |
33556 | 65 #include "actions.h" |
23077 | 66 #include "widgets.h" |
67 | |
28051 | 68 unsigned int GetTimerMS( void ); |
23077 | 69 |
33555 | 70 unsigned char * mainDrawBuffer = NULL; |
71 int uiMainRender = 1; | |
23077 | 72 |
33555 | 73 int uiMainAutoPlay = 0; |
74 int uiMiddleMenu = 0; | |
23077 | 75 |
76 int mainVisible = 1; | |
77 | |
78 int boxMoved = 0; | |
79 int sx = 0,sy = 0; | |
80 int i,pot = 0; | |
81 | |
33556 | 82 #include "render.h" |
23077 | 83 |
33555 | 84 void uiMainDraw( void ) |
23077 | 85 { |
86 | |
33768 | 87 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
|
88 |
33555 | 89 if ( guiApp.mainWindow.Visible == wsWindowNotVisible || |
23077 | 90 !mainVisible ) return; |
33555 | 91 // !guiApp.mainWindow.Mapped ) return; |
23077 | 92 |
33555 | 93 if ( uiMainRender && guiApp.mainWindow.State == wsWindowExpose ) |
23077 | 94 { |
33555 | 95 btnModify( evSetMoviePosition,guiInfo.Position ); |
96 btnModify( evSetVolume,guiInfo.Volume ); | |
23077 | 97 |
33555 | 98 fast_memcpy( mainDrawBuffer,guiApp.main.Bitmap.Image,guiApp.main.Bitmap.ImageSize ); |
99 RenderAll( &guiApp.mainWindow,guiApp.mainItems,guiApp.IndexOfMainItems,mainDrawBuffer ); | |
100 uiMainRender=0; | |
23077 | 101 } |
33555 | 102 wsPutImage( &guiApp.mainWindow ); |
23077 | 103 // XFlush( wsDisplay ); |
104 } | |
105 | |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
106 static void guiInfoMediumClear (int what) |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
107 { |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
108 if (what & CLEAR_FILE) |
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 nfree(guiInfo.Filename); |
33897 | 111 nfree(guiInfo.SubtitleFilename); |
112 nfree(guiInfo.AudioFilename); | |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
113 listSet(gtkDelPl, NULL); |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
114 } |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
115 |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
116 #ifdef CONFIG_DVDREAD |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
117 if (what & CLEAR_DVD) |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
118 { |
33902 | 119 guiInfo.AudioStreams = 0; |
120 guiInfo.Subtitles = 0; | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
121 guiInfo.Tracks = 0; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
122 guiInfo.Chapters = 0; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
123 guiInfo.Angles = 0; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
124 } |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
125 #endif |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
126 |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
127 #ifdef CONFIG_VCD |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
128 if (what & CLEAR_VCD) guiInfo.Tracks = 0; |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
129 #endif |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
130 } |
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
131 |
23077 | 132 static unsigned last_redraw_time = 0; |
133 | |
33555 | 134 void uiEventHandling( int msg,float param ) |
23077 | 135 { |
136 int iparam = (int)param; | |
33555 | 137 mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); |
23077 | 138 |
139 switch( msg ) | |
140 { | |
141 // --- user events | |
142 case evExit: | |
33768 | 143 mplayer( MPLAYER_EXIT_GUI, EXIT_QUIT, 0 ); |
23077 | 144 break; |
145 | |
146 case evPlayNetwork: | |
33897 | 147 nfree( guiInfo.SubtitleFilename ); |
148 nfree( guiInfo.AudioFilename ); | |
33555 | 149 guiInfo.StreamType=STREAMTYPE_STREAM; |
23077 | 150 goto play; |
151 case evSetURL: | |
152 gtkShow( evPlayNetwork,NULL ); | |
153 break; | |
154 | |
155 case evSetAudio: | |
33657 | 156 if ( !mpctx_get_demuxer(guiInfo.mpcontext) || audio_id == iparam ) break; |
23077 | 157 audio_id=iparam; |
158 goto play; | |
159 | |
160 case evSetVideo: | |
33657 | 161 if ( !mpctx_get_demuxer(guiInfo.mpcontext) || video_id == iparam ) break; |
23077 | 162 video_id=iparam; |
163 goto play; | |
164 | |
165 case evSetSubtitle: | |
33555 | 166 mp_property_do("sub",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); |
23077 | 167 break; |
168 | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
169 #ifdef CONFIG_VCD |
23077 | 170 case evSetVCDTrack: |
33555 | 171 guiInfo.Track=iparam; |
23077 | 172 case evPlayVCD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
173 guiInfoMediumClear ( CLEAR_ALL ); |
33555 | 174 guiInfo.StreamType=STREAMTYPE_VCD; |
23077 | 175 goto play; |
176 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
177 #ifdef CONFIG_DVDREAD |
23077 | 178 case evPlayDVD: |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
179 guiInfo.Track=1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
180 guiInfo.Chapter=1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
181 guiInfo.Angle=1; |
23077 | 182 play_dvd_2: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
183 guiInfoMediumClear( CLEAR_ALL - CLEAR_DVD ); |
33555 | 184 guiInfo.StreamType=STREAMTYPE_DVD; |
23077 | 185 goto play; |
186 #endif | |
187 case evPlay: | |
188 case evPlaySwitchToPause: | |
189 play: | |
190 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
191 if ( ( msg == evPlaySwitchToPause )&&( guiInfo.Playing == GUI_PAUSE ) ) goto NoPause; |
23077 | 192 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
193 if ( listSet( gtkGetCurrPlItem,NULL ) &&( guiInfo.StreamType == STREAMTYPE_FILE ) ) |
23077 | 194 { |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
195 plItem * next = listSet( gtkGetCurrPlItem,NULL ); |
23077 | 196 plLastPlayed=next; |
33555 | 197 uiSetFileName( next->path,next->name,STREAMTYPE_FILE ); |
23077 | 198 } |
199 | |
33555 | 200 switch ( guiInfo.StreamType ) |
23077 | 201 { |
202 case STREAMTYPE_STREAM: | |
203 case STREAMTYPE_FILE: | |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
204 guiInfoMediumClear( CLEAR_ALL - CLEAR_FILE ); |
33898 | 205 if ( !guiInfo.Track ) |
206 guiInfo.Track=1; | |
33890 | 207 guiInfo.NewPlay=GUI_FILE_NEW; |
23077 | 208 break; |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
209 #ifdef CONFIG_VCD |
23077 | 210 case STREAMTYPE_VCD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
211 guiInfoMediumClear( CLEAR_ALL - CLEAR_VCD - CLEAR_FILE ); |
23077 | 212 if ( !cdrom_device ) cdrom_device=gstrdup( DEFAULT_CDROM_DEVICE ); |
33555 | 213 uiSetFileName( NULL,cdrom_device,STREAMTYPE_VCD ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
214 if ( guiInfo.Playing != GUI_PAUSE ) |
23077 | 215 { |
33555 | 216 if ( !guiInfo.Track ) |
33874 | 217 guiInfo.Track=2; |
33890 | 218 guiInfo.NewPlay=GUI_FILE_SAME; |
23077 | 219 } |
220 break; | |
221 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
222 #ifdef CONFIG_DVDREAD |
23077 | 223 case STREAMTYPE_DVD: |
33771
6e774a02d00c
Remove gtkClearStruct code from mplayer() in interface.c.
ib
parents:
33768
diff
changeset
|
224 guiInfoMediumClear( CLEAR_ALL - CLEAR_DVD - CLEAR_FILE ); |
23077 | 225 if ( !dvd_device ) dvd_device=gstrdup( DEFAULT_DVD_DEVICE ); |
33555 | 226 uiSetFileName( NULL,dvd_device,STREAMTYPE_DVD ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
227 if ( guiInfo.Playing != GUI_PAUSE ) |
23077 | 228 { |
33890 | 229 guiInfo.NewPlay=GUI_FILE_SAME; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
230 } |
23077 | 231 break; |
232 #endif | |
233 } | |
33555 | 234 uiPlay(); |
23077 | 235 break; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
236 #ifdef CONFIG_DVDREAD |
23077 | 237 case evSetDVDSubtitle: |
238 dvdsub_id=iparam; | |
239 goto play_dvd_2; | |
240 break; | |
241 case evSetDVDAudio: | |
242 audio_id=iparam; | |
243 goto play_dvd_2; | |
244 break; | |
245 case evSetDVDChapter: | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
246 guiInfo.Chapter=iparam; |
23077 | 247 goto play_dvd_2; |
248 break; | |
249 case evSetDVDTitle: | |
33876
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
250 guiInfo.Track=iparam; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
251 guiInfo.Chapter=1; |
4789b8eed97e
Get rid of a bunch of needless or redundant guiInfo members.
ib
parents:
33874
diff
changeset
|
252 guiInfo.Angle=1; |
23077 | 253 goto play_dvd_2; |
254 break; | |
255 #endif | |
256 | |
257 case evPause: | |
258 case evPauseSwitchToPlay: | |
259 NoPause: | |
33555 | 260 uiPause(); |
23077 | 261 break; |
262 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
263 case evStop: |
33614 | 264 guiInfo.Playing=GUI_STOP; |
33555 | 265 uiState(); |
33901 | 266 guiInfo.VideoWindow=True; |
23077 | 267 break; |
268 | |
269 case evLoadPlay: | |
33555 | 270 uiMainAutoPlay=1; |
271 // guiInfo.StreamType=STREAMTYPE_FILE; | |
23077 | 272 case evLoad: |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
273 listSet( gtkDelPl,NULL ); |
23077 | 274 gtkShow( evLoad,NULL ); |
275 break; | |
276 case evLoadSubtitle: gtkShow( evLoadSubtitle,NULL ); break; | |
277 case evDropSubtitle: | |
33897 | 278 nfree( guiInfo.SubtitleFilename ); |
33763 | 279 mplayerLoadSubtitle( NULL ); |
23077 | 280 break; |
281 case evLoadAudioFile: gtkShow( evLoadAudioFile,NULL ); break; | |
33555 | 282 case evPrev: uiPrev(); break; |
283 case evNext: uiNext(); break; | |
23077 | 284 |
285 case evPlayList: gtkShow( evPlayList,NULL ); break; | |
286 case evSkinBrowser: gtkShow( evSkinBrowser,skinName ); break; | |
287 case evAbout: gtkShow( evAbout,NULL ); break; | |
288 case evPreferences: gtkShow( evPreferences,NULL ); break; | |
289 case evEqualizer: gtkShow( evEqualizer,NULL ); break; | |
290 | |
33555 | 291 case evForward10min: uiRelSeek( 600 ); break; |
292 case evBackward10min: uiRelSeek( -600 );break; | |
293 case evForward1min: uiRelSeek( 60 ); break; | |
294 case evBackward1min: uiRelSeek( -60 ); break; | |
295 case evForward10sec: uiRelSeek( 10 ); break; | |
296 case evBackward10sec: uiRelSeek( -10 ); break; | |
297 case evSetMoviePosition: uiAbsSeek( param ); break; | |
23077 | 298 |
299 case evIncVolume: vo_x11_putkey( wsGrayMul ); break; | |
300 case evDecVolume: vo_x11_putkey( wsGrayDiv ); break; | |
301 case evMute: mixer_mute( mixer ); break; | |
302 | |
303 case evSetVolume: | |
33555 | 304 guiInfo.Volume=param; |
23077 | 305 goto set_volume; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
306 case evSetBalance: |
33555 | 307 guiInfo.Balance=param; |
23077 | 308 set_volume: |
309 { | |
33555 | 310 float l = guiInfo.Volume * ( ( 100.0 - guiInfo.Balance ) / 50.0 ); |
311 float r = guiInfo.Volume * ( ( guiInfo.Balance ) / 50.0 ); | |
312 if ( l > guiInfo.Volume ) l=guiInfo.Volume; | |
313 if ( r > guiInfo.Volume ) r=guiInfo.Volume; | |
314 // printf( "!!! v: %.2f b: %.2f -> %.2f x %.2f\n",guiInfo.Volume,guiInfo.Balance,l,r ); | |
23077 | 315 mixer_setvolume( mixer,l,r ); |
316 } | |
317 if ( osd_level ) | |
318 { | |
319 osd_visible=(GetTimerMS() + 1000) | 1; | |
320 vo_osd_progbar_type=OSD_VOLUME; | |
33555 | 321 vo_osd_progbar_value=( ( guiInfo.Volume ) * 256.0 ) / 100.0; |
23077 | 322 vo_osd_changed( OSDTYPE_PROGBAR ); |
323 } | |
324 break; | |
325 | |
326 | |
327 case evIconify: | |
328 switch ( iparam ) | |
329 { | |
33555 | 330 case 0: wsIconify( guiApp.mainWindow ); break; |
331 case 1: wsIconify( guiApp.subWindow ); break; | |
23077 | 332 } |
333 break; | |
334 case evHalfSize: | |
335 btnSet( evFullScreen,btnReleased ); | |
33555 | 336 if ( guiInfo.Playing ) |
23077 | 337 { |
33555 | 338 if ( guiApp.subWindow.isFullScreen ) |
23077 | 339 { |
33555 | 340 uiFullScreen(); |
23077 | 341 } |
33901 | 342 wsResizeWindow( &guiApp.subWindow, guiInfo.VideoWidth / 2, guiInfo.VideoHeight / 2 ); |
33654 | 343 wsMoveWindow( &guiApp.subWindow, False, |
33901 | 344 ( wsMaxX - guiInfo.VideoWidth/2 )/2 + wsOrgX, |
345 ( wsMaxY - guiInfo.VideoHeight/2 )/2 + wsOrgY ); | |
23077 | 346 } |
347 break; | |
348 case evDoubleSize: | |
349 btnSet( evFullScreen,btnReleased ); | |
33555 | 350 if ( guiInfo.Playing ) |
23077 | 351 { |
33555 | 352 if ( guiApp.subWindow.isFullScreen ) |
23077 | 353 { |
33555 | 354 uiFullScreen(); |
23077 | 355 } |
33901 | 356 wsResizeWindow( &guiApp.subWindow, guiInfo.VideoWidth * 2, guiInfo.VideoHeight * 2 ); |
33654 | 357 wsMoveWindow( &guiApp.subWindow, False, |
33901 | 358 ( wsMaxX - guiInfo.VideoWidth*2 )/2 + wsOrgX, |
359 ( wsMaxY - guiInfo.VideoHeight*2 )/2 + wsOrgY ); | |
23077 | 360 } |
361 break; | |
362 case evNormalSize: | |
363 btnSet( evFullScreen,btnReleased ); | |
33555 | 364 if ( guiInfo.Playing ) |
23077 | 365 { |
33555 | 366 if ( guiApp.subWindow.isFullScreen ) |
23077 | 367 { |
33555 | 368 uiFullScreen(); |
23077 | 369 } |
33901 | 370 wsResizeWindow( &guiApp.subWindow, guiInfo.VideoWidth, guiInfo.VideoHeight ); |
33654 | 371 wsMoveWindow( &guiApp.subWindow, False, |
33901 | 372 ( wsMaxX - guiInfo.VideoWidth )/2 + wsOrgX, |
373 ( wsMaxY - guiInfo.VideoHeight )/2 + wsOrgY ); | |
23077 | 374 break; |
33555 | 375 } else if ( !guiApp.subWindow.isFullScreen ) break; |
23077 | 376 case evFullScreen: |
33555 | 377 if ( !guiInfo.Playing && !gtkShowVideoWindow ) break; |
378 uiFullScreen(); | |
379 if ( guiApp.subWindow.isFullScreen ) btnSet( evFullScreen,btnPressed ); | |
23077 | 380 else btnSet( evFullScreen,btnReleased ); |
381 break; | |
382 | |
383 case evSetAspect: | |
384 switch ( iparam ) | |
385 { | |
386 case 2: movie_aspect=16.0f / 9.0f; break; | |
387 case 3: movie_aspect=4.0f / 3.0f; break; | |
388 case 4: movie_aspect=2.35; break; | |
389 case 1: | |
390 default: movie_aspect=-1; | |
391 } | |
33555 | 392 wsClearWindow( guiApp.subWindow ); |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
393 #ifdef CONFIG_DVDREAD |
33555 | 394 if ( guiInfo.StreamType == STREAMTYPE_DVD || guiInfo.StreamType == STREAMTYPE_VCD ) goto play_dvd_2; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
395 else |
23077 | 396 #endif |
33890 | 397 guiInfo.NewPlay=GUI_FILE_NEW; |
23077 | 398 break; |
399 | |
400 // --- timer events | |
401 case evRedraw: | |
402 { | |
403 unsigned now = GetTimerMS(); | |
404 if ((now > last_redraw_time) && | |
405 (now < last_redraw_time + GUI_REDRAW_WAIT) && | |
33555 | 406 !uiPlaybarFade) |
23077 | 407 break; |
408 last_redraw_time = now; | |
409 } | |
33555 | 410 uiMainRender=1; |
411 wsPostRedisplay( &guiApp.mainWindow ); | |
412 wsPostRedisplay( &guiApp.playbarWindow ); | |
23077 | 413 break; |
414 // --- system events | |
415 #ifdef MP_DEBUG | |
416 case evNone: | |
417 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] event none received.\n" ); | |
418 break; | |
419 default: | |
420 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] unknown event received ( %d,%.2f ).\n",msg,param ); | |
421 break; | |
422 #endif | |
423 } | |
424 } | |
425 | |
33555 | 426 void uiMainMouseHandle( int Button,int X,int Y,int RX,int RY ) |
23077 | 427 { |
428 static int itemtype = 0; | |
429 int i; | |
430 wItem * item = NULL; | |
431 float value = 0.0f; | |
432 | |
433 static int SelectedItem = -1; | |
434 int currentselected = -1; | |
435 | |
33555 | 436 for ( i=0;i <= guiApp.IndexOfMainItems;i++ ) |
437 if ( ( guiApp.mainItems[i].pressed != btnDisabled )&& | |
438 ( 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 | 439 { currentselected=i; break; } |
440 | |
441 switch ( Button ) | |
442 { | |
443 case wsPMMouseButton: | |
444 gtkShow( evHidePopUpMenu,NULL ); | |
33555 | 445 uiShowMenu( RX,RY ); |
23077 | 446 itemtype=itPRMButton; |
447 break; | |
448 case wsRMMouseButton: | |
33555 | 449 uiHideMenu( RX,RY,0 ); |
23077 | 450 break; |
451 | |
452 case wsPLMouseButton: | |
453 gtkShow( evHidePopUpMenu,NULL ); | |
454 sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; | |
455 SelectedItem=currentselected; | |
456 if ( SelectedItem == -1 ) break; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
457 boxMoved=0; |
33555 | 458 item=&guiApp.mainItems[SelectedItem]; |
23077 | 459 itemtype=item->type; |
460 item->pressed=btnPressed; | |
461 switch( item->type ) | |
462 { | |
463 case itButton: | |
464 if ( ( SelectedItem > -1 ) && | |
32911 | 465 ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) || |
466 ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) ) | |
23077 | 467 { item->pressed=btnDisabled; } |
468 break; | |
469 } | |
470 break; | |
471 case wsRLMouseButton: | |
472 boxMoved=0; | |
33107 | 473 if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter |
474 { | |
33555 | 475 item=&guiApp.mainItems[SelectedItem]; |
33108 | 476 item->pressed=btnReleased; |
33107 | 477 } |
23077 | 478 SelectedItem=-1; |
479 if ( currentselected == - 1 ) { itemtype=0; break; } | |
480 value=0; | |
481 switch( itemtype ) | |
482 { | |
483 case itPotmeter: | |
484 case itHPotmeter: | |
32911 | 485 btnModify( item->message,(float)( X - item->x ) / item->width * 100.0f ); |
33555 | 486 uiEventHandling( item->message,item->value ); |
23077 | 487 value=item->value; |
488 break; | |
489 case itVPotmeter: | |
32911 | 490 btnModify( item->message, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); |
33555 | 491 uiEventHandling( item->message,item->value ); |
23077 | 492 value=item->value; |
493 break; | |
494 } | |
33555 | 495 uiEventHandling( item->message,value ); |
23077 | 496 itemtype=0; |
497 break; | |
498 | |
499 case wsRRMouseButton: | |
500 gtkShow( evShowPopUpMenu,NULL ); | |
501 break; | |
502 | |
503 // --- rolled mouse ... de szar :))) | |
504 case wsP5MouseButton: value=-2.5f; goto rollerhandled; | |
505 case wsP4MouseButton: value= 2.5f; | |
506 rollerhandled: | |
33555 | 507 item=&guiApp.mainItems[currentselected]; |
23077 | 508 if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) |
509 { | |
510 item->value+=value; | |
32911 | 511 btnModify( item->message,item->value ); |
33555 | 512 uiEventHandling( item->message,item->value ); |
23077 | 513 } |
514 break; | |
515 | |
516 // --- moving | |
517 case wsMoveMouse: | |
33555 | 518 item=&guiApp.mainItems[SelectedItem]; |
23077 | 519 switch ( itemtype ) |
520 { | |
521 case itPLMButton: | |
33555 | 522 wsMoveWindow( &guiApp.mainWindow,False,RX - abs( sx ),RY - abs( sy ) ); |
523 uiMainRender=0; | |
23077 | 524 break; |
525 case itPRMButton: | |
33555 | 526 uiMenuMouseHandle( X,Y,RX,RY ); |
23077 | 527 break; |
528 case itPotmeter: | |
529 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
530 goto potihandled; | |
531 case itVPotmeter: | |
532 item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f; | |
533 goto potihandled; | |
534 case itHPotmeter: | |
535 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
536 potihandled: | |
537 if ( item->value > 100.0f ) item->value=100.0f; | |
538 if ( item->value < 0.0f ) item->value=0.0f; | |
33555 | 539 uiEventHandling( item->message,item->value ); |
23077 | 540 break; |
541 } | |
542 break; | |
543 } | |
544 } | |
545 | |
546 int keyPressed = 0; | |
547 | |
33555 | 548 void uiMainKeyHandle( int KeyCode,int Type,int Key ) |
23077 | 549 { |
550 int msg = evNone; | |
551 | |
552 if ( Type != wsKeyPressed ) return; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
553 |
23077 | 554 if ( !Key ) |
555 { | |
556 switch ( KeyCode ) | |
557 { | |
33524 | 558 // 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
|
559 /*case wsXFMMPrev: msg=evPrev; break; |
23077 | 560 case wsXFMMStop: msg=evStop; break; |
561 case wsXFMMPlay: msg=evPlaySwitchToPause; break; | |
562 case wsXFMMNext: msg=evNext; break; | |
563 case wsXFMMVolUp: msg=evIncVolume; break; | |
564 case wsXFMMVolDown: msg=evDecVolume; break; | |
33536
fc1402410163
Remove support for Acer AirKey V keyboard multimedia keys.
ib
parents:
33535
diff
changeset
|
565 case wsXFMMMute: msg=evMute; break;*/ |
23077 | 566 } |
567 } | |
568 else | |
569 { | |
570 switch ( Key ) | |
571 { | |
572 case wsEnter: msg=evPlay; break; | |
573 case wsXF86LowerVolume: msg=evDecVolume; break; | |
574 case wsXF86RaiseVolume: msg=evIncVolume; break; | |
575 case wsXF86Mute: msg=evMute; break; | |
33525 | 576 case wsXF86Pause: |
23077 | 577 case wsXF86Play: msg=evPlaySwitchToPause; break; |
578 case wsXF86Stop: msg=evStop; break; | |
579 case wsXF86Prev: msg=evPrev; break; | |
580 case wsXF86Next: msg=evNext; break; | |
581 case wsXF86Media: msg=evLoad; break; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
582 case wsEscape: |
33555 | 583 if ( guiApp.subWindow.isFullScreen ) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
584 { |
33555 | 585 uiEventHandling( evNormalSize,0 ); |
23077 | 586 return; |
587 } | |
588 default: vo_x11_putkey( Key ); return; | |
589 } | |
590 } | |
33555 | 591 if ( msg != evNone ) uiEventHandling( msg,0 ); |
23077 | 592 } |
593 | |
594 /* this will be used to handle Drag&Drop files */ | |
33555 | 595 void uiDandDHandler(int num,char** files) |
23077 | 596 { |
597 struct stat buf; | |
598 int f = 0; | |
599 | |
600 char* subtitles = NULL; | |
601 char* filename = NULL; | |
602 | |
603 if (num <= 0) | |
604 return; | |
605 | |
606 | |
607 /* now fill it with new items */ | |
608 for(f=0; f < num; f++){ | |
609 char* str = strdup( files[f] ); | |
610 plItem* item; | |
611 | |
24086
f5b32d12b691
remove gconvert_uri_to_filename() and use url_unescape_string() instead.
iive
parents:
23457
diff
changeset
|
612 url_unescape_string(str, files[f]); |
23077 | 613 |
614 if(stat(str,&buf) == 0 && S_ISDIR(buf.st_mode) == 0) { | |
615 /* this is not a directory so try to play it */ | |
616 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
|
617 |
23077 | 618 /* check if it is a subtitle file */ |
619 { | |
620 char* ext = strrchr(str,'.'); | |
621 if (ext) { | |
622 static char supported[] = "utf/sub/srt/smi/rt//txt/ssa/aqt/"; | |
623 char* type; | |
624 int len; | |
625 if((len=strlen(++ext)) && (type=strstr(supported,ext)) &&\ | |
626 (type-supported)%4 == 0 && *(type+len) == '/'){ | |
627 /* handle subtitle file */ | |
33739 | 628 nfree(subtitles); |
23077 | 629 subtitles = str; |
630 continue; | |
631 } | |
632 } | |
633 } | |
634 | |
635 /* clear playlist */ | |
636 if (filename == NULL) { | |
637 filename = files[f]; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
638 listSet(gtkDelPl,NULL); |
23077 | 639 } |
640 | |
641 item = calloc(1,sizeof(plItem)); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
642 |
23077 | 643 /* FIXME: decompose file name ? */ |
644 /* yes -- Pontscho */ | |
645 if ( strrchr( str,'/' ) ) { | |
646 char * s = strrchr( str,'/' ); *s=0; s++; | |
647 item->name = gstrdup( s ); | |
648 item->path = gstrdup( str ); | |
649 } else { | |
650 item->name = strdup(str); | |
651 item->path = strdup(""); | |
652 } | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
653 listSet(gtkAddPlItem,item); |
23077 | 654 } else { |
655 mp_msg( MSGT_GPLAYER,MSGL_WARN,MSGTR_NotAFile,str ); | |
656 } | |
657 free( str ); | |
658 } | |
659 | |
660 if (filename) { | |
33555 | 661 uiSetFileName( NULL,filename,STREAMTYPE_FILE ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
662 if ( guiInfo.Playing == GUI_PLAY ) uiEventHandling( evStop,0 ); |
33555 | 663 uiEventHandling( evPlay,0 ); |
23077 | 664 } |
665 if (subtitles) { | |
33897 | 666 nfree(guiInfo.SubtitleFilename); |
667 guiInfo.SubtitleFilename = subtitles; | |
668 mplayerLoadSubtitle(guiInfo.SubtitleFilename); | |
23077 | 669 } |
670 } |