void uiSubMouseHandle( int Button,int X,int Y,int RX,int RY ) { static int mplSubMoved = 0; static int msButton = 0; uiPlaybarShow( Y ); switch( Button ) { case wsRRMouseButton: gtkShow( ivShowPopUpMenu,NULL ); break; case wsPMMouseButton: gtkShow( ivHidePopUpMenu,NULL ); uiShowMenu( RX,RY ); msButton=wsPMMouseButton; break; case wsRMMouseButton: uiHideMenu( RX,RY,1 ); msButton=0; break; /* --- */ case wsPLMouseButton: gtkShow( ivHidePopUpMenu,NULL ); sx=X; sy=Y; msButton=wsPLMouseButton; mplSubMoved=0; break; case wsMoveMouse: switch ( msButton ) { case wsPLMouseButton: mplSubMoved=1; if ( !guiApp.subWindow.isFullScreen ) { wsMoveWindow( &guiApp.subWindow,True,RX - sx,RY - sy ); guiApp.sub.x = guiApp.subWindow.X; guiApp.sub.y = guiApp.subWindow.Y; // NOTE TO MYSELF: dragging the title bar goes unnoticed? } break; case wsPMMouseButton: uiMenuMouseHandle( RX,RY ); break; default: uiPlaybarShow( Y ); break; } break; case wsRLMouseButton: if ( ( !mplSubMoved )&&( guiApp.subWindow.isFullScreen ) ) { if( subVisible++%2 ) wsRaiseWindowTop( wsDisplay,guiApp.mainWindow.WindowID ); else wsRaiseWindowTop( wsDisplay,guiApp.subWindow.WindowID ); } msButton=0; mplSubMoved=0; break; } }
static void uiVideoMouse( int Button,int X,int Y,int RX,int RY ) { static int mplVideoMoved = 0; static int msButton = 0; uiPlaybarShow( Y ); switch( Button ) { case wsRRMouseButton: gtkShow( ivShowPopUpMenu,NULL ); break; case wsPMMouseButton: gtkShow( ivHidePopUpMenu,NULL ); uiMenuShow( RX,RY ); msButton=wsPMMouseButton; break; case wsRMMouseButton: uiMenuHide( RX,RY,1 ); msButton=0; break; /* --- */ case wsPLMouseButton: gtkShow( ivHidePopUpMenu,NULL ); sx=X; sy=Y; msButton=wsPLMouseButton; mplVideoMoved=0; break; case wsMoveMouse: switch ( msButton ) { case wsPLMouseButton: mplVideoMoved=1; if ( !guiApp.videoWindow.isFullScreen ) { wsWindowMove( &guiApp.videoWindow,True,RX - sx,RY - sy ); } break; case wsPMMouseButton: if (guiApp.menuIsPresent) guiApp.menuWindow.MouseHandler( 0,RX,RY,0,0 ); break; default: uiPlaybarShow( Y ); break; } break; case wsRLMouseButton: if ( ( !mplVideoMoved )&&( guiApp.videoWindow.isFullScreen ) ) { // NOTE TO MYSELF: this doesn't work, fix later with wsWindowLayer()? if( videoVisible++%2 ) wsWindowRaiseTop( wsDisplay,guiApp.mainWindow.WindowID ); else wsWindowRaiseTop( wsDisplay,guiApp.videoWindow.WindowID ); } msButton=0; mplVideoMoved=0; break; } }
void mplSubMouseHandle( int Button,int X,int Y,int RX,int RY ) { static int mplSubMoved = 0; static int msButton = 0; mplPBShow( X,Y ); switch( Button ) { case wsRRMouseButton: gtkShow( evShowPopUpMenu,NULL ); break; case wsPMMouseButton: gtkShow( evHidePopUpMenu,NULL ); mplShowMenu( RX,RY ); msButton=wsPMMouseButton; break; case wsRMMouseButton: mplHideMenu( RX,RY,1 ); msButton=0; break; // --- case wsPLMouseButton: gtkShow( evHidePopUpMenu,NULL ); sx=X; sy=Y; msButton=wsPLMouseButton; mplSubMoved=0; break; case wsMoveMouse: switch ( msButton ) { case wsPLMouseButton: mplSubMoved=1; if ( !appMPlayer.subWindow.isFullScreen ) wsMoveWindow( &appMPlayer.subWindow,False,RX - sx,RY - sy ); break; case wsPMMouseButton: mplMenuMouseHandle( X,Y,RX,RY ); break; default: mplPBShow( X,Y ); break; } break; case wsRLMouseButton: if ( ( !mplSubMoved )&&( appMPlayer.subWindow.isFullScreen ) ) { if( SubVisible++%2 ) wsMoveTopWindow( wsDisplay,appMPlayer.mainWindow.WindowID ); else wsMoveTopWindow( wsDisplay,appMPlayer.subWindow.WindowID ); } msButton=0; mplSubMoved=0; break; } }
void mplEventHandling( int msg,float param ) { int iparam = (int)param; mixer_t *mixer = mpctx_get_mixer(guiIntfStruct.mpcontext); switch( msg ) { // --- user events case evExit: exit_player( "Exit" ); break; case evPlayNetwork: gfree( (void **)&guiIntfStruct.Subtitlename ); gfree( (void **)&guiIntfStruct.AudioFile ); guiIntfStruct.StreamType=STREAMTYPE_STREAM; goto play; case evSetURL: gtkShow( evPlayNetwork,NULL ); break; case evSetAudio: if ( !guiIntfStruct.demuxer || audio_id == iparam ) break; audio_id=iparam; goto play; case evSetVideo: if ( !guiIntfStruct.demuxer || video_id == iparam ) break; video_id=iparam; goto play; case evSetSubtitle: mp_property_do("sub",M_PROPERTY_SET,&iparam,guiIntfStruct.mpcontext); break; #ifdef CONFIG_VCD case evSetVCDTrack: guiIntfStruct.Track=iparam; case evPlayVCD: gtkSet( gtkClearStruct,0,(void *)guiALL ); guiIntfStruct.StreamType=STREAMTYPE_VCD; goto play; #endif #ifdef CONFIG_DVDREAD case evPlayDVD: guiIntfStruct.DVD.current_title=1; guiIntfStruct.DVD.current_chapter=1; guiIntfStruct.DVD.current_angle=1; play_dvd_2: gtkSet( gtkClearStruct,0,(void *)(guiALL - guiDVD) ); guiIntfStruct.StreamType=STREAMTYPE_DVD; goto play; #endif case evPlay: case evPlaySwitchToPause: play: if ( ( msg == evPlaySwitchToPause )&&( guiIntfStruct.Playing == 2 ) ) goto NoPause; if ( gtkSet( gtkGetCurrPlItem,0,NULL ) &&( guiIntfStruct.StreamType == STREAMTYPE_FILE ) ) { plItem * next = gtkSet( gtkGetCurrPlItem,0,NULL ); plLastPlayed=next; mplSetFileName( next->path,next->name,STREAMTYPE_FILE ); } switch ( guiIntfStruct.StreamType ) { case STREAMTYPE_STREAM: case STREAMTYPE_FILE: gtkSet( gtkClearStruct,0,(void *)(guiALL - guiFilenames) ); break; #ifdef CONFIG_VCD case STREAMTYPE_VCD: gtkSet( gtkClearStruct,0,(void *)(guiALL - guiVCD - guiFilenames) ); if ( !cdrom_device ) cdrom_device=gstrdup( DEFAULT_CDROM_DEVICE ); mplSetFileName( NULL,cdrom_device,STREAMTYPE_VCD ); if ( guiIntfStruct.Playing != 2 ) { if ( !guiIntfStruct.Track ) { if ( guiIntfStruct.VCDTracks > 1 ) guiIntfStruct.Track=2; else guiIntfStruct.Track=1; } guiIntfStruct.DiskChanged=1; } break; #endif #ifdef CONFIG_DVDREAD case STREAMTYPE_DVD: gtkSet( gtkClearStruct,0,(void *)(guiALL - guiDVD - guiFilenames) ); if ( !dvd_device ) dvd_device=gstrdup( DEFAULT_DVD_DEVICE ); mplSetFileName( NULL,dvd_device,STREAMTYPE_DVD ); if ( guiIntfStruct.Playing != 2 ) { guiIntfStruct.Title=guiIntfStruct.DVD.current_title; guiIntfStruct.Chapter=guiIntfStruct.DVD.current_chapter; guiIntfStruct.Angle=guiIntfStruct.DVD.current_angle; guiIntfStruct.DiskChanged=1; } break; #endif } guiIntfStruct.NewPlay=1; mplPlay(); break; #ifdef CONFIG_DVDREAD case evSetDVDSubtitle: dvdsub_id=iparam; goto play_dvd_2; break; case evSetDVDAudio: audio_id=iparam; goto play_dvd_2; break; case evSetDVDChapter: guiIntfStruct.DVD.current_chapter=iparam; goto play_dvd_2; break; case evSetDVDTitle: guiIntfStruct.DVD.current_title=iparam; guiIntfStruct.DVD.current_chapter=1; guiIntfStruct.DVD.current_angle=1; goto play_dvd_2; break; #endif case evPause: case evPauseSwitchToPlay: NoPause: mplPause(); break; case evStop: guiIntfStruct.Playing=guiSetStop; mplState(); guiIntfStruct.NoWindow=False; break; case evLoadPlay: mplMainAutoPlay=1; // guiIntfStruct.StreamType=STREAMTYPE_FILE; case evLoad: gtkSet( gtkDelPl,0,NULL ); gtkShow( evLoad,NULL ); break; case evLoadSubtitle: gtkShow( evLoadSubtitle,NULL ); break; case evDropSubtitle: gfree( (void **)&guiIntfStruct.Subtitlename ); guiLoadSubtitle( NULL ); break; case evLoadAudioFile: gtkShow( evLoadAudioFile,NULL ); break; case evPrev: mplPrev(); break; case evNext: mplNext(); break; case evPlayList: gtkShow( evPlayList,NULL ); break; case evSkinBrowser: gtkShow( evSkinBrowser,skinName ); break; case evAbout: gtkShow( evAbout,NULL ); break; case evPreferences: gtkShow( evPreferences,NULL ); break; case evEqualizer: gtkShow( evEqualizer,NULL ); break; case evForward10min: mplRelSeek( 600 ); break; case evBackward10min: mplRelSeek( -600 );break; case evForward1min: mplRelSeek( 60 ); break; case evBackward1min: mplRelSeek( -60 ); break; case evForward10sec: mplRelSeek( 10 ); break; case evBackward10sec: mplRelSeek( -10 ); break; case evSetMoviePosition: mplAbsSeek( param ); break; case evIncVolume: vo_x11_putkey( wsGrayMul ); break; case evDecVolume: vo_x11_putkey( wsGrayDiv ); break; case evMute: mixer_mute( mixer ); break; case evSetVolume: guiIntfStruct.Volume=param; goto set_volume; case evSetBalance: guiIntfStruct.Balance=param; set_volume: { float l = guiIntfStruct.Volume * ( ( 100.0 - guiIntfStruct.Balance ) / 50.0 ); float r = guiIntfStruct.Volume * ( ( guiIntfStruct.Balance ) / 50.0 ); if ( l > guiIntfStruct.Volume ) l=guiIntfStruct.Volume; if ( r > guiIntfStruct.Volume ) r=guiIntfStruct.Volume; // printf( "!!! v: %.2f b: %.2f -> %.2f x %.2f\n",guiIntfStruct.Volume,guiIntfStruct.Balance,l,r ); mixer_setvolume( mixer,l,r ); } if ( osd_level ) { osd_visible=(GetTimerMS() + 1000) | 1; vo_osd_progbar_type=OSD_VOLUME; vo_osd_progbar_value=( ( guiIntfStruct.Volume ) * 256.0 ) / 100.0; vo_osd_changed( OSDTYPE_PROGBAR ); } break; case evIconify: switch ( iparam ) { case 0: wsIconify( appMPlayer.mainWindow ); break; case 1: wsIconify( appMPlayer.subWindow ); break; } break; case evHalfSize: btnSet( evFullScreen,btnReleased ); if ( guiIntfStruct.Playing ) { if ( appMPlayer.subWindow.isFullScreen ) { mplFullScreen(); } wsResizeWindow( &appMPlayer.subWindow, guiIntfStruct.MovieWidth / 2, guiIntfStruct.MovieHeight / 2 ); wsMoveWindow( &appMPlayer.subWindow, 0, ( wsMaxX - guiIntfStruct.MovieWidth/2 )/2 + wsOrgX, ( wsMaxY - guiIntfStruct.MovieHeight/2 )/2 + wsOrgY ); } break; case evDoubleSize: btnSet( evFullScreen,btnReleased ); if ( guiIntfStruct.Playing ) { if ( appMPlayer.subWindow.isFullScreen ) { mplFullScreen(); } wsResizeWindow( &appMPlayer.subWindow, guiIntfStruct.MovieWidth * 2, guiIntfStruct.MovieHeight * 2 ); wsMoveWindow( &appMPlayer.subWindow, 0, ( wsMaxX - guiIntfStruct.MovieWidth*2 )/2 + wsOrgX, ( wsMaxY - guiIntfStruct.MovieHeight*2 )/2 + wsOrgY ); } break; case evNormalSize: btnSet( evFullScreen,btnReleased ); if ( guiIntfStruct.Playing ) { if ( appMPlayer.subWindow.isFullScreen ) { mplFullScreen(); } wsResizeWindow( &appMPlayer.subWindow, guiIntfStruct.MovieWidth, guiIntfStruct.MovieHeight ); wsMoveWindow( &appMPlayer.subWindow, 0, ( wsMaxX - guiIntfStruct.MovieWidth )/2 + wsOrgX, ( wsMaxY - guiIntfStruct.MovieHeight )/2 + wsOrgY ); break; } else if ( !appMPlayer.subWindow.isFullScreen ) break; case evFullScreen: if ( !guiIntfStruct.Playing && !gtkShowVideoWindow ) break; mplFullScreen(); if ( appMPlayer.subWindow.isFullScreen ) btnSet( evFullScreen,btnPressed ); else btnSet( evFullScreen,btnReleased ); break; case evSetAspect: switch ( iparam ) { case 2: movie_aspect=16.0f / 9.0f; break; case 3: movie_aspect=4.0f / 3.0f; break; case 4: movie_aspect=2.35; break; case 1: default: movie_aspect=-1; } wsClearWindow( appMPlayer.subWindow ); #ifdef CONFIG_DVDREAD if ( guiIntfStruct.StreamType == STREAMTYPE_DVD || guiIntfStruct.StreamType == STREAMTYPE_VCD ) goto play_dvd_2; else #endif guiIntfStruct.NewPlay=1; break; // --- timer events case evRedraw: { unsigned now = GetTimerMS(); extern int mplPBFade; if ((now > last_redraw_time) && (now < last_redraw_time + GUI_REDRAW_WAIT) && !mplPBFade) break; last_redraw_time = now; } mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow ); wsPostRedisplay( &appMPlayer.barWindow ); break; // --- system events #ifdef MP_DEBUG case evNone: mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] event none received.\n" ); break; default: mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] unknown event received ( %d,%.2f ).\n",msg,param ); break; #endif } }
void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY ) { static int itemtype = 0; int i; wItem * item = NULL; float value = 0.0f; static int SelectedItem = -1; int currentselected = -1; for ( i=0;i < appMPlayer.NumberOfItems + 1;i++ ) if ( ( appMPlayer.Items[i].pressed != btnDisabled )&& ( 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 ) ) ) { currentselected=i; break; } switch ( Button ) { case wsPMMouseButton: gtkShow( evHidePopUpMenu,NULL ); mplShowMenu( RX,RY ); itemtype=itPRMButton; break; case wsRMMouseButton: mplHideMenu( RX,RY,0 ); break; case wsPLMouseButton: gtkShow( evHidePopUpMenu,NULL ); sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; SelectedItem=currentselected; if ( SelectedItem == -1 ) break; boxMoved=0; item=&appMPlayer.Items[SelectedItem]; itemtype=item->type; item->pressed=btnPressed; switch( item->type ) { case itButton: if ( ( SelectedItem > -1 ) && ( ( ( item->msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) || ( ( item->msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) ) { item->pressed=btnDisabled; } break; } break; case wsRLMouseButton: boxMoved=0; item=&appMPlayer.Items[SelectedItem]; item->pressed=btnReleased; SelectedItem=-1; if ( currentselected == - 1 ) { itemtype=0; break; } value=0; switch( itemtype ) { case itPotmeter: case itHPotmeter: btnModify( item->msg,(float)( X - item->x ) / item->width * 100.0f ); mplEventHandling( item->msg,item->value ); value=item->value; break; case itVPotmeter: btnModify( item->msg, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); mplEventHandling( item->msg,item->value ); value=item->value; break; } mplEventHandling( item->msg,value ); itemtype=0; break; case wsRRMouseButton: gtkShow( evShowPopUpMenu,NULL ); break; // --- rolled mouse ... de szar :))) case wsP5MouseButton: value=-2.5f; goto rollerhandled; case wsP4MouseButton: value= 2.5f; rollerhandled: item=&appMPlayer.Items[currentselected]; if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) { item->value+=value; btnModify( item->msg,item->value ); mplEventHandling( item->msg,item->value ); } break; // --- moving case wsMoveMouse: item=&appMPlayer.Items[SelectedItem]; switch ( itemtype ) { case itPLMButton: wsMoveWindow( &appMPlayer.mainWindow,False,RX - abs( sx ),RY - abs( sy ) ); mplMainRender=0; break; case itPRMButton: mplMenuMouseHandle( X,Y,RX,RY ); break; case itPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0f; goto potihandled; case itVPotmeter: item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f; goto potihandled; case itHPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0f; potihandled: if ( item->value > 100.0f ) item->value=100.0f; if ( item->value < 0.0f ) item->value=0.0f; mplEventHandling( item->msg,item->value ); break; } break; } }
static void uiPlaybarMouseHandle( int Button, int X, int Y, int RX, int RY ) { static int itemtype = 0; int i; wItem * item = NULL; float value = 0.0f; static int SelectedItem = -1; int currentselected = -1; for ( i=0;i <= guiApp.IndexOfPlaybarItems;i++ ) if ( ( guiApp.playbarItems[i].pressed != btnDisabled )&& ( wgIsRect( X,Y,guiApp.playbarItems[i].x,guiApp.playbarItems[i].y,guiApp.playbarItems[i].x+guiApp.playbarItems[i].width,guiApp.playbarItems[i].y+guiApp.playbarItems[i].height ) ) ) { currentselected=i; break; } switch ( Button ) { case wsPMMouseButton: gtkShow( evHidePopUpMenu,NULL ); uiShowMenu( RX,RY ); break; case wsRMMouseButton: uiHideMenu( RX,RY,0 ); break; case wsRRMouseButton: gtkShow( evShowPopUpMenu,NULL ); break; // --- case wsPLMouseButton: gtkShow( evHidePopUpMenu,NULL ); SelectedItem=currentselected; if ( SelectedItem == -1 ) break; // yeees, i'm move the f*****g window item=&guiApp.playbarItems[SelectedItem]; itemtype=item->type; item->pressed=btnPressed; switch( item->type ) { case itButton: if ( ( SelectedItem > -1 ) && ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) || ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) ) { item->pressed=btnDisabled; } break; } break; case wsRLMouseButton: if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter { item=&guiApp.playbarItems[SelectedItem]; item->pressed=btnReleased; } SelectedItem=-1; if ( currentselected == - 1 ) { itemtype=0; break; } value=0; switch( itemtype ) { case itPotmeter: case itHPotmeter: btnModify( item->message,(float)( X - item->x ) / item->width * 100.0f ); uiEventHandling( item->message,item->value ); value=item->value; break; case itVPotmeter: btnModify( item->message, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); uiEventHandling( item->message,item->value ); value=item->value; break; } uiEventHandling( item->message,value ); itemtype=0; break; // --- case wsP5MouseButton: value=-2.5f; goto rollerhandled; case wsP4MouseButton: value= 2.5f; rollerhandled: item=&guiApp.playbarItems[currentselected]; if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) { item->value+=value; btnModify( item->message,item->value ); uiEventHandling( item->message,item->value ); } break; // --- case wsMoveMouse: item=&guiApp.playbarItems[SelectedItem]; switch ( itemtype ) { case itPRMButton: uiMenuMouseHandle( X,Y,RX,RY ); break; case itPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0f; goto potihandled; case itVPotmeter: item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f; goto potihandled; case itHPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0f; potihandled: if ( item->value > 100.0f ) item->value=100.0f; if ( item->value < 0.0f ) item->value=0.0f; uiEventHandling( item->message,item->value ); break; } break; } }
void uiEventHandling( int msg,float param ) { int iparam = (int)param; mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); switch( msg ) { /* user events */ case evExit: mplayer( MPLAYER_EXIT_GUI, EXIT_QUIT, 0 ); break; case evLoadURL: gtkShow( evLoadURL,NULL ); break; case ivSetAudio: if ( !mpctx_get_demuxer(guiInfo.mpcontext) || audio_id == iparam ) break; mp_property_do("switch_audio",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); break; case ivSetVideo: if ( !mpctx_get_demuxer(guiInfo.mpcontext) || video_id == iparam ) break; mp_property_do("switch_video",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); break; case ivSetSubtitle: mp_property_do("sub",M_PROPERTY_SET,&iparam,guiInfo.mpcontext); break; #ifdef CONFIG_CDDA case ivSetCDTrack: guiInfo.Track=iparam; case evPlayCD: guiInfoMediumClear ( CLEAR_ALL ); guiInfo.StreamType=STREAMTYPE_CDDA; goto play; #endif #ifdef CONFIG_VCD case ivSetVCDTrack: guiInfo.Track=iparam; case evPlayVCD: guiInfoMediumClear ( CLEAR_ALL ); guiInfo.StreamType=STREAMTYPE_VCD; goto play; #endif #ifdef CONFIG_DVDREAD case ivSetDVDSubtitle: dvdsub_id=iparam; uiEventHandling( ivPlayDVD, 0 ); break; case ivSetDVDAudio: audio_id=iparam; uiEventHandling( ivPlayDVD, 0 ); break; case ivSetDVDChapter: guiInfo.Chapter=iparam; uiEventHandling( ivPlayDVD, 0 ); break; case ivSetDVDTitle: guiInfo.Track=iparam; guiInfo.Chapter=1; guiInfo.Angle=1; uiEventHandling( ivPlayDVD, 0 ); break; case evPlayDVD: guiInfo.Track=1; guiInfo.Chapter=1; guiInfo.Angle=1; case ivPlayDVD: guiInfoMediumClear( CLEAR_ALL - CLEAR_DVD ); guiInfo.StreamType=STREAMTYPE_DVD; goto play; #endif case evPlay: case evPlaySwitchToPause: play: if ( ( msg == evPlaySwitchToPause )&&( guiInfo.Playing == GUI_PAUSE ) ) goto NoPause; if ( listMgr( PLAYLIST_ITEM_GET_CURR,0 ) &&( guiInfo.StreamType == STREAMTYPE_FILE ) ) { plItem * next = listMgr( PLAYLIST_ITEM_GET_CURR,0 ); uiSetFileName( next->path,next->name,SAME_STREAMTYPE ); } switch ( guiInfo.StreamType ) { case STREAMTYPE_FILE: case STREAMTYPE_STREAM: case STREAMTYPE_PLAYLIST: guiInfoMediumClear( CLEAR_ALL - CLEAR_FILE ); if ( !guiInfo.Track ) guiInfo.Track=1; guiInfo.NewPlay=GUI_FILE_NEW; break; case STREAMTYPE_CDDA: guiInfoMediumClear( CLEAR_ALL - CLEAR_VCD - CLEAR_FILE ); if ( guiInfo.Playing != GUI_PAUSE ) { if ( !guiInfo.Track ) guiInfo.Track=1; guiInfo.NewPlay=GUI_FILE_SAME; } break; case STREAMTYPE_VCD: guiInfoMediumClear( CLEAR_ALL - CLEAR_VCD - CLEAR_FILE ); if ( guiInfo.Playing != GUI_PAUSE ) { if ( !guiInfo.Track ) guiInfo.Track=2; guiInfo.NewPlay=GUI_FILE_SAME; } break; case STREAMTYPE_DVD: guiInfoMediumClear( CLEAR_ALL - CLEAR_DVD - CLEAR_FILE ); if ( guiInfo.Playing != GUI_PAUSE ) { guiInfo.NewPlay=GUI_FILE_SAME; } break; } uiPlay(); break; case evPause: case evPauseSwitchToPlay: NoPause: uiPause(); break; case evStop: guiInfo.Playing=GUI_STOP; uiState(); break; case evLoadPlay: uiMainAutoPlay=1; // guiInfo.StreamType=STREAMTYPE_FILE; case evLoad: listMgr( PLAYLIST_DELETE,0 ); gtkShow( evLoad,NULL ); break; case evLoadSubtitle: gtkShow( evLoadSubtitle,NULL ); break; case evDropSubtitle: nfree( guiInfo.SubtitleFilename ); mplayerLoadSubtitle( NULL ); break; case evLoadAudioFile: gtkShow( evLoadAudioFile,NULL ); break; case evPrev: uiPrev(); break; case evNext: uiNext(); break; case evPlaylist: gtkShow( evPlaylist,NULL ); break; case evSkinBrowser: gtkShow( evSkinBrowser,skinName ); break; case evAbout: gtkShow( evAbout,NULL ); break; case evPreferences: gtkShow( evPreferences,NULL ); break; case evEqualizer: gtkShow( evEqualizer,NULL ); break; case evForward10min: uiRelSeek( 600 ); break; case evBackward10min: uiRelSeek( -600 );break; case evForward1min: uiRelSeek( 60 ); break; case evBackward1min: uiRelSeek( -60 ); break; case evForward10sec: uiRelSeek( 10 ); break; case evBackward10sec: uiRelSeek( -10 ); break; case evSetMoviePosition: uiAbsSeek( param ); break; case evIncVolume: vo_x11_putkey( wsGrayMul ); break; case evDecVolume: vo_x11_putkey( wsGrayDiv ); break; case evMute: mixer_mute( mixer ); break; case evSetVolume: guiInfo.Volume=param; goto set_volume; case evSetBalance: guiInfo.Balance=param; set_volume: { float l = guiInfo.Volume * ( ( 100.0 - guiInfo.Balance ) / 50.0 ); float r = guiInfo.Volume * ( ( guiInfo.Balance ) / 50.0 ); if ( l > guiInfo.Volume ) l=guiInfo.Volume; if ( r > guiInfo.Volume ) r=guiInfo.Volume; // printf( "!!! v: %.2f b: %.2f -> %.2f x %.2f\n",guiInfo.Volume,guiInfo.Balance,l,r ); mixer_setvolume( mixer,l,r ); } if ( osd_level ) { osd_visible=(GetTimerMS() + 1000) | 1; vo_osd_progbar_type=OSD_VOLUME; vo_osd_progbar_value=( ( guiInfo.Volume ) * 256.0 ) / 100.0; vo_osd_changed( OSDTYPE_PROGBAR ); } break; case evMenu: /*if (guiApp.menuIsPresent) NOTE TO MYSELF: Uncomment only after mouse { pointer and cursor keys work gtkShow( ivHidePopUpMenu,NULL ); with this menu from skin as uiShowMenu( 0,0 ); they do with normal menus. } else*/ gtkShow( ivShowPopUpMenu,NULL ); break; case evIconify: switch ( iparam ) { case 0: wsIconify( guiApp.mainWindow ); break; case 1: wsIconify( guiApp.videoWindow ); break; } break; case evHalfSize: if ( guiInfo.VideoWindow && guiInfo.Playing ) { if ( guiApp.videoWindow.isFullScreen ) { uiFullScreen(); } wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth / 2, guiInfo.VideoHeight / 2 ); wsMoveWindow( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); btnSet( evFullScreen,btnReleased ); } break; case evDoubleSize: if ( guiInfo.VideoWindow && guiInfo.Playing ) { if ( guiApp.videoWindow.isFullScreen ) { uiFullScreen(); } wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth * 2, guiInfo.VideoHeight * 2 ); wsMoveWindowWithin( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); btnSet( evFullScreen,btnReleased ); } break; case evNormalSize: if ( guiInfo.VideoWindow && guiInfo.Playing ) { if ( guiApp.videoWindow.isFullScreen ) { uiFullScreen(); } wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight ); wsMoveWindow( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); btnSet( evFullScreen,btnReleased ); break; } else if ( !guiApp.videoWindow.isFullScreen ) break; case evFullScreen: if ( guiInfo.VideoWindow && guiInfo.Playing ) { uiFullScreen(); if ( !guiApp.videoWindow.isFullScreen ) { wsResizeWindow( &guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight ); wsMoveWindow( &guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y ); } } if ( guiApp.videoWindow.isFullScreen ) btnSet( evFullScreen,btnPressed ); else btnSet( evFullScreen,btnReleased ); break; case evSetAspect: switch ( iparam ) { case 2: movie_aspect=16.0f / 9.0f; break; case 3: movie_aspect=4.0f / 3.0f; break; case 4: movie_aspect=2.35; break; case 1: default: movie_aspect=-1; } wsClearWindow( guiApp.videoWindow ); if ( guiInfo.StreamType == STREAMTYPE_VCD ) uiEventHandling( evPlayVCD, 0 ); else if ( guiInfo.StreamType == STREAMTYPE_DVD ) uiEventHandling( ivPlayDVD, 0 ); else guiInfo.NewPlay=GUI_FILE_NEW; break; /* timer events */ case ivRedraw: { unsigned now = GetTimerMS(); if ((now > last_redraw_time) && (now < last_redraw_time + GUI_REDRAW_WAIT) && !uiPlaybarFade && (iparam == 0)) break; last_redraw_time = now; } uiMainRender=1; wsPostRedisplay( &guiApp.mainWindow ); wsPostRedisplay( &guiApp.playbarWindow ); break; /* system events */ case evNone: mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] uiEventHandling: evNone\n" ); break; default: mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] uiEventHandling: unknown event %d, param %.2f\n", msg, param ); break; } }
static void uiMainMouse( int Button,int X,int Y,int RX,int RY ) { static int itemtype = 0; int i; guiItem * item = NULL; float value = 0.0f; static int SelectedItem = -1; int currentselected = -1; for ( i=0;i <= guiApp.IndexOfMainItems;i++ ) if ( ( guiApp.mainItems[i].pressed != btnDisabled )&& ( isInside( 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 ) ) ) { currentselected=i; break; } switch ( Button ) { case wsPMMouseButton: gtkShow( ivHidePopUpMenu,NULL ); uiMenuShow( RX,RY ); itemtype=itPRMButton; break; case wsRMMouseButton: uiMenuHide( RX,RY,0 ); break; case wsPLMouseButton: gtkShow( ivHidePopUpMenu,NULL ); sx=X; sy=Y; boxMoved=True; itemtype=itPLMButton; SelectedItem=currentselected; if ( SelectedItem == -1 ) break; boxMoved=False; item=&guiApp.mainItems[SelectedItem]; itemtype=item->type; item->pressed=btnPressed; // NOTE TO MYSELF: commented, because the expression can never be true /*switch( item->type ) { case itButton: if ( ( SelectedItem > -1 ) && ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) || ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) ) { item->pressed=btnDisabled; } break; }*/ break; case wsRLMouseButton: boxMoved=False; if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter { item=&guiApp.mainItems[SelectedItem]; item->pressed=btnReleased; } if ( currentselected == - 1 || SelectedItem == -1 ) { itemtype=0; break; } SelectedItem=-1; value=0; switch( itemtype ) { case itPotmeter: case itHPotmeter: btnModify( item->message,(float)( X - item->x ) / item->width * 100.0 ); uiEvent( item->message,item->value ); value=item->value; break; case itVPotmeter: btnModify( item->message, ( 1.0 - (float)( Y - item->y ) / item->height) * 100.0 ); uiEvent( item->message,item->value ); value=item->value; break; } uiEvent( item->message,value ); itemtype=0; break; case wsRRMouseButton: gtkShow( ivShowPopUpMenu,NULL ); break; /* rolled mouse ... de szar :))) */ case wsP5MouseButton: value=-2.5f; goto rollerhandled; case wsP4MouseButton: value= 2.5f; rollerhandled: if (currentselected != - 1) { item=&guiApp.mainItems[currentselected]; if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) { item->value+=value; btnModify( item->message,item->value ); uiEvent( item->message,item->value ); } } break; /* moving */ case wsMoveMouse: item=&guiApp.mainItems[SelectedItem]; switch ( itemtype ) { case itPLMButton: wsWindowMove( &guiApp.mainWindow,True,RX - abs( sx ),RY - abs( sy ) ); break; case itPRMButton: if (guiApp.menuIsPresent) guiApp.menuWindow.MouseHandler( 0,RX,RY,0,0 ); break; case itPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0; goto potihandled; case itVPotmeter: item->value=(1.0 - (float)( Y - item->y ) / item->height) * 100.0; goto potihandled; case itHPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0; potihandled: if ( item->value > 100.0f ) item->value=100.0f; if ( item->value < 0.0f ) item->value=0.0f; uiEvent( item->message,item->value ); break; } break; } }
void uiEvent(int ev, float param) { int iparam = (int)param; mixer_t *mixer = mpctx_get_mixer(guiInfo.mpcontext); float aspect; char cmd[40]; switch (ev) { /* user events */ case evExit: mplayer(MPLAYER_EXIT_GUI, EXIT_QUIT, 0); break; case evLoadURL: gtkShow(evLoadURL, NULL); break; case ivSetAudio: if (!mpctx_get_demuxer(guiInfo.mpcontext) || audio_id == iparam) break; mp_property_do("switch_audio", M_PROPERTY_SET, &iparam, guiInfo.mpcontext); break; case ivSetVideo: if (!mpctx_get_demuxer(guiInfo.mpcontext) || video_id == iparam) break; mp_property_do("switch_video", M_PROPERTY_SET, &iparam, guiInfo.mpcontext); break; case ivSetSubtitle: mp_property_do("sub", M_PROPERTY_SET, &iparam, guiInfo.mpcontext); break; #ifdef CONFIG_CDDA case ivSetCDTrack: guiInfo.Track = iparam; case evPlayCD: guiInfo.StreamType = STREAMTYPE_CDDA; goto play; #endif #ifdef CONFIG_VCD case ivSetVCDTrack: guiInfo.Track = iparam; case evPlayVCD: guiInfo.StreamType = STREAMTYPE_VCD; goto play; #endif #ifdef CONFIG_DVDREAD case ivSetDVDSubtitle: dvdsub_id = iparam; uiEvent(ivPlayDVD, 0); break; case ivSetDVDAudio: audio_id = iparam; uiEvent(ivPlayDVD, 0); break; case ivSetDVDChapter: guiInfo.Chapter = iparam; uiEvent(ivPlayDVD, 0); break; case ivSetDVDTitle: guiInfo.Track = iparam; guiInfo.Chapter = 1; guiInfo.Angle = 1; uiEvent(ivPlayDVD, 0); break; case evPlayDVD: guiInfo.Chapter = 1; guiInfo.Angle = 1; case ivPlayDVD: guiInfo.StreamType = STREAMTYPE_DVD; goto play; #endif #ifdef CONFIG_TV case evPlayTV: guiInfo.StreamType = guiTV[gui_tv_digital].StreamType; goto play; #endif case evPlay: case evPlaySwitchToPause: play: if (guiInfo.Playing != GUI_PAUSE) { MediumPrepare(guiInfo.StreamType); switch (guiInfo.StreamType) { case STREAMTYPE_FILE: case STREAMTYPE_STREAM: case STREAMTYPE_PLAYLIST: if (!guiInfo.Track) guiInfo.Track = 1; guiInfo.MediumChanged = GUI_MEDIUM_NEW; guiInfo.PlaylistNext = !guiInfo.Playing; break; case STREAMTYPE_CDDA: case STREAMTYPE_VCD: case STREAMTYPE_DVD: case STREAMTYPE_TV: case STREAMTYPE_DVB: if (!guiInfo.Track) guiInfo.Track = (guiInfo.StreamType == STREAMTYPE_VCD ? 2 : 1); case STREAMTYPE_BINCUE: // track 0 is OK and will auto-select first media data track guiInfo.MediumChanged = GUI_MEDIUM_SAME; break; } } uiPlay(); break; case evPause: case evPauseSwitchToPlay: uiPause(); break; case evStop: guiInfo.Playing = GUI_STOP; uiState(); break; case evLoadPlay: uiLoadPlay = True; // guiInfo.StreamType=STREAMTYPE_FILE; case evLoad: gtkShow(evLoad, NULL); break; case evLoadSubtitle: gtkShow(evLoadSubtitle, NULL); break; case evDropSubtitle: nfree(guiInfo.SubtitleFilename); mplayerLoadSubtitle(NULL); break; case evLoadAudioFile: gtkShow(evLoadAudioFile, NULL); break; case evPlayImage: gtkShow(evPlayImage, NULL); break; case evPrev: uiPrev(); break; case evNext: uiNext(); break; case evPlaylist: gtkShow(evPlaylist, NULL); break; case evSkinBrowser: gtkShow(evSkinBrowser, skinName); break; case evAbout: gtkShow(evAbout, NULL); break; case evPreferences: gtkShow(evPreferences, NULL); break; case evEqualizer: gtkShow(evEqualizer, NULL); break; case evForward10min: uiRelSeek(600); break; case evBackward10min: uiRelSeek(-600); break; case evForward1min: uiRelSeek(60); break; case evBackward1min: uiRelSeek(-60); break; case evForward10sec: uiRelSeek(10); break; case evBackward10sec: uiRelSeek(-10); break; case evSetMoviePosition: guiInfo.Position = param; uiPctSeek(guiInfo.Position); break; case evIncVolume: mplayer_put_key(KEY_VOLUME_UP); break; case evDecVolume: mplayer_put_key(KEY_VOLUME_DOWN); break; case evMute: mixer_mute(mixer); break; case evSetVolume: case ivSetVolume: guiInfo.Volume = param; { float l = guiInfo.Volume * (100.0 - guiInfo.Balance) / 50.0; float r = guiInfo.Volume * guiInfo.Balance / 50.0; mixer_setvolume(mixer, FFMIN(l, guiInfo.Volume), FFMIN(r, guiInfo.Volume)); } if (ev == ivSetVolume) break; if (osd_level) { osd_visible = (GetTimerMS() + 1000) | 1; vo_osd_progbar_type = OSD_VOLUME; vo_osd_progbar_value = guiInfo.Volume * 256.0 / 100.0; vo_osd_changed(OSDTYPE_PROGBAR); } break; case evSetBalance: case ivSetBalance: guiInfo.Balance = param; mixer_setbalance(mixer, (guiInfo.Balance - 50.0) / 50.0); // transform 0..100 to -1..1 uiEvent(ivSetVolume, guiInfo.Volume); if (ev == ivSetBalance) break; if (osd_level) { osd_visible = (GetTimerMS() + 1000) | 1; vo_osd_progbar_type = OSD_BALANCE; vo_osd_progbar_value = guiInfo.Balance * 256.0 / 100.0; vo_osd_changed(OSDTYPE_PROGBAR); } break; case evMenu: /*if (guiApp.menuIsPresent) NOTE TO MYSELF: Uncomment only after mouse * { pointer and cursor keys work * gtkShow( ivHidePopUpMenu,NULL ); with this menu from skin as * uiMenuShow( 0,0 ); they do with normal menus. * } * else*/gtkShow(ivShowPopUpMenu, NULL); break; case evIconify: switch (iparam) { case 0: wsWindowIconify(&guiApp.mainWindow); break; case 1: wsWindowIconify(&guiApp.videoWindow); break; } break; case evHalfSize: if (guiInfo.VideoWindow && guiInfo.Playing) { if (guiApp.videoWindow.isFullScreen) { uiFullScreen(); } wsWindowResize(&guiApp.videoWindow, guiInfo.VideoWidth / 2, guiInfo.VideoHeight / 2); btnSet(evFullScreen, btnReleased); } break; case evDoubleSize: if (guiInfo.VideoWindow && guiInfo.Playing) { if (guiApp.videoWindow.isFullScreen) { uiFullScreen(); } wsWindowResize(&guiApp.videoWindow, guiInfo.VideoWidth * 2, guiInfo.VideoHeight * 2); wsWindowMoveWithin(&guiApp.videoWindow, False, guiApp.video.x, guiApp.video.y); btnSet(evFullScreen, btnReleased); } break; case evNormalSize: if (guiInfo.VideoWindow && guiInfo.Playing) { if (guiApp.videoWindow.isFullScreen) { uiFullScreen(); } wsWindowResize(&guiApp.videoWindow, guiInfo.VideoWidth, guiInfo.VideoHeight); btnSet(evFullScreen, btnReleased); break; } else if (!guiApp.videoWindow.isFullScreen) break; case evFullScreen: if (guiInfo.VideoWindow && (guiInfo.Playing || !iparam)) { uiFullScreen(); if (!guiApp.videoWindow.isFullScreen) wsWindowResize(&guiApp.videoWindow, iparam ? guiInfo.VideoWidth : guiApp.video.width, iparam ? guiInfo.VideoHeight : guiApp.video.height); } if (guiApp.videoWindow.isFullScreen) btnSet(evFullScreen, btnPressed); else btnSet(evFullScreen, btnReleased); break; case evSetAspect: switch (iparam) { case 2: aspect = 16.0f / 9.0f; break; case 3: aspect = 4.0f / 3.0f; break; case 4: aspect = 2.35f; break; case 1: default: aspect = -1; break; } snprintf(cmd, sizeof(cmd), "pausing_keep switch_ratio %f", aspect); mp_input_queue_cmd(mp_input_parse_cmd(cmd)); break; case evSetRotation: switch (iparam) { case 90: guiInfo.Rotation = 1; break; case -90: guiInfo.Rotation = 2; break; case 180: guiInfo.Rotation = 8; break; case 0: default: guiInfo.Rotation = -1; break; } guiInfo.MediumChanged = GUI_MEDIUM_SAME; break; /* timer events */ case ivRedraw: { unsigned int now = GetTimerMS(); if ((now > last_redraw_time) && (now < last_redraw_time + GUI_REDRAW_WAIT) && !uiPlaybarFade && (iparam == 0)) break; last_redraw_time = now; } uiMainRender = True; wsWindowRedraw(&guiApp.mainWindow); wsWindowRedraw(&guiApp.playbarWindow); break; /* system events */ case evNone: mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[actions] uiEvent: evNone\n"); break; default: mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[actions] uiEvent: unknown event %d, param %.2f\n", ev, param); break; } }