Mercurial > mplayer.hg
annotate gui/ui/main.c @ 35663:d1f84b219340
Don't unnecessarily and annoyingly move the video window.
So far, this has been done at the start and end of a video (in
non-fullscreen mode) as well as when selecting half, normal or
double size of the video.
Don't position the video window to the values given in the skin file,
because the user might have moved it in the meantime, so just let it
where it currently is.
This closes Bugzilla #1355.
author | ib |
---|---|
date | Wed, 16 Jan 2013 19:38:44 +0000 |
parents | a4741058bb40 |
children | 96adc233474d |
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 } |
33555 | 99 wsPutImage( &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 { | |
35355 | 333 case 0: wsIconify( &guiApp.mainWindow ); break; |
334 case 1: wsIconify( &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 } |
34697 | 344 wsResizeWindow( &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 } |
34697 | 355 wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth * 2, guiInfo.VideoHeight * 2 ); |
33950 | 356 btnSet( evFullScreen,btnReleased ); |
23077 | 357 } |
358 break; | |
359 case evNormalSize: | |
33947 | 360 if ( guiInfo.VideoWindow && guiInfo.Playing ) |
23077 | 361 { |
34697 | 362 if ( guiApp.videoWindow.isFullScreen ) |
23077 | 363 { |
33555 | 364 uiFullScreen(); |
23077 | 365 } |
34697 | 366 wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight ); |
33947 | 367 btnSet( evFullScreen,btnReleased ); |
23077 | 368 break; |
34697 | 369 } else if ( !guiApp.videoWindow.isFullScreen ) break; |
23077 | 370 case evFullScreen: |
35611
a4741058bb40
Reset video window after STOP (MP command or evStop) has been pressed.
ib
parents:
35605
diff
changeset
|
371 if ( guiInfo.VideoWindow && ( guiInfo.Playing || !iparam ) ) |
33947 | 372 { |
33950 | 373 uiFullScreen(); |
34697 | 374 if ( !guiApp.videoWindow.isFullScreen ) |
35605
71f19d352561
Fix bug with wrong video window size after end of fullscreen playback.
ib
parents:
35545
diff
changeset
|
375 wsResizeWindow( &guiApp.videoWindow, iparam ? guiInfo.VideoWidth : guiApp.video.width, iparam ? guiInfo.VideoHeight : guiApp.video.height ); |
33947 | 376 } |
34697 | 377 if ( guiApp.videoWindow.isFullScreen ) btnSet( evFullScreen,btnPressed ); |
23077 | 378 else btnSet( evFullScreen,btnReleased ); |
379 break; | |
380 | |
381 case evSetAspect: | |
382 switch ( iparam ) | |
383 { | |
384 case 2: movie_aspect=16.0f / 9.0f; break; | |
385 case 3: movie_aspect=4.0f / 3.0f; break; | |
386 case 4: movie_aspect=2.35; break; | |
387 case 1: | |
388 default: movie_aspect=-1; | |
389 } | |
35357
80fe9ad7f318
Pass guiApp's wsTWindow parameters always by reference (if possible).
ib
parents:
35355
diff
changeset
|
390 wsClearWindow( &guiApp.videoWindow ); |
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; |
33555 | 408 wsPostRedisplay( &guiApp.mainWindow ); |
409 wsPostRedisplay( &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; | |
425 wItem * item = NULL; | |
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 )&& | |
433 ( 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 | 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: | |
33993 | 520 wsMoveWindow( &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 } |