Mercurial > mplayer.hg
comparison Gui/mplayer/mw.h @ 1693:d237c5d4b216
GUI version n-1
author | arpi |
---|---|
date | Sat, 25 Aug 2001 21:04:29 +0000 |
parents | |
children | 216aae08226c |
comparison
equal
deleted
inserted
replaced
1692:6c98e425c091 | 1693:d237c5d4b216 |
---|---|
1 | |
2 // main window | |
3 | |
4 #include "mixer.h" | |
5 | |
6 unsigned char * mplDrawBuffer = NULL; | |
7 int mplMainRender = 1; | |
8 int mplMainAutoPlay = 0; | |
9 | |
10 int mainVisible = 1; | |
11 | |
12 int boxMoved = 0; | |
13 int msButton = 0; | |
14 int sx = 0,sy = 0; | |
15 int i,pot = 0; | |
16 | |
17 char * Translate( char * str ) | |
18 { | |
19 static char trbuf[512]; | |
20 char tmp[128]; | |
21 int i,c; | |
22 int t,h,m,s; | |
23 memset( trbuf,0,512 ); | |
24 memset( tmp,0,128 ); | |
25 for ( c=0,i=0;i < strlen( str );i++ ) | |
26 { | |
27 if ( str[i] != '$' ) { trbuf[c++]=str[i]; trbuf[c]=0; } | |
28 else | |
29 { | |
30 switch ( str[++i] ) | |
31 { | |
32 case 't': | |
33 if ( mplShMem->Track < 10 ) strcat( trbuf,"0" ); | |
34 sprintf( tmp,"%d",mplShMem->Track ); strcat( trbuf,tmp ); | |
35 break; | |
36 case 'f': | |
37 if ( strlen( gtkShMem->fs.filename ) ) | |
38 { | |
39 int i; | |
40 strcpy( tmp,gtkShMem->fs.filename ); | |
41 for ( i=0;i < strlen( tmp );i++ ) | |
42 { | |
43 t=0; | |
44 if ( ( tmp[i] >= 'A' )&&( tmp[i] <= 'Z' ) ) t=32; | |
45 tmp[i]=(char)( tmp[i] + t ); | |
46 } | |
47 if ( tmp[strlen( tmp ) - 4] == '.' ) tmp[strlen( tmp ) - 4]=0; | |
48 if ( tmp[strlen( tmp ) - 5] == '.' ) tmp[strlen( tmp ) - 5]=0; | |
49 } else strcpy( tmp,"no file loaded" ); | |
50 strcat( trbuf,tmp ); | |
51 break; | |
52 case 'F': | |
53 if ( strlen( gtkShMem->fs.filename ) ) | |
54 { | |
55 int i; | |
56 strcpy( tmp,gtkShMem->fs.filename ); | |
57 for ( i=0;i < strlen( tmp );i++ ) | |
58 { | |
59 char t = 0; | |
60 if ( ( tmp[i] >= 'a' )&&( tmp[i] <= 'z' ) ) t=32; | |
61 tmp[i]=tmp[i] - t; | |
62 } | |
63 if ( tmp[strlen( tmp ) - 4] == '.' ) tmp[strlen( tmp ) - 4]=0; | |
64 if ( tmp[strlen( tmp ) - 5] == '.' ) tmp[strlen( tmp ) - 5]=0; | |
65 } else strcpy( tmp,"NO FILE LOADED" ); | |
66 strcat( trbuf,tmp ); | |
67 break; | |
68 case 'o': | |
69 if ( strlen( gtkShMem->fs.filename ) ) | |
70 { | |
71 strcat( trbuf,gtkShMem->fs.filename ); | |
72 if ( trbuf[strlen( trbuf ) - 4] == '.' ) trbuf[strlen( trbuf ) - 4]=0; | |
73 if ( trbuf[strlen( trbuf ) - 5] == '.' ) trbuf[strlen( trbuf ) - 5]=0; | |
74 } else strcat( trbuf,"no file loaded" ); | |
75 break; | |
76 case '6': t=mplShMem->LengthInSec; goto calclengthhhmmss; | |
77 case '1': t=mplShMem->TimeSec; | |
78 calclengthhhmmss: | |
79 s=t%60; t=( t - s ) / 60; m=t%60; h=t/60; | |
80 sprintf( tmp,"%02d:%02d:%02d",h,m,s ); strcat( trbuf,tmp ); | |
81 break; | |
82 case '7': t=mplShMem->LengthInSec; goto calclengthmmmmss; | |
83 case '2': t=mplShMem->TimeSec; | |
84 calclengthmmmmss: | |
85 s=t%60; m=( ( t - s ) / 60 ) % 60; | |
86 sprintf( tmp,"%04d:%02d",m,s ); strcat( trbuf,tmp ); | |
87 break; | |
88 case '3': | |
89 sprintf( tmp,"%02d",( mplShMem->TimeSec - ( mplShMem->TimeSec % 60 ) ) / 3600 ); strcat( trbuf,tmp ); | |
90 break; | |
91 case '4': | |
92 sprintf( tmp,"%02d",( ( mplShMem->TimeSec - ( mplShMem->TimeSec % 60 ) ) / 60 ) % 60 ); strcat( trbuf,tmp ); | |
93 break; | |
94 case '5': | |
95 sprintf( tmp,"%02d",mplShMem->TimeSec % 60 ); strcat( trbuf,tmp ); | |
96 break; | |
97 case 'v': | |
98 sprintf( tmp,"%3.2f%%",mplShMem->Volume ); strcat( trbuf,tmp ); | |
99 break; | |
100 case 'V': | |
101 sprintf( tmp,"%3.1f",mplShMem->Volume ); strcat( trbuf,tmp ); | |
102 break; | |
103 case 'b': | |
104 sprintf( tmp,"%3.2f%%",mplShMem->Balance ); strcat( trbuf,tmp ); | |
105 break; | |
106 case 'B': | |
107 sprintf( tmp,"%3.1f",mplShMem->Balance ); strcat( trbuf,tmp ); | |
108 break; | |
109 case 's': | |
110 if ( mplShMem->Playing == 0 ) strcat( trbuf,"s" ); | |
111 break; | |
112 case 'l': | |
113 if ( mplShMem->Playing == 1 ) strcat( trbuf,"p" ); | |
114 break; | |
115 case 'e': | |
116 if ( mplShMem->Playing == 2 ) strcat( trbuf,"e" ); | |
117 break; | |
118 case '$': | |
119 strcat( trbuf,"$" ); | |
120 break; | |
121 default: continue; | |
122 } | |
123 c=strlen( trbuf ); | |
124 } | |
125 } | |
126 return trbuf; | |
127 } | |
128 | |
129 void PutImage( txSample * bf,int x,int y,int max,int ofs ) | |
130 { | |
131 int i=0,ix,iy; | |
132 unsigned long * buf = NULL; | |
133 unsigned long * drw = NULL; | |
134 unsigned long tmp; | |
135 | |
136 if ( ( !bf )||( bf->Image == NULL ) ) return; | |
137 | |
138 i=( bf->Width * ( bf->Height / max ) ) * ofs; | |
139 buf=(unsigned long *)mplDrawBuffer; | |
140 drw=(unsigned long *)bf->Image; | |
141 | |
142 for ( iy=y;iy < y+bf->Height / max;iy++ ) | |
143 for ( ix=x;ix < x+bf->Width;ix++ ) | |
144 { | |
145 tmp=drw[i++]; | |
146 if ( tmp != 0x00ff00ff ) | |
147 buf[ iy*appMPlayer.main.Bitmap.Width+ix ]=tmp; | |
148 } | |
149 } | |
150 | |
151 void mplMainDraw( wsParamDisplay ) | |
152 { | |
153 wItem * item; | |
154 txSample * image = NULL; | |
155 int i; | |
156 char * tmp; | |
157 | |
158 if ( appMPlayer.mainWindow.Visible == wsWindowNotVisible || | |
159 !mainVisible || | |
160 !appMPlayer.mainWindow.Mapped ) return; | |
161 | |
162 if ( mplMainRender ) | |
163 { | |
164 memcpy( mplDrawBuffer,appMPlayer.main.Bitmap.Image,appMPlayer.main.Bitmap.ImageSize ); | |
165 for( i=0;i < appMPlayer.NumberOfItems + 1;i++ ) | |
166 { | |
167 item=&appMPlayer.Items[i]; | |
168 switch( item->type ) | |
169 { | |
170 case itButton: | |
171 PutImage( &item->Bitmap,item->x,item->y,3,item->pressed ); | |
172 break; | |
173 case itHPotmeter: | |
174 PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) ); | |
175 PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed ); | |
176 break; | |
177 case itPotmeter: | |
178 PutImage( &item->Bitmap,item->x,item->y,item->phases, | |
179 item->phases * ( item->value / 100.0f ) ); | |
180 break; | |
181 case itSLabel: | |
182 image=fntRender( item->fontid,0,item->width,"%s",item->label ); | |
183 goto drawrenderedtext; | |
184 case itDLabel: | |
185 image=fntRender( item->fontid,( mplTimer / 10 )%item->width,item->width,"%s",Translate( item->label ) ); | |
186 drawrenderedtext: | |
187 PutImage( image,item->x,item->y,1,0 ); | |
188 if ( image ) | |
189 { | |
190 if ( image->Image ) free( image->Image ); | |
191 free( image ); | |
192 } | |
193 break; | |
194 } | |
195 } | |
196 wsConvert( &appMPlayer.mainWindow,mplDrawBuffer,appMPlayer.main.Bitmap.ImageSize ); | |
197 mplMainRender=0; | |
198 } | |
199 wsPutImage( &appMPlayer.mainWindow ); | |
200 } | |
201 | |
202 void mplMsgHandle( int msg,float param ) | |
203 { | |
204 int j; | |
205 | |
206 switch( msg ) | |
207 { | |
208 // --- user events | |
209 case evExit: | |
210 wsDoExit(); | |
211 break; | |
212 case evIconify: | |
213 wsIconify( appMPlayer.mainWindow ); | |
214 break; | |
215 case evFullScreen: | |
216 for ( j=0;j<appMPlayer.NumberOfItems + 1;j++ ) | |
217 { | |
218 if ( appMPlayer.Items[j].msg == evFullScreen ) | |
219 { | |
220 appMPlayer.Items[j].tmp=!appMPlayer.Items[j].tmp; | |
221 appMPlayer.Items[j].pressed=appMPlayer.Items[j].tmp; | |
222 } | |
223 } | |
224 mplMainRender=1; | |
225 mplFullScreen(); | |
226 break; | |
227 | |
228 case evPlaySwitchToPause: | |
229 if ( Filename ) | |
230 { | |
231 btnModify( evPlaySwitchToPause,btnDisabled ); | |
232 btnModify( evPauseSwitchToPlay,btnReleased ); | |
233 } | |
234 if ( mplShMem->Playing == 1 ) goto NoPause; | |
235 case evPlay: | |
236 mplMainRender=1; | |
237 mplPlay(); | |
238 break; | |
239 | |
240 case evPauseSwitchToPlay: | |
241 btnModify( evPlaySwitchToPause,btnReleased ); | |
242 btnModify( evPauseSwitchToPlay,btnDisabled ); | |
243 case evPause: | |
244 NoPause: | |
245 mplMainRender=1; | |
246 mplPause(); | |
247 break; | |
248 | |
249 case evStop: | |
250 btnModify( evPlaySwitchToPause,btnReleased ); | |
251 btnModify( evPauseSwitchToPlay,btnDisabled ); | |
252 mplMainRender=1; | |
253 mplStop(); | |
254 break; | |
255 | |
256 case evLoadPlay: | |
257 mplMainAutoPlay=1; | |
258 case evLoad: | |
259 mplMainRender=1; | |
260 gtkSendMessage( evLoad ); | |
261 break; | |
262 case evPrev: | |
263 mplMainRender=1; | |
264 #ifdef DEBUG | |
265 dbprintf( 1,"[mw.h] previous stream ...\n" ); | |
266 #endif | |
267 break; | |
268 case evNext: | |
269 mplMainRender=1; | |
270 #ifdef DEBUG | |
271 dbprintf( 1,"[mw.h] next stream ...\n" ); | |
272 #endif | |
273 break; | |
274 | |
275 case evPlayList: | |
276 mplMainRender=1; | |
277 if ( gtkVisiblePlayList ) | |
278 { | |
279 btnModify( evPlayList,btnReleased ); | |
280 gtkShMem->vs.window=evPlayList; | |
281 gtkSendMessage( evHideWindow ); | |
282 gtkVisiblePlayList=0; | |
283 } | |
284 else | |
285 { | |
286 gtkSendMessage( evPlayList ); | |
287 btnModify( evPlayList,btnPressed ); | |
288 gtkVisiblePlayList=1; | |
289 } | |
290 break; | |
291 | |
292 case evSkinBrowser: gtkSendMessage( evSkinBrowser ); break; | |
293 case evAbout: gtkSendMessage( evAbout ); break; | |
294 case evPreferences: gtkSendMessage( evPreferences ); break; | |
295 | |
296 case evForward1min: mplRelSeek( 60 ); break; | |
297 case evBackward1min: mplRelSeek( -60 ); break; | |
298 case evForward10sec: mplRelSeek( 10 ); break; | |
299 case evBackward10sec: mplRelSeek( -10 ); break; | |
300 case evSetMoviePosition: mplAbsSeek( param ); break; | |
301 | |
302 case evIncVolume: mixerIncVolume(); break; | |
303 case evDecVolume: mixerDecVolume(); break; | |
304 case evSetVolume: mixerSetVolume( param ); break; | |
305 case evSetBalance: mixerSetBalance( param ); break; | |
306 case evMute: mixerMute(); break; | |
307 | |
308 case evIncAudioBufDelay: mplIncAudioBufDelay(); break; | |
309 case evDecAudioBufDelay: mplDecAudioBufDelay(); break; | |
310 | |
311 case evNormalSize: if ( mplShMem->Playing ) wsResizeWindow( &appMPlayer.subWindow,mplwidth,mplheight ); break; | |
312 case evDoubleSize: if ( mplShMem->Playing ) wsResizeWindow( &appMPlayer.subWindow,mplwidth * 2,mplheight * 2 ); break; | |
313 | |
314 // --- timer events | |
315 case evHideMouseCursor: | |
316 wsVisibleMouse( &appMPlayer.subWindow,wsHideMouseCursor ); | |
317 break; | |
318 case evRedraw: | |
319 mplMainRender=1; | |
320 wsPostRedisplay( &appMPlayer.mainWindow ); | |
321 if ( !mplShMem->Playing ) wsPostRedisplay( &appMPlayer.subWindow ); | |
322 XFlush( wsDisplay ); | |
323 mplRedrawTimer=mplRedrawTimerConst; | |
324 break; | |
325 case evGeneralTimer: | |
326 if ( mplMainAutoPlay ) | |
327 { | |
328 mplMainRender=1; | |
329 mplMainAutoPlay=0; | |
330 mplPlay(); | |
331 } | |
332 break; | |
333 // --- system events | |
334 case evNone: | |
335 dbprintf( 1,"[mw] event none received.\n" ); | |
336 break; | |
337 default: | |
338 dbprintf( 1,"[mw] unknown event received ( %d,%.2f ).\n",msg,param ); | |
339 break; | |
340 } | |
341 } | |
342 | |
343 void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY ) | |
344 { | |
345 static int itemtype = 0; | |
346 static int SelectedButton = -1; | |
347 wItem * item = NULL; | |
348 float value = 0.0f; | |
349 wsVisibleMouse( &appMPlayer.subWindow,wsShowMouseCursor ); | |
350 switch ( Button ) | |
351 { | |
352 case wsPRMouseButton: | |
353 mplShowMenu( RX,RY ); | |
354 msButton=wsPRMouseButton; | |
355 break; | |
356 case wsRRMouseButton: | |
357 mplHideMenu( RX,RY ); | |
358 msButton=0; | |
359 break; | |
360 case wsPLMouseButton: | |
361 sx=X; sy=Y; | |
362 boxMoved=1; | |
363 msButton=wsPLMouseButton; | |
364 for ( i=0;i < appMPlayer.NumberOfItems + 1;i++ ) | |
365 { | |
366 item=&appMPlayer.Items[i]; | |
367 if ( item->pressed != btnDisabled ) | |
368 { | |
369 switch( item->type ) | |
370 { | |
371 case itButton: | |
372 if ( wgIsRect( X,Y, | |
373 item->x,item->y, | |
374 item->x+item->width,item->y+item->height ) ) | |
375 { | |
376 item->pressed=btnPressed; | |
377 mplMainRender=1; | |
378 SelectedButton=i; | |
379 msButton=0; | |
380 boxMoved=0; | |
381 } | |
382 if ( ( SelectedButton > -1 ) && | |
383 ( ( ( appMPlayer.Items[SelectedButton].msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) || | |
384 ( ( appMPlayer.Items[SelectedButton].msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) ) | |
385 { | |
386 appMPlayer.Items[SelectedButton].pressed=btnDisabled; | |
387 SelectedButton=i; | |
388 appMPlayer.Items[SelectedButton].pressed=btnPressed; | |
389 } | |
390 itemtype=itButton; | |
391 break; | |
392 case itPotmeter: | |
393 if ( wgIsRect( X,Y, | |
394 item->x,item->y, | |
395 item->x+item->width,item->y+item->height ) ) | |
396 { | |
397 item->pressed=btnPressed; | |
398 mplMainRender=1; | |
399 SelectedButton=i; | |
400 boxMoved=0; | |
401 msButton=itPotmeter; | |
402 itemtype=itPotmeter; | |
403 } | |
404 break; | |
405 case itHPotmeter: | |
406 if ( wgIsRect( X,Y, | |
407 item->x,item->y, | |
408 item->x+item->width,item->y+item->height ) ) | |
409 { | |
410 item->pressed=btnPressed; | |
411 mplMainRender=1; | |
412 SelectedButton=i; | |
413 boxMoved=0; | |
414 msButton=itHPotmeter; | |
415 itemtype=itHPotmeter; | |
416 } | |
417 break; | |
418 } | |
419 } | |
420 } | |
421 break; | |
422 case wsMoveMouse: | |
423 item=&appMPlayer.Items[SelectedButton]; | |
424 switch ( msButton ) | |
425 { | |
426 case wsPLMouseButton: | |
427 wsMoveWindow( &appMPlayer.mainWindow,RX - abs( sx ),RY - abs( sy ) ); | |
428 mplMainRender=0; | |
429 break; | |
430 case wsPRMouseButton: | |
431 mplMenuMouseHandle( X,Y,RX,RY ); | |
432 break; | |
433 case itPotmeter: | |
434 value=(float)( X - item->x ) / item->width * 100.0f; | |
435 goto potihandled; | |
436 case itHPotmeter: | |
437 value=(float)( X - item->x ) / item->width * 100.0f; | |
438 potihandled: | |
439 btnModify( item->msg,value ); | |
440 if ( ( item->msg == evSetVolume )||( item->msg == evSetBalance ) ) mplMsgHandle( item->msg,item->value ); | |
441 mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow ); | |
442 break; | |
443 } | |
444 break; | |
445 case wsRLMouseButton: | |
446 msButton=0; | |
447 boxMoved=0; | |
448 item=&appMPlayer.Items[SelectedButton]; | |
449 item->pressed=btnReleased; | |
450 switch( itemtype ) | |
451 { | |
452 case itButton: | |
453 if ( wgIsRect( X,Y, | |
454 item->x,item->y, | |
455 item->x+item->width,item->y+item->height ) ) value=0; | |
456 break; | |
457 case itPotmeter: | |
458 case itHPotmeter: | |
459 btnModify( item->msg,(float)( X - item->x ) / item->width * 100.0f ); | |
460 value=item->value; | |
461 break; | |
462 } | |
463 if ( SelectedButton != -1 ) mplMsgHandle( item->msg,value ); | |
464 SelectedButton=-1; | |
465 mplMainRender=1; | |
466 itemtype=0; | |
467 break; | |
468 case wsPMMouseButton: break; | |
469 case wsRMMouseButton: break; | |
470 } | |
471 if ( Button != wsMoveMouse ) wsPostRedisplay( &appMPlayer.mainWindow ); | |
472 } | |
473 | |
474 int keyPressed = 0; | |
475 | |
476 void mplMainKeyHandle( int State,int Type,int Key ) | |
477 { | |
478 int msg = evNone; | |
479 switch ( Key ) | |
480 { | |
481 case '.': | |
482 case '>': msg=evNext; break; | |
483 case ',': | |
484 case '<': msg=evPrev; break; | |
485 | |
486 case wsx: | |
487 case wsX: | |
488 case wsEscape: msg=evExit; break; | |
489 | |
490 case wsUp: msg=evForward1min; break; | |
491 case wsDown: msg=evBackward1min; break; | |
492 case wsRight: msg=evForward10sec; break; | |
493 case wsLeft: msg=evBackward10sec; break; | |
494 | |
495 case wsGrayMul: msg=evIncVolume; break; | |
496 case wsGrayDiv: msg=evDecVolume; break; | |
497 | |
498 case wsGrayPlus: msg=evIncAudioBufDelay; break; | |
499 case wsGrayMinus: msg=evDecAudioBufDelay; break; | |
500 | |
501 case wsEnter: msg=evPlay; break; | |
502 case wsSpace: msg=evPause; break; | |
503 case wsa: | |
504 case wsA: msg=evAbout; break; | |
505 case wsb: | |
506 case wsB: msg=evSkinBrowser; break; | |
507 case wse: | |
508 case wsE: msg=evEqualeaser; break; | |
509 case wsf: | |
510 case wsF: msg=evFullScreen; break; | |
511 case wsl: | |
512 case wsL: msg=evLoad; break; | |
513 case wsm: | |
514 case wsM: msg=evMute; break; | |
515 case wss: | |
516 case wsS: msg=evStop; break; | |
517 case wsp: | |
518 case wsP: msg=evPlayList; break; | |
519 } | |
520 if ( ( msg != evNone )&&( Type == wsKeyPressed ) ) | |
521 { | |
522 mplMsgHandle( msg,0 ); | |
523 mplMainRender=1; | |
524 wsPostRedisplay( &appMPlayer.mainWindow ); | |
525 } | |
526 } |