comparison Gui/mplayer/mw.h @ 2851:b64fa5d25142

add roleld mouse support and some small bugfix. neked jol a testedbe.
author pontscho
date Mon, 12 Nov 2001 12:26:09 +0000
parents 3248aabc6d1d
children fd44ecf77f8d
comparison
equal deleted inserted replaced
2850:2f1e40539fe2 2851:b64fa5d25142
8 int mplMainAutoPlay = 0; 8 int mplMainAutoPlay = 0;
9 9
10 int mainVisible = 1; 10 int mainVisible = 1;
11 11
12 int boxMoved = 0; 12 int boxMoved = 0;
13 int msButton = 0;
14 int sx = 0,sy = 0; 13 int sx = 0,sy = 0;
15 int i,pot = 0; 14 int i,pot = 0;
16 15
17 char * Translate( char * str ) 16 char * Translate( char * str )
18 { 17 {
92 case 'B': sprintf( tmp,"%3.1f",mplShMem->Balance ); strcat( trbuf,tmp ); break; 91 case 'B': sprintf( tmp,"%3.1f",mplShMem->Balance ); strcat( trbuf,tmp ); break;
93 case 'd': sprintf( tmp,"%d",mplShMem->FrameDrop ); strcat( trbuf,tmp ); break; 92 case 'd': sprintf( tmp,"%d",mplShMem->FrameDrop ); strcat( trbuf,tmp ); break;
94 case 's': if ( mplShMem->Playing == 0 ) strcat( trbuf,"s" ); break; 93 case 's': if ( mplShMem->Playing == 0 ) strcat( trbuf,"s" ); break;
95 case 'l': if ( mplShMem->Playing == 1 ) strcat( trbuf,"p" ); break; 94 case 'l': if ( mplShMem->Playing == 1 ) strcat( trbuf,"p" ); break;
96 case 'e': if ( mplShMem->Playing == 2 ) strcat( trbuf,"e" ); break; 95 case 'e': if ( mplShMem->Playing == 2 ) strcat( trbuf,"e" ); break;
97 case 'a': 96 case 'a':
98 switch ( mplShMem->AudioType ) 97 switch ( mplShMem->AudioType )
99 { 98 {
100 case 0: strcat( trbuf,"n" ); break; 99 case 0: strcat( trbuf,"n" ); break;
101 case 1: strcat( trbuf,"m" ); break; 100 case 1: strcat( trbuf,"m" ); break;
102 case 2: strcat( trbuf,"t" ); break; 101 case 2: strcat( trbuf,"t" ); break;
103 } 102 }
104 break; 103 break;
105 case 'T': 104 case 'T':
106 switch ( mplShMem->StreamType ) 105 switch ( mplShMem->StreamType )
107 { 106 {
108 case STREAMTYPE_FILE: strcat( trbuf,"f" ); break; 107 case STREAMTYPE_FILE: strcat( trbuf,"f" ); break;
109 case STREAMTYPE_VCD: strcat( trbuf,"v" ); break; 108 case STREAMTYPE_VCD: strcat( trbuf,"v" ); break;
110 case STREAMTYPE_STREAM: strcat( trbuf,"u" ); break; 109 case STREAMTYPE_STREAM: strcat( trbuf,"u" ); break;
111 case STREAMTYPE_DVD: strcat( trbuf,"d" ); break; 110 case STREAMTYPE_DVD: strcat( trbuf,"d" ); break;
112 default: strcat( trbuf," " ); break; 111 default: strcat( trbuf," " ); break;
113 } 112 }
114 break; 113 break;
115 case '$': strcat( trbuf,"$" ); break; 114 case '$': strcat( trbuf,"$" ); break;
116 default: continue; 115 default: continue;
117 } 116 }
118 c=strlen( trbuf ); 117 c=strlen( trbuf );
119 } 118 }
160 { 159 {
161 case 2: 160 case 2:
162 case 0: 161 case 0:
163 btnModify( evPlaySwitchToPause,btnReleased ); 162 btnModify( evPlaySwitchToPause,btnReleased );
164 btnModify( evPauseSwitchToPlay,btnDisabled ); 163 btnModify( evPauseSwitchToPlay,btnDisabled );
165 break; 164 break;
166 case 1: 165 case 1:
167 if ( mplShMem->Filename[0] != 0 ) 166 if ( mplShMem->Filename[0] != 0 )
168 { 167 {
169 btnModify( evPlaySwitchToPause,btnDisabled ); 168 btnModify( evPlaySwitchToPause,btnDisabled );
170 btnModify( evPauseSwitchToPlay,btnReleased ); 169 btnModify( evPauseSwitchToPlay,btnReleased );
171 } 170 }
172 } 171 }
173 172
174 // --- erosen ideiglenes. 173 // --- erosen ideiglenes.
175 strcpy( gtkShMem->fs.filename,mplShMem->Filename ); 174 strcpy( gtkShMem->fs.filename,mplShMem->Filename );
176 // --- 175 // ---
177 176
186 case itButton: 185 case itButton:
187 PutImage( &item->Bitmap,item->x,item->y,3,item->pressed ); 186 PutImage( &item->Bitmap,item->x,item->y,3,item->pressed );
188 break; 187 break;
189 case itPotmeter: 188 case itPotmeter:
190 PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) ); 189 PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) );
191 break; 190 break;
192 case itHPotmeter: 191 case itHPotmeter:
193 PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) ); 192 PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) );
194 PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed ); 193 PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed );
195 break; 194 break;
196 case itSLabel: 195 case itSLabel:
197 image=fntRender( item->fontid,0,item->width,"%s",item->label ); 196 image=fntRender( item->fontid,0,item->width,"%s",item->label );
198 goto drawrenderedtext; 197 goto drawrenderedtext;
199 case itDLabel: 198 case itDLabel:
200 image=fntRender( item->fontid,mplTimer%item->width,item->width,"%s",Translate( item->label ) ); 199 image=fntRender( item->fontid,mplTimer%item->width,item->width,"%s",Translate( item->label ) );
228 { 227 {
229 // --- user events 228 // --- user events
230 case evExit: 229 case evExit:
231 // IZE("evExit"); 230 // IZE("evExit");
232 wsDoExit(); // sets wsTrue=False; 231 wsDoExit(); // sets wsTrue=False;
233 exit_player( "Exit" ); 232 exit_player( "Exit" );
234 break; 233 break;
235 case evIconify: 234 case evIconify:
236 switch ( (int)param ) 235 switch ( (int)param )
237 { 236 {
238 case 0: wsIconify( appMPlayer.mainWindow ); break; 237 case 0: wsIconify( appMPlayer.mainWindow ); break;
239 case 1: wsIconify( appMPlayer.subWindow ); break; 238 case 1: wsIconify( appMPlayer.subWindow ); break;
240 } 239 }
241 break; 240 break;
242 case evFullScreen: 241 case evFullScreen:
243 IZE("evFullS"); 242 IZE("evFullS");
244 for ( j=0;j<appMPlayer.NumberOfItems + 1;j++ ) 243 for ( j=0;j<appMPlayer.NumberOfItems + 1;j++ )
245 { 244 {
338 case evSetMoviePosition: mplAbsSeek( param ); break; 337 case evSetMoviePosition: mplAbsSeek( param ); break;
339 338
340 case evIncVolume: vo_x11_putkey( wsGrayMul ); break; 339 case evIncVolume: vo_x11_putkey( wsGrayMul ); break;
341 case evDecVolume: vo_x11_putkey( wsGrayDiv ); break; 340 case evDecVolume: vo_x11_putkey( wsGrayDiv ); break;
342 case evMute: mplShMem->Mute=1; break; 341 case evMute: mplShMem->Mute=1; break;
343 case evSetVolume: 342 case evSetVolume:
344 case evSetBalance: mplShMem->VolumeChanged=1; break; 343 case evSetBalance: mplShMem->VolumeChanged=1; break;
345 344
346 345
347 case evNormalSize: 346 case evNormalSize:
348 if ( mplShMem->Playing ) 347 if ( mplShMem->Playing )
349 { 348 {
350 appMPlayer.subWindow.isFullScreen=True; 349 appMPlayer.subWindow.isFullScreen=True;
351 appMPlayer.subWindow.OldX=( wsMaxX - moviewidth ) / 2; 350 appMPlayer.subWindow.OldX=( wsMaxX - moviewidth ) / 2;
352 appMPlayer.subWindow.OldY=( wsMaxY - movieheight ) / 2; 351 appMPlayer.subWindow.OldY=( wsMaxY - movieheight ) / 2;
353 appMPlayer.subWindow.OldWidth=moviewidth; appMPlayer.subWindow.OldHeight=movieheight; 352 appMPlayer.subWindow.OldWidth=moviewidth; appMPlayer.subWindow.OldHeight=movieheight;
354 wsFullScreen( &appMPlayer.subWindow ); 353 wsFullScreen( &appMPlayer.subWindow );
355 mplResize( appMPlayer.subWindow.X,appMPlayer.subWindow.Y,moviewidth,movieheight ); 354 mplResize( appMPlayer.subWindow.X,appMPlayer.subWindow.Y,moviewidth,movieheight );
356 } 355 }
357 break; 356 break;
358 case evDoubleSize: 357 case evDoubleSize:
359 if ( mplShMem->Playing ) 358 if ( mplShMem->Playing )
360 { 359 {
361 appMPlayer.subWindow.isFullScreen=True; 360 appMPlayer.subWindow.isFullScreen=True;
362 appMPlayer.subWindow.OldX=( wsMaxX - moviewidth * 2 ) / 2; 361 appMPlayer.subWindow.OldX=( wsMaxX - moviewidth * 2 ) / 2;
363 appMPlayer.subWindow.OldY=( wsMaxY - movieheight * 2 ) / 2; 362 appMPlayer.subWindow.OldY=( wsMaxY - movieheight * 2 ) / 2;
364 appMPlayer.subWindow.OldWidth=moviewidth * 2; appMPlayer.subWindow.OldHeight=movieheight * 2; 363 appMPlayer.subWindow.OldWidth=moviewidth * 2; appMPlayer.subWindow.OldHeight=movieheight * 2;
365 wsFullScreen( &appMPlayer.subWindow ); 364 wsFullScreen( &appMPlayer.subWindow );
366 mplResize( appMPlayer.subWindow.X,appMPlayer.subWindow.Y,moviewidth,movieheight ); 365 mplResize( appMPlayer.subWindow.X,appMPlayer.subWindow.Y,moviewidth,movieheight );
367 } 366 }
368 break; 367 break;
369 368
370 // --- timer events 369 // --- timer events
371 case evHideMouseCursor: 370 case evHideMouseCursor:
372 wsVisibleMouse( &appMPlayer.subWindow,wsHideMouseCursor ); 371 wsVisibleMouse( &appMPlayer.subWindow,wsHideMouseCursor );
373 break; 372 break;
374 case evRedraw: 373 case evRedraw:
375 mplMainRender=1; 374 mplMainRender=1;
376 wsPostRedisplay( &appMPlayer.mainWindow ); 375 wsPostRedisplay( &appMPlayer.mainWindow );
377 // if ( !mplShMem->Playing ) 376 // if ( !mplShMem->Playing )
378 // wsPostRedisplay( &appMPlayer.subWindow ); 377 // wsPostRedisplay( &appMPlayer.subWindow );
379 XFlush( wsDisplay ); 378 XFlush( wsDisplay );
380 mplRedrawTimer=mplRedrawTimerConst; 379 mplRedrawTimer=mplRedrawTimerConst;
381 break; 380 break;
382 case evGeneralTimer: 381 case evGeneralTimer:
383 if ( mplMainAutoPlay ) 382 if ( mplMainAutoPlay )
384 { 383 {
385 mplMainRender=1; 384 mplMainRender=1;
395 dbprintf( 1,"[mw] unknown event received ( %d,%.2f ).\n",msg,param ); 394 dbprintf( 1,"[mw] unknown event received ( %d,%.2f ).\n",msg,param );
396 break; 395 break;
397 } 396 }
398 } 397 }
399 398
399 #define itPLMButton (itNULL - 1)
400 #define itPRMButton (itNULL - 2)
401
400 void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY ) 402 void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY )
401 { 403 {
402 static int itemtype = 0; 404 static int itemtype = 0;
403 static int SelectedButton = -1; 405 int i;
404 wItem * item = NULL; 406 wItem * item = NULL;
405 float value = 0.0f; 407 float value = 0.0f;
408
409 static int SelectedItem = -1;
410 int currentselected = -1;
411
406 wsVisibleMouse( &appMPlayer.subWindow,wsShowMouseCursor ); 412 wsVisibleMouse( &appMPlayer.subWindow,wsShowMouseCursor );
413
414 for ( i=0;i < appMPlayer.NumberOfItems + 1;i++ )
415 if ( ( appMPlayer.Items[i].pressed != btnDisabled )&&
416 ( wgIsRect( X,Y,appMPlayer.Items[i].x,appMPlayer.Items[i].y,appMPlayer.Items[i].x+appMPlayer.Items[i].width,appMPlayer.Items[i].y+appMPlayer.Items[i].height ) ) )
417 { currentselected=i; break; }
418
407 switch ( Button ) 419 switch ( Button )
408 { 420 {
409 case wsPRMouseButton: 421 case wsPRMouseButton:
410 mplShowMenu( RX,RY ); 422 mplShowMenu( RX,RY );
411 msButton=wsPRMouseButton; 423 itemtype=itPRMButton;
412 break; 424 break;
413 case wsRRMouseButton: 425 case wsRRMouseButton:
414 mplHideMenu( RX,RY ); 426 mplHideMenu( RX,RY );
415 msButton=0;
416 break; 427 break;
428
417 case wsPLMouseButton: 429 case wsPLMouseButton:
418 sx=X; sy=Y; 430 sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; // if move the main window
419 boxMoved=1; 431 SelectedItem=currentselected;
420 msButton=wsPLMouseButton; 432 if ( SelectedItem == -1 ) break; // yeees, i'm move the fucking window
421 for ( i=0;i < appMPlayer.NumberOfItems + 1;i++ ) 433 boxMoved=0; mplMainRender=1; // No, not move the window, i'm pressed one button
434 item=&appMPlayer.Items[SelectedItem];
435 itemtype=item->type;
436 item->pressed=btnPressed;
437 item->used=1;
438 switch( item->type )
422 { 439 {
423 item=&appMPlayer.Items[i]; 440 case itButton:
424 if ( item->pressed != btnDisabled ) 441 if ( ( SelectedItem > -1 ) &&
425 { 442 ( ( ( appMPlayer.Items[SelectedItem].msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) ||
426 switch( item->type ) 443 ( ( appMPlayer.Items[SelectedItem].msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) )
427 { 444 { appMPlayer.Items[SelectedItem].pressed=btnDisabled; }
428 case itButton: 445 break;
429 if ( wgIsRect( X,Y,
430 item->x,item->y,
431 item->x+item->width,item->y+item->height ) )
432 {
433 item->pressed=btnPressed;
434 mplMainRender=1;
435 SelectedButton=i;
436 msButton=0;
437 boxMoved=0;
438 }
439 if ( ( SelectedButton > -1 ) &&
440 ( ( ( appMPlayer.Items[SelectedButton].msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) ||
441 ( ( appMPlayer.Items[SelectedButton].msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) )
442 {
443 appMPlayer.Items[SelectedButton].pressed=btnDisabled;
444 SelectedButton=i;
445 appMPlayer.Items[SelectedButton].pressed=btnPressed;
446 }
447 itemtype=itButton;
448 break;
449 case itPotmeter:
450 if ( wgIsRect( X,Y,
451 item->x,item->y,
452 item->x+item->width,item->y+item->height ) )
453 {
454 item->pressed=btnPressed;
455 item->used=1;
456 mplMainRender=1;
457 SelectedButton=i;
458 boxMoved=0;
459 msButton=itPotmeter;
460 itemtype=itPotmeter;
461 }
462 break;
463 case itHPotmeter:
464 if ( wgIsRect( X,Y,
465 item->x,item->y,
466 item->x+item->width,item->y+item->height ) )
467 {
468 item->pressed=btnPressed;
469 item->used=1;
470 mplMainRender=1;
471 SelectedButton=i;
472 boxMoved=0;
473 msButton=itHPotmeter;
474 itemtype=itHPotmeter;
475 }
476 break;
477 }
478 }
479 } 446 }
480 break; 447 break;
448 case wsRLMouseButton:
449 boxMoved=0;
450 item=&appMPlayer.Items[SelectedItem];
451 item->pressed=btnReleased;
452 SelectedItem=-1;
453 if ( currentselected == - 1 ) { itemtype=0; break; }
454 value=0;
455 switch( itemtype )
456 {
457 case itPotmeter:
458 case itHPotmeter:
459 item->used=0;
460 btnModify( item->msg,(float)( X - item->x ) / item->width * 100.0f );
461 switch ( item->msg )
462 {
463 case evSetVolume:
464 mplShMem->VolumeChanged=1;
465 mplShMem->Volume=item->value;
466 break;
467 }
468 value=item->value;
469 break;
470 }
471 mplMsgHandle( item->msg,value );
472 mplMainRender=1;
473 itemtype=0;
474 break;
475
476 // --- rolled mouse ... de szar :)))
477 case wsP5MouseButton: value=-2.5f; goto rollerhandled;
478 case wsP4MouseButton: value= 2.5f;
479 rollerhandled:
480 item=&appMPlayer.Items[currentselected];
481 if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) )
482 {
483 item->used=0;
484 item->value+=value;
485 btnModify( item->msg,item->value );
486 switch ( item->msg )
487 {
488 case evSetVolume:
489 mplShMem->VolumeChanged=1;
490 mplShMem->Volume=item->value;
491 break;
492 }
493 mplMsgHandle( item->msg,item->value );
494 mplMainRender=1;
495 }
496 break;
497
498 // --- moving
481 case wsMoveMouse: 499 case wsMoveMouse:
482 item=&appMPlayer.Items[SelectedButton]; 500 item=&appMPlayer.Items[SelectedItem];
483 switch ( msButton ) 501 switch ( itemtype )
484 { 502 {
485 case wsPLMouseButton: 503 case itPLMButton:
486 wsMoveWindow( &appMPlayer.mainWindow,RX - abs( sx ),RY - abs( sy ) ); 504 wsMoveWindow( &appMPlayer.mainWindow,RX - abs( sx ),RY - abs( sy ) );
487 mplMainRender=0; 505 mplMainRender=0;
488 break; 506 break;
489 case wsPRMouseButton: 507 case itPRMButton:
490 mplMenuMouseHandle( X,Y,RX,RY ); 508 mplMenuMouseHandle( X,Y,RX,RY );
491 break; 509 break;
492 case itPotmeter: 510 case itPotmeter:
493 item->value=(float)( X - item->x ) / item->width * 100.0f; 511 item->value=(float)( X - item->x ) / item->width * 100.0f;
494 goto potihandled; 512 goto potihandled;
495 case itHPotmeter: 513 case itHPotmeter:
496 item->value=(float)( X - item->x ) / item->width * 100.0f; 514 item->value=(float)( X - item->x ) / item->width * 100.0f;
497 potihandled: 515 potihandled:
498 if ( item->value > 100.0f ) item->value=100.0f; 516 if ( item->value > 100.0f ) item->value=100.0f;
499 if ( item->value < 0.0f ) item->value=0.0f; 517 if ( item->value < 0.0f ) item->value=0.0f;
500 if ( ( item->msg == evSetVolume )||( item->msg == evSetBalance ) ) 518 switch ( item->msg )
501 { 519 {
502 mplShMem->VolumeChanged=1; 520 case evSetVolume:
503 mplShMem->Volume=item->value; 521 mplShMem->VolumeChanged=1;
504 } 522 mplShMem->Volume=item->value;
505 mplMsgHandle( item->msg,item->value ); 523 break;
524 }
525 mplMsgHandle( item->msg,item->value );
506 mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow ); 526 mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow );
507 break; 527 break;
508 } 528 }
509 break; 529 break;
510 case wsRLMouseButton:
511 msButton=0;
512 boxMoved=0;
513 item=&appMPlayer.Items[SelectedButton];
514 item->pressed=btnReleased;
515 switch( itemtype )
516 {
517 case itButton:
518 if ( wgIsRect( X,Y,
519 item->x,item->y,
520 item->x+item->width,item->y+item->height ) ) value=0;
521 break;
522 case itPotmeter:
523 case itHPotmeter:
524 item->used=0;
525 btnModify( item->msg,(float)( X - item->x ) / item->width * 100.0f );
526 if ( ( item->msg == evSetVolume )||( item->msg == evSetBalance ) )
527 {
528 mplShMem->VolumeChanged=1;
529 mplShMem->Volume=item->value;
530 }
531 value=item->value;
532 break;
533 }
534 if ( SelectedButton != -1 ) mplMsgHandle( item->msg,value );
535 SelectedButton=-1;
536 mplMainRender=1;
537 itemtype=0;
538 break;
539 case wsPMMouseButton: break;
540 case wsRMMouseButton: break;
541 } 530 }
542 if ( Button != wsMoveMouse ) wsPostRedisplay( &appMPlayer.mainWindow ); 531 if ( Button != wsMoveMouse ) wsPostRedisplay( &appMPlayer.mainWindow );
543 } 532 }
544 533
545 int keyPressed = 0; 534 int keyPressed = 0;
553 case '>': msg=evNext; break; 542 case '>': msg=evNext; break;
554 case ',': 543 case ',':
555 case '<': msg=evPrev; break; 544 case '<': msg=evPrev; break;
556 545
557 case wsEscape: msg=evExit; break; 546 case wsEscape: msg=evExit; break;
558
559 // case wsUp: msg=evForward1min; break;
560 // case wsDown: msg=evBackward1min; break;
561 // case wsRight: msg=evForward10sec; break;
562 // case wsLeft: msg=evBackward10sec; break;
563
564 // case wsGrayMul: msg=evIncVolume; break;
565 // case wsGrayDiv: msg=evDecVolume; break;
566 547
567 case wsEnter: msg=evPlay; break; 548 case wsEnter: msg=evPlay; break;
568 case wsSpace: msg=evPause; break; 549 case wsSpace: msg=evPause; break;
569 case wsa: 550 case wsa:
570 case wsA: msg=evAbout; break; 551 case wsA: msg=evAbout; break;
580 case wsM: msg=evMute; break; 561 case wsM: msg=evMute; break;
581 case wss: 562 case wss:
582 case wsS: msg=evStop; break; 563 case wsS: msg=evStop; break;
583 case wsp: 564 case wsp:
584 case wsP: msg=evPlayList; break; 565 case wsP: msg=evPlayList; break;
585 default: vo_x11_putkey( Key ); return; 566 default: vo_x11_putkey( Key ); return;
586 } 567 }
587 if ( ( msg != evNone )&&( Type == wsKeyPressed ) ) 568 if ( ( msg != evNone )&&( Type == wsKeyPressed ) )
588 { 569 {
589 mplMsgHandle( msg,0 ); 570 mplMsgHandle( msg,0 );
590 // mplMainRender=1; 571 // mplMainRender=1;