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