Mercurial > mplayer.hg
annotate gui/ui/main.c @ 33763:03824cf8728d
Cosmetic: Rename two functions that do MPlayer calls.
Rename guiLoadFont() mplayerLoadFont()
and guiLoadSubtitle() mplayerLoadSubtitle().
author | ib |
---|---|
date | Fri, 08 Jul 2011 21:04:56 +0000 |
parents | 99562e7c8b27 |
children | cee9987bc81d |
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 |
58 #define GUI_REDRAW_WAIT 375 | |
59 | |
33556 | 60 #include "actions.h" |
23077 | 61 #include "widgets.h" |
62 | |
28051 | 63 unsigned int GetTimerMS( void ); |
23077 | 64 |
33555 | 65 unsigned char * mainDrawBuffer = NULL; |
66 int uiMainRender = 1; | |
23077 | 67 |
33555 | 68 int uiMainAutoPlay = 0; |
69 int uiMiddleMenu = 0; | |
23077 | 70 |
71 int mainVisible = 1; | |
72 | |
73 int boxMoved = 0; | |
74 int sx = 0,sy = 0; | |
75 int i,pot = 0; | |
76 | |
33556 | 77 #include "render.h" |
23077 | 78 |
33555 | 79 void uiMainDraw( void ) |
23077 | 80 { |
81 | |
33555 | 82 if ( guiApp.mainWindow.State == wsWindowClosed ) guiExit( EXIT_QUIT ); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
83 |
33555 | 84 if ( guiApp.mainWindow.Visible == wsWindowNotVisible || |
23077 | 85 !mainVisible ) return; |
33555 | 86 // !guiApp.mainWindow.Mapped ) return; |
23077 | 87 |
33555 | 88 if ( uiMainRender && guiApp.mainWindow.State == wsWindowExpose ) |
23077 | 89 { |
33555 | 90 btnModify( evSetMoviePosition,guiInfo.Position ); |
91 btnModify( evSetVolume,guiInfo.Volume ); | |
23077 | 92 |
33555 | 93 fast_memcpy( mainDrawBuffer,guiApp.main.Bitmap.Image,guiApp.main.Bitmap.ImageSize ); |
94 RenderAll( &guiApp.mainWindow,guiApp.mainItems,guiApp.IndexOfMainItems,mainDrawBuffer ); | |
95 uiMainRender=0; | |
23077 | 96 } |
33555 | 97 wsPutImage( &guiApp.mainWindow ); |
23077 | 98 // XFlush( wsDisplay ); |
99 } | |
100 | |
101 static unsigned last_redraw_time = 0; | |
102 | |
33555 | 103 void uiEventHandling( int msg,float param ) |
23077 | 104 { |
105 int iparam = (int)param; | |
33555 | 106 mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); |
23077 | 107 |
108 switch( msg ) | |
109 { | |
110 // --- user events | |
111 case evExit: | |
33263 | 112 guiExit( EXIT_QUIT ); |
23077 | 113 break; |
114 | |
115 case evPlayNetwork: | |
33739 | 116 nfree( guiInfo.Subtitlename ); |
117 nfree( guiInfo.AudioFile ); | |
33555 | 118 guiInfo.StreamType=STREAMTYPE_STREAM; |
23077 | 119 goto play; |
120 case evSetURL: | |
121 gtkShow( evPlayNetwork,NULL ); | |
122 break; | |
123 | |
124 case evSetAudio: | |
33657 | 125 if ( !mpctx_get_demuxer(guiInfo.mpcontext) || audio_id == iparam ) break; |
23077 | 126 audio_id=iparam; |
127 goto play; | |
128 | |
129 case evSetVideo: | |
33657 | 130 if ( !mpctx_get_demuxer(guiInfo.mpcontext) || video_id == iparam ) break; |
23077 | 131 video_id=iparam; |
132 goto play; | |
133 | |
134 case evSetSubtitle: | |
33555 | 135 mp_property_do("sub",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); |
23077 | 136 break; |
137 | |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
138 #ifdef CONFIG_VCD |
23077 | 139 case evSetVCDTrack: |
33555 | 140 guiInfo.Track=iparam; |
23077 | 141 case evPlayVCD: |
33743
99562e7c8b27
Cosmetic: Rename remaining part of gtkSet() mplayer().
ib
parents:
33742
diff
changeset
|
142 mplayer( gtkClearStruct,0,(void *)guiALL ); |
33555 | 143 guiInfo.StreamType=STREAMTYPE_VCD; |
23077 | 144 goto play; |
145 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
146 #ifdef CONFIG_DVDREAD |
23077 | 147 case evPlayDVD: |
33555 | 148 guiInfo.DVD.current_title=1; |
149 guiInfo.DVD.current_chapter=1; | |
150 guiInfo.DVD.current_angle=1; | |
23077 | 151 play_dvd_2: |
33743
99562e7c8b27
Cosmetic: Rename remaining part of gtkSet() mplayer().
ib
parents:
33742
diff
changeset
|
152 mplayer( gtkClearStruct,0,(void *)(guiALL - guiDVD) ); |
33555 | 153 guiInfo.StreamType=STREAMTYPE_DVD; |
23077 | 154 goto play; |
155 #endif | |
156 case evPlay: | |
157 case evPlaySwitchToPause: | |
158 play: | |
159 | |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
160 if ( ( msg == evPlaySwitchToPause )&&( guiInfo.Playing == GUI_PAUSE ) ) goto NoPause; |
23077 | 161 |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
162 if ( listSet( gtkGetCurrPlItem,NULL ) &&( guiInfo.StreamType == STREAMTYPE_FILE ) ) |
23077 | 163 { |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
164 plItem * next = listSet( gtkGetCurrPlItem,NULL ); |
23077 | 165 plLastPlayed=next; |
33555 | 166 uiSetFileName( next->path,next->name,STREAMTYPE_FILE ); |
23077 | 167 } |
168 | |
33555 | 169 switch ( guiInfo.StreamType ) |
23077 | 170 { |
171 case STREAMTYPE_STREAM: | |
172 case STREAMTYPE_FILE: | |
33743
99562e7c8b27
Cosmetic: Rename remaining part of gtkSet() mplayer().
ib
parents:
33742
diff
changeset
|
173 mplayer( gtkClearStruct,0,(void *)(guiALL - guiFilenames) ); |
23077 | 174 break; |
27370
14c5017f40d2
Change a bunch of video/audio-output-specific preprocessor directives from
diego
parents:
27341
diff
changeset
|
175 #ifdef CONFIG_VCD |
23077 | 176 case STREAMTYPE_VCD: |
33743
99562e7c8b27
Cosmetic: Rename remaining part of gtkSet() mplayer().
ib
parents:
33742
diff
changeset
|
177 mplayer( gtkClearStruct,0,(void *)(guiALL - guiVCD - guiFilenames) ); |
23077 | 178 if ( !cdrom_device ) cdrom_device=gstrdup( DEFAULT_CDROM_DEVICE ); |
33555 | 179 uiSetFileName( NULL,cdrom_device,STREAMTYPE_VCD ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
180 if ( guiInfo.Playing != GUI_PAUSE ) |
23077 | 181 { |
33555 | 182 if ( !guiInfo.Track ) |
183 guiInfo.Track=1; | |
184 guiInfo.DiskChanged=1; | |
23077 | 185 } |
186 break; | |
187 #endif | |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
188 #ifdef CONFIG_DVDREAD |
23077 | 189 case STREAMTYPE_DVD: |
33743
99562e7c8b27
Cosmetic: Rename remaining part of gtkSet() mplayer().
ib
parents:
33742
diff
changeset
|
190 mplayer( gtkClearStruct,0,(void *)(guiALL - guiDVD - guiFilenames) ); |
23077 | 191 if ( !dvd_device ) dvd_device=gstrdup( DEFAULT_DVD_DEVICE ); |
33555 | 192 uiSetFileName( NULL,dvd_device,STREAMTYPE_DVD ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
193 if ( guiInfo.Playing != GUI_PAUSE ) |
23077 | 194 { |
33555 | 195 guiInfo.Title=guiInfo.DVD.current_title; |
196 guiInfo.Chapter=guiInfo.DVD.current_chapter; | |
197 guiInfo.Angle=guiInfo.DVD.current_angle; | |
198 guiInfo.DiskChanged=1; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
199 } |
23077 | 200 break; |
201 #endif | |
202 } | |
33555 | 203 guiInfo.NewPlay=1; |
204 uiPlay(); | |
23077 | 205 break; |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
206 #ifdef CONFIG_DVDREAD |
23077 | 207 case evSetDVDSubtitle: |
208 dvdsub_id=iparam; | |
209 goto play_dvd_2; | |
210 break; | |
211 case evSetDVDAudio: | |
212 audio_id=iparam; | |
213 goto play_dvd_2; | |
214 break; | |
215 case evSetDVDChapter: | |
33555 | 216 guiInfo.DVD.current_chapter=iparam; |
23077 | 217 goto play_dvd_2; |
218 break; | |
219 case evSetDVDTitle: | |
33555 | 220 guiInfo.DVD.current_title=iparam; |
221 guiInfo.DVD.current_chapter=1; | |
222 guiInfo.DVD.current_angle=1; | |
23077 | 223 goto play_dvd_2; |
224 break; | |
225 #endif | |
226 | |
227 case evPause: | |
228 case evPauseSwitchToPlay: | |
229 NoPause: | |
33555 | 230 uiPause(); |
23077 | 231 break; |
232 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
233 case evStop: |
33614 | 234 guiInfo.Playing=GUI_STOP; |
33555 | 235 uiState(); |
33655 | 236 guiInfo.MovieWindow=True; |
23077 | 237 break; |
238 | |
239 case evLoadPlay: | |
33555 | 240 uiMainAutoPlay=1; |
241 // guiInfo.StreamType=STREAMTYPE_FILE; | |
23077 | 242 case evLoad: |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
243 listSet( gtkDelPl,NULL ); |
23077 | 244 gtkShow( evLoad,NULL ); |
245 break; | |
246 case evLoadSubtitle: gtkShow( evLoadSubtitle,NULL ); break; | |
247 case evDropSubtitle: | |
33739 | 248 nfree( guiInfo.Subtitlename ); |
33763 | 249 mplayerLoadSubtitle( NULL ); |
23077 | 250 break; |
251 case evLoadAudioFile: gtkShow( evLoadAudioFile,NULL ); break; | |
33555 | 252 case evPrev: uiPrev(); break; |
253 case evNext: uiNext(); break; | |
23077 | 254 |
255 case evPlayList: gtkShow( evPlayList,NULL ); break; | |
256 case evSkinBrowser: gtkShow( evSkinBrowser,skinName ); break; | |
257 case evAbout: gtkShow( evAbout,NULL ); break; | |
258 case evPreferences: gtkShow( evPreferences,NULL ); break; | |
259 case evEqualizer: gtkShow( evEqualizer,NULL ); break; | |
260 | |
33555 | 261 case evForward10min: uiRelSeek( 600 ); break; |
262 case evBackward10min: uiRelSeek( -600 );break; | |
263 case evForward1min: uiRelSeek( 60 ); break; | |
264 case evBackward1min: uiRelSeek( -60 ); break; | |
265 case evForward10sec: uiRelSeek( 10 ); break; | |
266 case evBackward10sec: uiRelSeek( -10 ); break; | |
267 case evSetMoviePosition: uiAbsSeek( param ); break; | |
23077 | 268 |
269 case evIncVolume: vo_x11_putkey( wsGrayMul ); break; | |
270 case evDecVolume: vo_x11_putkey( wsGrayDiv ); break; | |
271 case evMute: mixer_mute( mixer ); break; | |
272 | |
273 case evSetVolume: | |
33555 | 274 guiInfo.Volume=param; |
23077 | 275 goto set_volume; |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
276 case evSetBalance: |
33555 | 277 guiInfo.Balance=param; |
23077 | 278 set_volume: |
279 { | |
33555 | 280 float l = guiInfo.Volume * ( ( 100.0 - guiInfo.Balance ) / 50.0 ); |
281 float r = guiInfo.Volume * ( ( guiInfo.Balance ) / 50.0 ); | |
282 if ( l > guiInfo.Volume ) l=guiInfo.Volume; | |
283 if ( r > guiInfo.Volume ) r=guiInfo.Volume; | |
284 // printf( "!!! v: %.2f b: %.2f -> %.2f x %.2f\n",guiInfo.Volume,guiInfo.Balance,l,r ); | |
23077 | 285 mixer_setvolume( mixer,l,r ); |
286 } | |
287 if ( osd_level ) | |
288 { | |
289 osd_visible=(GetTimerMS() + 1000) | 1; | |
290 vo_osd_progbar_type=OSD_VOLUME; | |
33555 | 291 vo_osd_progbar_value=( ( guiInfo.Volume ) * 256.0 ) / 100.0; |
23077 | 292 vo_osd_changed( OSDTYPE_PROGBAR ); |
293 } | |
294 break; | |
295 | |
296 | |
297 case evIconify: | |
298 switch ( iparam ) | |
299 { | |
33555 | 300 case 0: wsIconify( guiApp.mainWindow ); break; |
301 case 1: wsIconify( guiApp.subWindow ); break; | |
23077 | 302 } |
303 break; | |
304 case evHalfSize: | |
305 btnSet( evFullScreen,btnReleased ); | |
33555 | 306 if ( guiInfo.Playing ) |
23077 | 307 { |
33555 | 308 if ( guiApp.subWindow.isFullScreen ) |
23077 | 309 { |
33555 | 310 uiFullScreen(); |
23077 | 311 } |
33555 | 312 wsResizeWindow( &guiApp.subWindow, guiInfo.MovieWidth / 2, guiInfo.MovieHeight / 2 ); |
33654 | 313 wsMoveWindow( &guiApp.subWindow, False, |
33555 | 314 ( wsMaxX - guiInfo.MovieWidth/2 )/2 + wsOrgX, |
315 ( wsMaxY - guiInfo.MovieHeight/2 )/2 + wsOrgY ); | |
23077 | 316 } |
317 break; | |
318 case evDoubleSize: | |
319 btnSet( evFullScreen,btnReleased ); | |
33555 | 320 if ( guiInfo.Playing ) |
23077 | 321 { |
33555 | 322 if ( guiApp.subWindow.isFullScreen ) |
23077 | 323 { |
33555 | 324 uiFullScreen(); |
23077 | 325 } |
33555 | 326 wsResizeWindow( &guiApp.subWindow, guiInfo.MovieWidth * 2, guiInfo.MovieHeight * 2 ); |
33654 | 327 wsMoveWindow( &guiApp.subWindow, False, |
33555 | 328 ( wsMaxX - guiInfo.MovieWidth*2 )/2 + wsOrgX, |
329 ( wsMaxY - guiInfo.MovieHeight*2 )/2 + wsOrgY ); | |
23077 | 330 } |
331 break; | |
332 case evNormalSize: | |
333 btnSet( evFullScreen,btnReleased ); | |
33555 | 334 if ( guiInfo.Playing ) |
23077 | 335 { |
33555 | 336 if ( guiApp.subWindow.isFullScreen ) |
23077 | 337 { |
33555 | 338 uiFullScreen(); |
23077 | 339 } |
33555 | 340 wsResizeWindow( &guiApp.subWindow, guiInfo.MovieWidth, guiInfo.MovieHeight ); |
33654 | 341 wsMoveWindow( &guiApp.subWindow, False, |
33555 | 342 ( wsMaxX - guiInfo.MovieWidth )/2 + wsOrgX, |
343 ( wsMaxY - guiInfo.MovieHeight )/2 + wsOrgY ); | |
23077 | 344 break; |
33555 | 345 } else if ( !guiApp.subWindow.isFullScreen ) break; |
23077 | 346 case evFullScreen: |
33555 | 347 if ( !guiInfo.Playing && !gtkShowVideoWindow ) break; |
348 uiFullScreen(); | |
349 if ( guiApp.subWindow.isFullScreen ) btnSet( evFullScreen,btnPressed ); | |
23077 | 350 else btnSet( evFullScreen,btnReleased ); |
351 break; | |
352 | |
353 case evSetAspect: | |
354 switch ( iparam ) | |
355 { | |
356 case 2: movie_aspect=16.0f / 9.0f; break; | |
357 case 3: movie_aspect=4.0f / 3.0f; break; | |
358 case 4: movie_aspect=2.35; break; | |
359 case 1: | |
360 default: movie_aspect=-1; | |
361 } | |
33555 | 362 wsClearWindow( guiApp.subWindow ); |
27341
e7c989f7a7c9
Start unifying names of internal preprocessor directives.
diego
parents:
26458
diff
changeset
|
363 #ifdef CONFIG_DVDREAD |
33555 | 364 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
|
365 else |
23077 | 366 #endif |
33555 | 367 guiInfo.NewPlay=1; |
23077 | 368 break; |
369 | |
370 // --- timer events | |
371 case evRedraw: | |
372 { | |
373 unsigned now = GetTimerMS(); | |
374 if ((now > last_redraw_time) && | |
375 (now < last_redraw_time + GUI_REDRAW_WAIT) && | |
33555 | 376 !uiPlaybarFade) |
23077 | 377 break; |
378 last_redraw_time = now; | |
379 } | |
33555 | 380 uiMainRender=1; |
381 wsPostRedisplay( &guiApp.mainWindow ); | |
382 wsPostRedisplay( &guiApp.playbarWindow ); | |
23077 | 383 break; |
384 // --- system events | |
385 #ifdef MP_DEBUG | |
386 case evNone: | |
387 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] event none received.\n" ); | |
388 break; | |
389 default: | |
390 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] unknown event received ( %d,%.2f ).\n",msg,param ); | |
391 break; | |
392 #endif | |
393 } | |
394 } | |
395 | |
33555 | 396 void uiMainMouseHandle( int Button,int X,int Y,int RX,int RY ) |
23077 | 397 { |
398 static int itemtype = 0; | |
399 int i; | |
400 wItem * item = NULL; | |
401 float value = 0.0f; | |
402 | |
403 static int SelectedItem = -1; | |
404 int currentselected = -1; | |
405 | |
33555 | 406 for ( i=0;i <= guiApp.IndexOfMainItems;i++ ) |
407 if ( ( guiApp.mainItems[i].pressed != btnDisabled )&& | |
408 ( 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 | 409 { currentselected=i; break; } |
410 | |
411 switch ( Button ) | |
412 { | |
413 case wsPMMouseButton: | |
414 gtkShow( evHidePopUpMenu,NULL ); | |
33555 | 415 uiShowMenu( RX,RY ); |
23077 | 416 itemtype=itPRMButton; |
417 break; | |
418 case wsRMMouseButton: | |
33555 | 419 uiHideMenu( RX,RY,0 ); |
23077 | 420 break; |
421 | |
422 case wsPLMouseButton: | |
423 gtkShow( evHidePopUpMenu,NULL ); | |
424 sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; | |
425 SelectedItem=currentselected; | |
426 if ( SelectedItem == -1 ) break; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
427 boxMoved=0; |
33555 | 428 item=&guiApp.mainItems[SelectedItem]; |
23077 | 429 itemtype=item->type; |
430 item->pressed=btnPressed; | |
431 switch( item->type ) | |
432 { | |
433 case itButton: | |
434 if ( ( SelectedItem > -1 ) && | |
32911 | 435 ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) || |
436 ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) ) | |
23077 | 437 { item->pressed=btnDisabled; } |
438 break; | |
439 } | |
440 break; | |
441 case wsRLMouseButton: | |
442 boxMoved=0; | |
33107 | 443 if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter |
444 { | |
33555 | 445 item=&guiApp.mainItems[SelectedItem]; |
33108 | 446 item->pressed=btnReleased; |
33107 | 447 } |
23077 | 448 SelectedItem=-1; |
449 if ( currentselected == - 1 ) { itemtype=0; break; } | |
450 value=0; | |
451 switch( itemtype ) | |
452 { | |
453 case itPotmeter: | |
454 case itHPotmeter: | |
32911 | 455 btnModify( item->message,(float)( X - item->x ) / item->width * 100.0f ); |
33555 | 456 uiEventHandling( item->message,item->value ); |
23077 | 457 value=item->value; |
458 break; | |
459 case itVPotmeter: | |
32911 | 460 btnModify( item->message, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); |
33555 | 461 uiEventHandling( item->message,item->value ); |
23077 | 462 value=item->value; |
463 break; | |
464 } | |
33555 | 465 uiEventHandling( item->message,value ); |
23077 | 466 itemtype=0; |
467 break; | |
468 | |
469 case wsRRMouseButton: | |
470 gtkShow( evShowPopUpMenu,NULL ); | |
471 break; | |
472 | |
473 // --- rolled mouse ... de szar :))) | |
474 case wsP5MouseButton: value=-2.5f; goto rollerhandled; | |
475 case wsP4MouseButton: value= 2.5f; | |
476 rollerhandled: | |
33555 | 477 item=&guiApp.mainItems[currentselected]; |
23077 | 478 if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) |
479 { | |
480 item->value+=value; | |
32911 | 481 btnModify( item->message,item->value ); |
33555 | 482 uiEventHandling( item->message,item->value ); |
23077 | 483 } |
484 break; | |
485 | |
486 // --- moving | |
487 case wsMoveMouse: | |
33555 | 488 item=&guiApp.mainItems[SelectedItem]; |
23077 | 489 switch ( itemtype ) |
490 { | |
491 case itPLMButton: | |
33555 | 492 wsMoveWindow( &guiApp.mainWindow,False,RX - abs( sx ),RY - abs( sy ) ); |
493 uiMainRender=0; | |
23077 | 494 break; |
495 case itPRMButton: | |
33555 | 496 uiMenuMouseHandle( X,Y,RX,RY ); |
23077 | 497 break; |
498 case itPotmeter: | |
499 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
500 goto potihandled; | |
501 case itVPotmeter: | |
502 item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f; | |
503 goto potihandled; | |
504 case itHPotmeter: | |
505 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
506 potihandled: | |
507 if ( item->value > 100.0f ) item->value=100.0f; | |
508 if ( item->value < 0.0f ) item->value=0.0f; | |
33555 | 509 uiEventHandling( item->message,item->value ); |
23077 | 510 break; |
511 } | |
512 break; | |
513 } | |
514 } | |
515 | |
516 int keyPressed = 0; | |
517 | |
33555 | 518 void uiMainKeyHandle( int KeyCode,int Type,int Key ) |
23077 | 519 { |
520 int msg = evNone; | |
521 | |
522 if ( Type != wsKeyPressed ) return; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
523 |
23077 | 524 if ( !Key ) |
525 { | |
526 switch ( KeyCode ) | |
527 { | |
33524 | 528 // 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
|
529 /*case wsXFMMPrev: msg=evPrev; break; |
23077 | 530 case wsXFMMStop: msg=evStop; break; |
531 case wsXFMMPlay: msg=evPlaySwitchToPause; break; | |
532 case wsXFMMNext: msg=evNext; break; | |
533 case wsXFMMVolUp: msg=evIncVolume; break; | |
534 case wsXFMMVolDown: msg=evDecVolume; break; | |
33536
fc1402410163
Remove support for Acer AirKey V keyboard multimedia keys.
ib
parents:
33535
diff
changeset
|
535 case wsXFMMMute: msg=evMute; break;*/ |
23077 | 536 } |
537 } | |
538 else | |
539 { | |
540 switch ( Key ) | |
541 { | |
542 case wsEnter: msg=evPlay; break; | |
543 case wsXF86LowerVolume: msg=evDecVolume; break; | |
544 case wsXF86RaiseVolume: msg=evIncVolume; break; | |
545 case wsXF86Mute: msg=evMute; break; | |
33525 | 546 case wsXF86Pause: |
23077 | 547 case wsXF86Play: msg=evPlaySwitchToPause; break; |
548 case wsXF86Stop: msg=evStop; break; | |
549 case wsXF86Prev: msg=evPrev; break; | |
550 case wsXF86Next: msg=evNext; break; | |
551 case wsXF86Media: msg=evLoad; break; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
552 case wsEscape: |
33555 | 553 if ( guiApp.subWindow.isFullScreen ) |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
554 { |
33555 | 555 if ( guiInfo.event_struct ) ((XEvent *)guiInfo.event_struct)->type=None; |
556 uiEventHandling( evNormalSize,0 ); | |
23077 | 557 return; |
558 } | |
559 default: vo_x11_putkey( Key ); return; | |
560 } | |
561 } | |
33555 | 562 if ( msg != evNone ) uiEventHandling( msg,0 ); |
23077 | 563 } |
564 | |
565 /* this will be used to handle Drag&Drop files */ | |
33555 | 566 void uiDandDHandler(int num,char** files) |
23077 | 567 { |
568 struct stat buf; | |
569 int f = 0; | |
570 | |
571 char* subtitles = NULL; | |
572 char* filename = NULL; | |
573 | |
574 if (num <= 0) | |
575 return; | |
576 | |
577 | |
578 /* now fill it with new items */ | |
579 for(f=0; f < num; f++){ | |
580 char* str = strdup( files[f] ); | |
581 plItem* item; | |
582 | |
24086
f5b32d12b691
remove gconvert_uri_to_filename() and use url_unescape_string() instead.
iive
parents:
23457
diff
changeset
|
583 url_unescape_string(str, files[f]); |
23077 | 584 |
585 if(stat(str,&buf) == 0 && S_ISDIR(buf.st_mode) == 0) { | |
586 /* this is not a directory so try to play it */ | |
587 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
|
588 |
23077 | 589 /* check if it is a subtitle file */ |
590 { | |
591 char* ext = strrchr(str,'.'); | |
592 if (ext) { | |
593 static char supported[] = "utf/sub/srt/smi/rt//txt/ssa/aqt/"; | |
594 char* type; | |
595 int len; | |
596 if((len=strlen(++ext)) && (type=strstr(supported,ext)) &&\ | |
597 (type-supported)%4 == 0 && *(type+len) == '/'){ | |
598 /* handle subtitle file */ | |
33739 | 599 nfree(subtitles); |
23077 | 600 subtitles = str; |
601 continue; | |
602 } | |
603 } | |
604 } | |
605 | |
606 /* clear playlist */ | |
607 if (filename == NULL) { | |
608 filename = files[f]; | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
609 listSet(gtkDelPl,NULL); |
23077 | 610 } |
611 | |
612 item = calloc(1,sizeof(plItem)); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
613 |
23077 | 614 /* FIXME: decompose file name ? */ |
615 /* yes -- Pontscho */ | |
616 if ( strrchr( str,'/' ) ) { | |
617 char * s = strrchr( str,'/' ); *s=0; s++; | |
618 item->name = gstrdup( s ); | |
619 item->path = gstrdup( str ); | |
620 } else { | |
621 item->name = strdup(str); | |
622 item->path = strdup(""); | |
623 } | |
33742
e1539e14d60f
Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents:
33739
diff
changeset
|
624 listSet(gtkAddPlItem,item); |
23077 | 625 } else { |
626 mp_msg( MSGT_GPLAYER,MSGL_WARN,MSGTR_NotAFile,str ); | |
627 } | |
628 free( str ); | |
629 } | |
630 | |
631 if (filename) { | |
33555 | 632 uiSetFileName( NULL,filename,STREAMTYPE_FILE ); |
33615
1f9a31d4f114
Replace all playback integer constants by their symbolic constants.
ib
parents:
33614
diff
changeset
|
633 if ( guiInfo.Playing == GUI_PLAY ) uiEventHandling( evStop,0 ); |
33555 | 634 uiEventHandling( evPlay,0 ); |
23077 | 635 } |
636 if (subtitles) { | |
33739 | 637 nfree(guiInfo.Subtitlename); |
33555 | 638 guiInfo.Subtitlename = subtitles; |
33763 | 639 mplayerLoadSubtitle(guiInfo.Subtitlename); |
23077 | 640 } |
641 } |