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 }