diff options
author | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-17 22:39:43 +0000 |
---|---|---|
committer | pontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-17 22:39:43 +0000 |
commit | 4ae9c5c307d951bf995434cfd6948c7a716516e7 (patch) | |
tree | 2f202c794043dca9ba4c4ddeae19c6adbd9c6c48 /Gui/mplayer | |
parent | d97e2769db3d66f3abc3a3ecb307309161f80379 (diff) | |
download | mpv-4ae9c5c307d951bf995434cfd6948c7a716516e7.tar.bz2 mpv-4ae9c5c307d951bf995434cfd6948c7a716516e7.tar.xz |
- add playbar
- add vpotmeter
- fix gtk menu's pixel bug
- fix some critical (10l) bug
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8974 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'Gui/mplayer')
-rw-r--r-- | Gui/mplayer/common.c | 238 | ||||
-rw-r--r-- | Gui/mplayer/common.h | 19 | ||||
-rw-r--r-- | Gui/mplayer/gtk/opts.c | 56 | ||||
-rw-r--r-- | Gui/mplayer/mplayer.h | 3 | ||||
-rw-r--r-- | Gui/mplayer/mw.c | 203 | ||||
-rw-r--r-- | Gui/mplayer/pb.c | 228 | ||||
-rw-r--r-- | Gui/mplayer/play.c | 35 | ||||
-rw-r--r-- | Gui/mplayer/sw.c | 3 | ||||
-rw-r--r-- | Gui/mplayer/widgets.c | 13 |
9 files changed, 572 insertions, 226 deletions
diff --git a/Gui/mplayer/common.c b/Gui/mplayer/common.c new file mode 100644 index 0000000000..7509666513 --- /dev/null +++ b/Gui/mplayer/common.c @@ -0,0 +1,238 @@ + +// main window + +#include <stdlib.h> +#include <stdio.h> +#include <inttypes.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "../app.h" +#include "../skin/font.h" +#include "../skin/skin.h" +#include "../wm/ws.h" + +#include "../../config.h" +#include "../../help_mp.h" +#include "../../libvo/x11_common.h" + +#include "../../libmpdemux/stream.h" +#include "../../mixer.h" +#include "../../libvo/sub.h" +#include "../../mplayer.h" + +#include "../../libmpdemux/demuxer.h" +#include "../../libmpdemux/stheader.h" +#include "../../codec-cfg.h" + + +#include "play.h" +#include "widgets.h" + +extern unsigned int GetTimerMS( void ); + +inline void TranslateFilename( int c,char * tmp ) +{ + int i; + switch ( guiIntfStruct.StreamType ) + { + case STREAMTYPE_STREAM: + strcpy( tmp,guiIntfStruct.Filename ); + break; + case STREAMTYPE_FILE: + if ( ( guiIntfStruct.Filename )&&( guiIntfStruct.Filename[0] ) ) + { + if ( strrchr( guiIntfStruct.Filename,'/' ) ) strcpy( tmp,strrchr( guiIntfStruct.Filename,'/' ) + 1 ); + else strcpy( tmp,guiIntfStruct.Filename ); + if ( tmp[strlen( tmp ) - 4] == '.' ) tmp[strlen( tmp ) - 4]=0; + if ( tmp[strlen( tmp ) - 5] == '.' ) tmp[strlen( tmp ) - 5]=0; + } else strcpy( tmp,MSGTR_NoFileLoaded ); + break; +#ifdef USE_DVDREAD + case STREAMTYPE_DVD: + if ( guiIntfStruct.DVD.current_chapter ) sprintf( tmp,MSGTR_Chapter,guiIntfStruct.DVD.current_chapter ); + else strcat( tmp,MSGTR_NoChapter ); + break; +#endif +#ifdef HAVE_VCD + case STREAMTYPE_VCD: + sprintf( tmp,MSGTR_VCDTrack,guiIntfStruct.Track ); + break; +#endif + default: strcpy( tmp,MSGTR_NoMediaOpened ); + } + if ( c ) + { + for ( i=0;i < (int)strlen( tmp );i++ ) + { + int t=0; + if ( c == 1 ) { if ( ( tmp[i] >= 'A' )&&( tmp[i] <= 'Z' ) ) t=32; } + if ( c == 2 ) { if ( ( tmp[i] >= 'a' )&&( tmp[i] <= 'z' ) ) t=-32; } + tmp[i]=(char)( tmp[i] + t ); + } + } +} + +char * Translate( char * str ) +{ + static char trbuf[512]; + char tmp[512]; + int i,c; + int t; + memset( trbuf,0,512 ); + memset( tmp,0,128 ); + for ( c=0,i=0;i < (int)strlen( str );i++ ) + { + if ( str[i] != '$' ) { trbuf[c++]=str[i]; trbuf[c]=0; } + else + { + switch ( str[++i] ) + { + case 't': sprintf( tmp,"%02d",guiIntfStruct.Track ); strcat( trbuf,tmp ); break; + case 'o': TranslateFilename( 0,tmp ); strcat( trbuf,tmp ); break; + case 'f': TranslateFilename( 1,tmp ); strcat( trbuf,tmp ); break; + case 'F': TranslateFilename( 2,tmp ); strcat( trbuf,tmp ); break; + case '6': t=guiIntfStruct.LengthInSec; goto calclengthhhmmss; + case '1': t=guiIntfStruct.TimeSec; +calclengthhhmmss: + sprintf( tmp,"%02d:%02d:%02d",t/3600,t/60%60,t%60 ); strcat( trbuf,tmp ); + break; + case '7': t=guiIntfStruct.LengthInSec; goto calclengthmmmmss; + case '2': t=guiIntfStruct.TimeSec; +calclengthmmmmss: + sprintf( tmp,"%04d:%02d",t/60,t%60 ); strcat( trbuf,tmp ); + break; + case '3': sprintf( tmp,"%02d",guiIntfStruct.TimeSec / 3600 ); strcat( trbuf,tmp ); break; + case '4': sprintf( tmp,"%02d",( ( guiIntfStruct.TimeSec / 60 ) % 60 ) ); strcat( trbuf,tmp ); break; + case '5': sprintf( tmp,"%02d",guiIntfStruct.TimeSec % 60 ); strcat( trbuf,tmp ); break; + case '8': sprintf( tmp,"%01d:%02d:%02d",guiIntfStruct.TimeSec / 3600,( guiIntfStruct.TimeSec / 60 ) % 60,guiIntfStruct.TimeSec % 60 ); strcat( trbuf,tmp ); break; + case 'v': sprintf( tmp,"%3.2f%%",guiIntfStruct.Volume ); strcat( trbuf,tmp ); break; + case 'V': sprintf( tmp,"%3.1f",guiIntfStruct.Volume ); strcat( trbuf,tmp ); break; + case 'b': sprintf( tmp,"%3.2f%%",guiIntfStruct.Balance ); strcat( trbuf,tmp ); break; + case 'B': sprintf( tmp,"%3.1f",guiIntfStruct.Balance ); strcat( trbuf,tmp ); break; + case 'd': sprintf( tmp,"%d",guiIntfStruct.FrameDrop ); strcat( trbuf,tmp ); break; + case 'x': sprintf( tmp,"%d",guiIntfStruct.MovieWidth ); strcat( trbuf,tmp ); break; + case 'y': sprintf( tmp,"%d",guiIntfStruct.MovieHeight ); strcat( trbuf,tmp ); break; + case 'C': sprintf( tmp,"%s", guiIntfStruct.sh_video? ((sh_video_t *)guiIntfStruct.sh_video)->codec->name : ""); + strcat( trbuf,tmp ); break; + case 's': if ( guiIntfStruct.Playing == 0 ) strcat( trbuf,"s" ); break; + case 'l': if ( guiIntfStruct.Playing == 1 ) strcat( trbuf,"p" ); break; + case 'e': if ( guiIntfStruct.Playing == 2 ) strcat( trbuf,"e" ); break; + case 'a': + if ( muted ) { strcat( trbuf,"n" ); break; } + switch ( guiIntfStruct.AudioType ) + { + case 0: strcat( trbuf,"n" ); break; + case 1: strcat( trbuf,"m" ); break; + case 2: strcat( trbuf,"t" ); break; + } + break; + case 'T': + switch ( guiIntfStruct.StreamType ) + { + case STREAMTYPE_FILE: strcat( trbuf,"f" ); break; +#ifdef HAVE_VCD + case STREAMTYPE_VCD: strcat( trbuf,"v" ); break; +#endif + case STREAMTYPE_STREAM: strcat( trbuf,"u" ); break; +#ifdef USE_DVDREAD + case STREAMTYPE_DVD: strcat( trbuf,"d" ); break; +#endif + default: strcat( trbuf," " ); break; + } + break; + case '$': strcat( trbuf,"$" ); break; + default: continue; + } + c=strlen( trbuf ); + } + } + return trbuf; +} + +static char * image_buffer = NULL; +static int image_width = 0; + +void PutImage( txSample * bf,int x,int y,int max,int ofs ) +{ + int i=0,ix,iy; + uint32_t * buf = NULL; + uint32_t * drw = NULL; + register uint32_t tmp; + register uint32_t yc; + + if ( ( !bf )||( bf->Image == NULL ) ) return; + + i=( bf->Width * ( bf->Height / max ) ) * ofs; + buf=(uint32_t *)image_buffer; + drw=(uint32_t *)bf->Image; + +#if 0 + for ( iy=y;iy < (int)(y+bf->Height / max);iy++ ) + for ( ix=x;ix < (int)(x+bf->Width);ix++ ) + { + tmp=drw[i++]; + if ( tmp != 0x00ff00ff ) buf[iy * image_width + ix]=tmp; + } +#else + yc=y * image_width; + for ( iy=y;iy < (int)(y+bf->Height / max);iy++ ) + { + for ( ix=x;ix < (int)(x+bf->Width);ix++ ) + { + tmp=drw[i++]; + if ( tmp != 0x00ff00ff ) buf[yc + ix]=tmp; + } + yc+=image_width; + } +#endif +} + +void Render( wsTWindow * window,wItem * Items,int nrItems,char * db,int size ) +{ + wItem * item; + txSample * image = NULL; + int i, type; + + image_buffer=db; + image_width=window->Width; + + for( i=0;i < nrItems + 1;i++ ) + { + item=&Items[i]; + switch( item->type ) + { + case itButton: + PutImage( &item->Bitmap,item->x,item->y,3,item->pressed ); + break; + case itPotmeter: + PutImage( &item->Bitmap,item->x,item->y,item->phases,( item->phases - 1 ) * ( item->value / 100.0f ) ); + break; + case itHPotmeter: + PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) ); + PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed ); + break; + case itVPotmeter: + PutImage( &item->Bitmap, + item->x,item->y, + item->phases, + item->phases * ( item->value / 100.0f ) ); + PutImage( &item->Mask, + item->x,item->y + (int)( ( item->height - item->psy ) * item->value / 100.0f ), + 3,item->pressed ); + break; + case itSLabel: + image=fntRender( item,0,"%s",item->label ); + if ( image ) PutImage( image,item->x,item->y,1,0 ); + case itDLabel: + { + char * t = Translate( item->label ); + int l = fntTextWidth( item->fontid,t ); + image=fntRender( item,(GetTimerMS() / 20)%(l?l:item->width),"%s",t ); + } + if ( image ) PutImage( image,item->x,item->y,1,0 ); + break; + } + } + wsConvert( window,db,size ); +} diff --git a/Gui/mplayer/common.h b/Gui/mplayer/common.h new file mode 100644 index 0000000000..7183930124 --- /dev/null +++ b/Gui/mplayer/common.h @@ -0,0 +1,19 @@ +#ifndef __COMMON_H +#define __COMMON_H + +#include <stdlib.h> +#include <stdio.h> +#include <inttypes.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "../app.h" +#include "../bitmap.h" +#include "../wm/ws.h" + +extern inline void TranslateFilename( int c,char * tmp ); +extern char * Translate( char * str ); +extern void PutImage( txSample * bf,int x,int y,int max,int ofs ); +extern void Render( wsTWindow * window,wItem * Items,int nrItems,char * db,int size ); + +#endif diff --git a/Gui/mplayer/gtk/opts.c b/Gui/mplayer/gtk/opts.c index 4168c5ec49..8c2b0c1287 100644 --- a/Gui/mplayer/gtk/opts.c +++ b/Gui/mplayer/gtk/opts.c @@ -68,6 +68,7 @@ static GtkWidget * CBPostprocess; static GtkWidget * CBCache; static GtkWidget * CBLoadFullscreen; static GtkWidget * CBStopXScreenSaver; +static GtkWidget * CBPlayBar; static GtkWidget * SBCache; static GtkAdjustment * SBCacheadj; @@ -264,6 +265,8 @@ void ShowPreferences( void ) #if 0 if ( guiIntfStruct.Subtitlename ) gtk_entry_set_text( GTK_ENTRY( ESubtitleName ),guiIntfStruct.Subtitlename ); #endif + +// --- 4. page // font ... if ( font_name ) gtk_entry_set_text( GTK_ENTRY( prEFontName ),font_name ); #ifndef HAVE_FREETYPE @@ -290,13 +293,9 @@ void ShowPreferences( void ) } #endif -// -- 4. page +// -- 5. page gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBNonInterlaved ),force_ni ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBIndex ),index_mode ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBPostprocess ),gtkVopPP ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBLoadFullscreen ),gtkLoadFullscreen ); - gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBStopXScreenSaver ),stop_xscreensaver ); - gtk_adjustment_set_value( HSPPQualityadj,auto_quality ); { int i; GList * Items = NULL; @@ -329,6 +328,13 @@ void ShowPreferences( void ) if ( name ) gtk_entry_set_text( GTK_ENTRY( EAFM ),name ); } +// --- 6. page + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBPostprocess ),gtkVopPP ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBLoadFullscreen ),gtkLoadFullscreen ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBPlayBar ),gtkEnablePlayBar ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBStopXScreenSaver ),stop_xscreensaver ); + gtk_adjustment_set_value( HSPPQualityadj,auto_quality ); + gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( CBCache ),0 ); gtk_adjustment_set_value( SBCacheadj,(float)gtkCacheSize ); if ( !gtkCacheOn ) gtk_widget_set_sensitive( SBCache,FALSE ); @@ -484,7 +490,7 @@ void prButton( GtkButton * button,gpointer user_data ) if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( RBOSDTandP ) ) ) osd_level=2; if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( RBOSDTPTT ) ) ) osd_level=3; - // font ... + // --- 4. page guiSetFilename( font_name,gtk_entry_get_text( GTK_ENTRY( prEFontName ) ) ); #ifndef HAVE_FREETYPE gtkSet( gtkSetFontFactor,HSFontFactoradj->value,NULL ); @@ -499,19 +505,9 @@ void prButton( GtkButton * button,gpointer user_data ) if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( RBFontAutoScaleDiagonal ) ) ) gtkSet( gtkSetFontAutoScale,3,NULL ); #endif - // -- 4. page + // -- 5. page force_ni=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBNonInterlaved ) ); index_mode=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBIndex ) ); - gtkVopPP=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBPostprocess ) ); - gtkLoadFullscreen=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBLoadFullscreen ) ); - stop_xscreensaver=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBStopXScreenSaver ) ); - gtkSet( gtkSetAutoq,HSPPQualityadj->value,NULL ); - - if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBCache ) ) ) { gtkCacheSize=(int)SBCacheadj->value; gtkCacheOn=1; } - else gtkCacheOn=0; - - if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBAutoSync ) ) ) { gtkAutoSync=(int)SBAutoSyncadj->value; gtkAutoSyncOn=1; } - else gtkAutoSyncOn=0; { int i; @@ -529,6 +525,19 @@ void prButton( GtkButton * button,gpointer user_data ) { gaddlist( &audio_fm_list,(char *)mpcodecs_ad_drivers[i]->info->short_name ); break; } } + // --- 6. page + gtkVopPP=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBPostprocess ) ); + gtkLoadFullscreen=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBLoadFullscreen ) ); + stop_xscreensaver=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBStopXScreenSaver ) ); + gtkEnablePlayBar=gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBPlayBar ) ); + gtkSet( gtkSetAutoq,HSPPQualityadj->value,NULL ); + + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBCache ) ) ) { gtkCacheSize=(int)SBCacheadj->value; gtkCacheOn=1; } + else gtkCacheOn=0; + + if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( CBAutoSync ) ) ) { gtkAutoSync=(int)SBAutoSyncadj->value; gtkAutoSyncOn=1; } + else gtkAutoSyncOn=0; + guiSetFilename( dvd_device,gtk_entry_get_text( GTK_ENTRY( prEDVDDevice ) ) ); guiSetFilename( cdrom_device,gtk_entry_get_text( GTK_ENTRY( prECDRomDevice ) ) ); @@ -725,7 +734,7 @@ GtkWidget * create_Preferences( void ) frame=AddFrame( NULL,GTK_SHADOW_ETCHED_OUT,hbox1,1 ); frame=AddFrame( NULL,GTK_SHADOW_NONE,frame,1 ); -// --- 1. panel +// --- 1. page vbox2=AddVBox( frame,0 ); @@ -777,7 +786,7 @@ GtkWidget * create_Preferences( void ) label=AddLabel( MSGTR_PREFERENCES_Audio,NULL ); gtk_notebook_set_tab_label( GTK_NOTEBOOK( notebook1 ),gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook1 ),0 ),label ); -// --- 2. panel +// --- 2. page hbox2=AddVBox( notebook1,0 ); @@ -827,7 +836,7 @@ GtkWidget * create_Preferences( void ) label=AddLabel( MSGTR_PREFERENCES_Video,NULL ); gtk_notebook_set_tab_label( GTK_NOTEBOOK( notebook1 ),gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook1 ),1 ),label ); -// --- 3. panel +// --- 3. page vbox6=AddVBox( notebook1,0 ); @@ -899,7 +908,7 @@ GtkWidget * create_Preferences( void ) gtk_notebook_set_tab_label( GTK_NOTEBOOK( notebook1 ),gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook1 ),2 ),label ); vbox601=AddVBox( notebook1,0 ); -// --- 4. panel +// --- 4. page vbox603=AddVBox( AddFrame( NULL,GTK_SHADOW_NONE, @@ -984,7 +993,7 @@ GtkWidget * create_Preferences( void ) label=AddLabel( MSGTR_PREFERENCES_FRAME_Font,NULL ); gtk_notebook_set_tab_label( GTK_NOTEBOOK( notebook1 ),gtk_notebook_get_nth_page( GTK_NOTEBOOK( notebook1 ),3 ),label ); -// --- 5. panel +// --- 5. page vbox601=AddVBox( notebook1,0 ); @@ -1028,7 +1037,7 @@ GtkWidget * create_Preferences( void ) vbox601=AddVBox( notebook1,0 ); -// --- 6. panel +// --- 6. page vbox602=AddVBox( AddFrame( NULL,GTK_SHADOW_NONE, @@ -1065,6 +1074,7 @@ GtkWidget * create_Preferences( void ) CBLoadFullscreen=AddCheckButton( MSGTR_PREFERENCES_LoadFullscreen,vbox602 ); CBStopXScreenSaver=AddCheckButton( MSGTR_PREFERENCES_XSCREENSAVER,vbox602 ); + CBPlayBar=AddCheckButton( MSGTR_PREFERENCES_PlayBar,vbox602 ); AddHSeparator( vbox602 ); diff --git a/Gui/mplayer/mplayer.h b/Gui/mplayer/mplayer.h index 99183ad7e1..d7bd01b1ac 100644 --- a/Gui/mplayer/mplayer.h +++ b/Gui/mplayer/mplayer.h @@ -29,4 +29,7 @@ extern void mplHideMenu( int mx,int my,int w ); extern void mplShowMenu( int mx,int my ); extern void mplMenuMouseHandle( int X,int Y,int RX,int RY ); +extern void mplPBInit( void ); +extern void mplPBShow( int x, int y ); + #endif diff --git a/Gui/mplayer/mw.c b/Gui/mplayer/mw.c index b653ff7721..3dd9948e08 100644 --- a/Gui/mplayer/mw.c +++ b/Gui/mplayer/mw.c @@ -43,146 +43,7 @@ int boxMoved = 0; int sx = 0,sy = 0; int i,pot = 0; -inline void TranslateFilename( int c,char * tmp ) -{ - int i; - switch ( guiIntfStruct.StreamType ) - { - case STREAMTYPE_STREAM: - strcpy( tmp,guiIntfStruct.Filename ); - break; - case STREAMTYPE_FILE: - if ( ( guiIntfStruct.Filename )&&( guiIntfStruct.Filename[0] ) ) - { - if ( strrchr( guiIntfStruct.Filename,'/' ) ) strcpy( tmp,strrchr( guiIntfStruct.Filename,'/' ) + 1 ); - else strcpy( tmp,guiIntfStruct.Filename ); - if ( tmp[strlen( tmp ) - 4] == '.' ) tmp[strlen( tmp ) - 4]=0; - if ( tmp[strlen( tmp ) - 5] == '.' ) tmp[strlen( tmp ) - 5]=0; - } else strcpy( tmp,MSGTR_NoFileLoaded ); - break; -#ifdef USE_DVDREAD - case STREAMTYPE_DVD: - if ( guiIntfStruct.DVD.current_chapter ) sprintf( tmp,MSGTR_Chapter,guiIntfStruct.DVD.current_chapter ); - else strcat( tmp,MSGTR_NoChapter ); - break; -#endif -#ifdef HAVE_VCD - case STREAMTYPE_VCD: - sprintf( tmp,MSGTR_VCDTrack,guiIntfStruct.Track ); - break; -#endif - default: strcpy( tmp,MSGTR_NoMediaOpened ); - } - if ( c ) - { - for ( i=0;i < (int)strlen( tmp );i++ ) - { - int t=0; - if ( c == 1 ) { if ( ( tmp[i] >= 'A' )&&( tmp[i] <= 'Z' ) ) t=32; } - if ( c == 2 ) { if ( ( tmp[i] >= 'a' )&&( tmp[i] <= 'z' ) ) t=-32; } - tmp[i]=(char)( tmp[i] + t ); - } - } -} - -char * Translate( char * str ) -{ - static char trbuf[512]; - char tmp[512]; - int i,c; - int t; - memset( trbuf,0,512 ); - memset( tmp,0,128 ); - for ( c=0,i=0;i < (int)strlen( str );i++ ) - { - if ( str[i] != '$' ) { trbuf[c++]=str[i]; trbuf[c]=0; } - else - { - switch ( str[++i] ) - { - case 't': sprintf( tmp,"%02d",guiIntfStruct.Track ); strcat( trbuf,tmp ); break; - case 'o': TranslateFilename( 0,tmp ); strcat( trbuf,tmp ); break; - case 'f': TranslateFilename( 1,tmp ); strcat( trbuf,tmp ); break; - case 'F': TranslateFilename( 2,tmp ); strcat( trbuf,tmp ); break; - case '6': t=guiIntfStruct.LengthInSec; goto calclengthhhmmss; - case '1': t=guiIntfStruct.TimeSec; -calclengthhhmmss: - sprintf( tmp,"%02d:%02d:%02d",t/3600,t/60%60,t%60 ); strcat( trbuf,tmp ); - break; - case '7': t=guiIntfStruct.LengthInSec; goto calclengthmmmmss; - case '2': t=guiIntfStruct.TimeSec; -calclengthmmmmss: - sprintf( tmp,"%04d:%02d",t/60,t%60 ); strcat( trbuf,tmp ); - break; - case '3': sprintf( tmp,"%02d",guiIntfStruct.TimeSec / 3600 ); strcat( trbuf,tmp ); break; - case '4': sprintf( tmp,"%02d",( ( guiIntfStruct.TimeSec / 60 ) % 60 ) ); strcat( trbuf,tmp ); break; - case '5': sprintf( tmp,"%02d",guiIntfStruct.TimeSec % 60 ); strcat( trbuf,tmp ); break; - case '8': sprintf( tmp,"%01d:%02d:%02d",guiIntfStruct.TimeSec / 3600,( guiIntfStruct.TimeSec / 60 ) % 60,guiIntfStruct.TimeSec % 60 ); strcat( trbuf,tmp ); break; - case 'v': sprintf( tmp,"%3.2f%%",guiIntfStruct.Volume ); strcat( trbuf,tmp ); break; - case 'V': sprintf( tmp,"%3.1f",guiIntfStruct.Volume ); strcat( trbuf,tmp ); break; - case 'b': sprintf( tmp,"%3.2f%%",guiIntfStruct.Balance ); strcat( trbuf,tmp ); break; - case 'B': sprintf( tmp,"%3.1f",guiIntfStruct.Balance ); strcat( trbuf,tmp ); break; - case 'd': sprintf( tmp,"%d",guiIntfStruct.FrameDrop ); strcat( trbuf,tmp ); break; - case 'x': sprintf( tmp,"%d",guiIntfStruct.MovieWidth ); strcat( trbuf,tmp ); break; - case 'y': sprintf( tmp,"%d",guiIntfStruct.MovieHeight ); strcat( trbuf,tmp ); break; - case 'C': sprintf( tmp,"%s", guiIntfStruct.sh_video? ((sh_video_t *)guiIntfStruct.sh_video)->codec->name : ""); - strcat( trbuf,tmp ); break; - case 's': if ( guiIntfStruct.Playing == 0 ) strcat( trbuf,"s" ); break; - case 'l': if ( guiIntfStruct.Playing == 1 ) strcat( trbuf,"p" ); break; - case 'e': if ( guiIntfStruct.Playing == 2 ) strcat( trbuf,"e" ); break; - case 'a': - if ( muted ) { strcat( trbuf,"n" ); break; } - switch ( guiIntfStruct.AudioType ) - { - case 0: strcat( trbuf,"n" ); break; - case 1: strcat( trbuf,"m" ); break; - case 2: strcat( trbuf,"t" ); break; - } - break; - case 'T': - switch ( guiIntfStruct.StreamType ) - { - case STREAMTYPE_FILE: strcat( trbuf,"f" ); break; -#ifdef HAVE_VCD - case STREAMTYPE_VCD: strcat( trbuf,"v" ); break; -#endif - case STREAMTYPE_STREAM: strcat( trbuf,"u" ); break; -#ifdef USE_DVDREAD - case STREAMTYPE_DVD: strcat( trbuf,"d" ); break; -#endif - default: strcat( trbuf," " ); break; - } - break; - case '$': strcat( trbuf,"$" ); break; - default: continue; - } - c=strlen( trbuf ); - } - } - return trbuf; -} - -inline void PutImage( txSample * bf,int x,int y,int max,int ofs ) -{ - int i=0,ix,iy; - uint32_t * buf = NULL; - uint32_t * drw = NULL; - uint32_t tmp; - - if ( ( !bf )||( bf->Image == NULL ) ) return; - - i=( bf->Width * ( bf->Height / max ) ) * ofs; - buf=(uint32_t *)mplDrawBuffer; - drw=(uint32_t *)bf->Image; - - for ( iy=y;iy < (int)(y+bf->Height / max);iy++ ) - for ( ix=x;ix < (int)(x+bf->Width);ix++ ) - { - tmp=drw[i++]; - if ( tmp != 0x00ff00ff ) - buf[ iy*appMPlayer.main.Bitmap.Width+ix ]=tmp; - } -} +#include "common.h" void mplMainDraw( void ) { @@ -196,41 +57,13 @@ void mplMainDraw( void ) !mainVisible ) return; // !appMPlayer.mainWindow.Mapped ) return; - btnModify( evSetMoviePosition,guiIntfStruct.Position ); - btnModify( evSetVolume,guiIntfStruct.Volume ); - if ( mplMainRender && appMPlayer.mainWindow.State == wsWindowExpose ) { + btnModify( evSetMoviePosition,guiIntfStruct.Position ); + btnModify( evSetVolume,guiIntfStruct.Volume ); + memcpy( mplDrawBuffer,appMPlayer.main.Bitmap.Image,appMPlayer.main.Bitmap.ImageSize ); - for( i=0;i < appMPlayer.NumberOfItems + 1;i++ ) - { - item=&appMPlayer.Items[i]; - switch( item->type ) - { - case itButton: - PutImage( &item->Bitmap,item->x,item->y,3,item->pressed ); - break; - case itPotmeter: - PutImage( &item->Bitmap,item->x,item->y,item->phases,( item->phases - 1 ) * ( item->value / 100.0f ) ); - break; - case itHPotmeter: - PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) ); - PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed ); - break; - case itSLabel: - image=fntRender( item,0,"%s",item->label ); - if ( image ) PutImage( image,item->x,item->y,1,0 ); - case itDLabel: - { - char * t = Translate( item->label ); - int l = fntTextWidth( item->fontid,t ); - image=fntRender( item,(GetTimerMS() / 20)%(l?l:item->width),"%s",t ); - } - if ( image ) PutImage( image,item->x,item->y,1,0 ); - break; - } - } - wsConvert( &appMPlayer.mainWindow,mplDrawBuffer,appMPlayer.main.Bitmap.ImageSize ); + Render( &appMPlayer.mainWindow,appMPlayer.Items,appMPlayer.NumberOfItems,mplDrawBuffer,appMPlayer.main.Bitmap.ImageSize ); mplMainRender=0; } wsPutImage( &appMPlayer.mainWindow ); @@ -498,6 +331,7 @@ set_volume: case evRedraw: mplMainRender=1; wsPostRedisplay( &appMPlayer.mainWindow ); + wsPostRedisplay( &appMPlayer.barWindow ); break; // --- system events #ifdef MP_DEBUG @@ -542,10 +376,10 @@ void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY ) case wsPLMouseButton: gtkShow( evHidePopUpMenu,NULL ); - sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; // if move the main window + sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; SelectedItem=currentselected; - if ( SelectedItem == -1 ) break; // yeees, i'm move the fucking window - boxMoved=0; //mplMainRender=1; // No, not move the window, i'm pressed one button + if ( SelectedItem == -1 ) break; + boxMoved=0; item=&appMPlayer.Items[SelectedItem]; itemtype=item->type; item->pressed=btnPressed; @@ -553,9 +387,9 @@ void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY ) { case itButton: if ( ( SelectedItem > -1 ) && - ( ( ( appMPlayer.Items[SelectedItem].msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) || - ( ( appMPlayer.Items[SelectedItem].msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) ) - { appMPlayer.Items[SelectedItem].pressed=btnDisabled; } + ( ( ( item->msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) || + ( ( item->msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) ) + { item->pressed=btnDisabled; } break; } break; @@ -576,7 +410,6 @@ void mplMainMouseHandle( int Button,int X,int Y,int RX,int RY ) break; } mplEventHandling( item->msg,value ); -// mplMainRender=1; itemtype=0; break; @@ -612,6 +445,9 @@ rollerhandled: case itPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0f; goto potihandled; + case itVPotmeter: + item->value=(float)( Y - item->y ) / item->height * 100.0f; + goto potihandled; case itHPotmeter: item->value=(float)( X - item->x ) / item->width * 100.0f; potihandled: @@ -622,7 +458,6 @@ potihandled: } break; } -// if ( Button != wsMoveMouse ) wsPostRedisplay( &appMPlayer.mainWindow ); } int keyPressed = 0; @@ -659,15 +494,13 @@ void mplMainKeyHandle( int KeyCode,int Type,int Key ) case wsXF86Prev: msg=evPrev; break; case wsXF86Next: msg=evNext; break; case wsXF86Media: msg=evLoad; break; - case wsEscape: + case wsEscape: if ( appMPlayer.subWindow.isFullScreen ) { - if ( guiIntfStruct.event_struct ) - { memset( guiIntfStruct.event_struct,0,sizeof( XEvent ) ); guiIntfStruct.event_struct=NULL; } + if ( guiIntfStruct.event_struct ) ((XEvent *)guiIntfStruct.event_struct)->type=None; mplEventHandling( evNormalSize,0 ); - break; + return; } - default: vo_x11_putkey( Key ); return; } } diff --git a/Gui/mplayer/pb.c b/Gui/mplayer/pb.c new file mode 100644 index 0000000000..8c326ba208 --- /dev/null +++ b/Gui/mplayer/pb.c @@ -0,0 +1,228 @@ + +// main window + +#include <stdlib.h> +#include <stdio.h> +#include <inttypes.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "../app.h" +#include "../skin/font.h" +#include "../skin/skin.h" +#include "../wm/ws.h" + +#include "../../config.h" +#include "../../help_mp.h" +#include "../../libvo/x11_common.h" + +#include "../../libmpdemux/stream.h" +#include "../../mixer.h" +#include "../../libvo/sub.h" +#include "../../mplayer.h" + +#include "../../libmpdemux/demuxer.h" +#include "../../libmpdemux/stheader.h" +#include "../../codec-cfg.h" + +#include "play.h" +#include "widgets.h" +#include "common.h" + +extern unsigned int GetTimerMS( void ); +extern unsigned int GetTimer( void ); + +unsigned char * mplPBDrawBuffer = NULL; +int mplPBVisible = 0; +int mplPBLength = 0; +int mplPBFade = 0; + +void mplPBDraw( void ) +{ + if ( !appMPlayer.subWindow.isFullScreen ) return; + if ( !mplPBVisible || !appMPlayer.barIsPresent ) return; + + appMPlayer.bar.x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ) / 2; + + switch ( mplPBFade ) + { + case 1: // fade in + mplPBLength--; + if ( appMPlayer.subWindow.Height - appMPlayer.bar.height >= mplPBLength ) + { + mplPBLength=appMPlayer.subWindow.Height - appMPlayer.bar.height; + mplPBFade=0; + vo_mouse_autohide=0; + } + wsMoveWindow( &appMPlayer.barWindow,0,appMPlayer.bar.x,mplPBLength ); + break; + case 2: // fade out + mplPBLength+=10; + if ( mplPBLength > appMPlayer.subWindow.Height ) + { + mplPBLength=appMPlayer.subWindow.Height; + mplPBFade=mplPBVisible=0; + vo_mouse_autohide=1; + wsVisibleWindow( &appMPlayer.barWindow,wsHideWindow ); + return; + } + wsMoveWindow( &appMPlayer.barWindow,0,appMPlayer.bar.x,mplPBLength ); + break; + } + +// --- render + if ( appMPlayer.barWindow.State == wsWindowExpose ) + { + btnModify( evSetMoviePosition,guiIntfStruct.Position ); + btnModify( evSetVolume,guiIntfStruct.Volume ); + + memcpy( mplPBDrawBuffer,appMPlayer.bar.Bitmap.Image,appMPlayer.bar.Bitmap.ImageSize ); + Render( &appMPlayer.barWindow,appMPlayer.barItems,appMPlayer.NumberOfBarItems,mplPBDrawBuffer,appMPlayer.bar.Bitmap.ImageSize ); + wsConvert( &appMPlayer.barWindow,mplPBDrawBuffer,appMPlayer.bar.Bitmap.ImageSize ); + } + wsPutImage( &appMPlayer.barWindow ); +} + +#define itPLMButton (itNULL - 1) +#define itPRMButton (itNULL - 2) + +void mplPBMouseHandle( 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.NumberOfBarItems + 1;i++ ) + if ( ( appMPlayer.barItems[i].pressed != btnDisabled )&& + ( wgIsRect( X,Y,appMPlayer.barItems[i].x,appMPlayer.barItems[i].y,appMPlayer.barItems[i].x+appMPlayer.barItems[i].width,appMPlayer.barItems[i].y+appMPlayer.barItems[i].height ) ) ) + { currentselected=i; break; } + + switch ( Button ) + { + case wsPMMouseButton: + gtkShow( evHidePopUpMenu,NULL ); + mplShowMenu( RX,RY ); + break; + case wsRMMouseButton: + mplHideMenu( RX,RY,0 ); + break; + case wsPRMouseButton: + gtkShow( evShowPopUpMenu,NULL ); + break; +// --- + case wsPLMouseButton: + gtkShow( evHidePopUpMenu,NULL ); + SelectedItem=currentselected; + if ( SelectedItem == -1 ) break; // yeees, i'm move the fucking window + item=&appMPlayer.barItems[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: + item=&appMPlayer.barItems[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; + } + mplEventHandling( item->msg,value ); + + itemtype=0; + break; +// --- + case wsP5MouseButton: value=-2.5f; goto rollerhandled; + case wsP4MouseButton: value= 2.5f; +rollerhandled: + item=&appMPlayer.barItems[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; +// --- + case wsMoveMouse: |