diff options
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | Gui/Makefile | 2 | ||||
-rw-r--r-- | Gui/app.c | 29 | ||||
-rw-r--r-- | Gui/app.h | 14 | ||||
-rw-r--r-- | Gui/cfg.c | 4 | ||||
-rw-r--r-- | Gui/cfg.h | 1 | ||||
-rw-r--r-- | Gui/interface.c | 9 | ||||
-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 | ||||
-rw-r--r-- | Gui/skin/font.c | 4 | ||||
-rw-r--r-- | Gui/skin/skin.c | 216 | ||||
-rw-r--r-- | Gui/skin/skin.h | 4 | ||||
-rw-r--r-- | Gui/wm/ws.c | 7 | ||||
-rw-r--r-- | help/help_mp-en.h | 2 |
21 files changed, 777 insertions, 330 deletions
@@ -30,8 +30,6 @@ mplayer (0.90) * mplayer exit codes cleanup (0 for quit/eof, 1 for error) * -ao win32 sync problems solved, -autosync 100 is still recommended * -vo gif89a uninit sig11 fixed - * GUI: correct GTK widget destroy event handler - * GUI: sync with x11_common * the usual compiler warning fixes :) * use -pphelp instead of -vop pp=help * various bigendian fixes @@ -61,14 +59,21 @@ mplayer (0.90) * libavcodec: motion estimation pre pass, qpel encoding, trellis quantization * libavcodec: Altivec optimizations * keep window's aspect ratio at resizing (x11, xv), requires WM support - * GUI: new font render engine - * GUI: added persistant history patch from Pavel Rousar - * GUI: SDL Audio configure window from Filip Kalinski - * GUI: add overlapping to preferences * -geometry option accepts X11 syntax too * real .bin+.cue (S)VCD images support (-vcd 2 -cuefile xxx.cue) * postprocess: YUV 411/422/444 support, stride fixes + Gui: + * correct GTK widget destroy event handler + * sync with x11_common + * fix gtk submenu + * new font render engine + * added persistant history patch from Pavel Rousar + * SDL Audio configure window from Filip Kalinski + * add overlapping to preferences + * add play bar for subwindow + * add vertical potmeter for skin + rc2: General: * DOCS/tech/encoding-tips.txt and tech/directfb.txt diff --git a/Gui/Makefile b/Gui/Makefile index f9fa4b5483..8c952c94aa 100644 --- a/Gui/Makefile +++ b/Gui/Makefile @@ -16,7 +16,7 @@ CFLAGS = $(OPTIMIZE) $(INCDIR) $(DEBUG) SRCS = wm/ws.c wm/wsxdnd.c app.c interface.c cfg.c bitmap.c \ skin/skin.c skin/font.c skin/cut.c \ - mplayer/widgets.c mplayer/play.c mplayer/mw.c mplayer/sw.c mplayer/menu.c \ + mplayer/widgets.c mplayer/play.c mplayer/mw.c mplayer/sw.c mplayer/menu.c mplayer/pb.c mplayer/common.c \ mplayer/gtk/menu.c mplayer/gtk/mb.c mplayer/gtk/about.c mplayer/gtk/pl.c mplayer/gtk/sb.c mplayer/gtk/fs.c mplayer/gtk/opts.c mplayer/gtk/url.c mplayer/gtk/eq.c mplayer/gtk/common.c OBJS = $(SRCS:.c=.o) @@ -109,7 +109,6 @@ void appCopy( listItems * dest,listItems * source ) memcpy( &dest->main,&source->main,sizeof( wItem ) ); memcpy( &dest->sub,&source->sub,sizeof( wItem ) ); - memcpy( &dest->eq,&source->eq,sizeof( wItem ) ); memcpy( &dest->menuBase,&source->menuBase,sizeof( wItem ) ); memcpy( &dest->menuSelected,&source->menuSelected,sizeof( wItem ) ); } @@ -135,9 +134,9 @@ void appInitStruct( listItems * item ) item->sub.x=-1; item->sub.y=-1; appClearItem( &item->menuBase ); appClearItem( &item->menuSelected ); - item->subR=0; - item->subG=0; - item->subB=0; + item->sub.R=item->sub.G=item->sub.B=0; + item->bar.R=item->bar.G=item->bar.B=0; + item->main.R=item->main.G=item->main.B=0; item->barIsPresent=0; item->menuIsPresent=0; } @@ -161,7 +160,7 @@ int appFindMessage( unsigned char * str ) void btnModify( int event,float state ) { int j; - for ( j=0;j<appMPlayer.NumberOfItems + 1;j++ ) + for ( j=0;j < appMPlayer.NumberOfItems + 1;j++ ) if ( appMPlayer.Items[j].msg == event ) { switch ( appMPlayer.Items[j].type ) @@ -171,6 +170,7 @@ void btnModify( int event,float state ) appMPlayer.Items[j].tmp=(int)state; break; case itPotmeter: + case itVPotmeter: case itHPotmeter: if ( state < 0.0f ) state=0.0f; if ( state > 100.f ) state=100.0f; @@ -178,6 +178,25 @@ void btnModify( int event,float state ) break; } } + + for ( j=0;j < appMPlayer.NumberOfBarItems + 1;j++ ) + if ( appMPlayer.barItems[j].msg == event ) + { + switch ( appMPlayer.barItems[j].type ) + { + case itButton: + appMPlayer.barItems[j].pressed=(int)state; + appMPlayer.barItems[j].tmp=(int)state; + break; + case itPotmeter: + case itVPotmeter: + case itHPotmeter: + if ( state < 0.0f ) state=0.0f; + if ( state > 100.f ) state=100.0f; + appMPlayer.barItems[j].value=state; + break; + } + } } float btnGetValue( int event ) @@ -134,6 +134,8 @@ typedef struct char * label; // --- int event; +// --- + int R,G,B; } wItem; typedef struct @@ -144,16 +146,11 @@ typedef struct wItem sub; wsTWindow subWindow; - int subR,subG,subB; wItem bar; wsTWindow barWindow; - int barR,barG,barB; int barIsPresent; - - wItem eq; - wsTWindow eqWindow; - + wItem menuBase; wItem menuSelected; wsTWindow menuWindow; @@ -164,7 +161,10 @@ typedef struct wItem Items[256]; // --- int NumberOfMenuItems; - wItem MenuItems[32]; + wItem MenuItems[64]; +// --- + int NumberOfBarItems; + wItem barItems[32]; } listItems; extern listItems appMPlayer; @@ -57,6 +57,7 @@ int gtkSubDumpMPSub = 0; int gtkSubDumpSrt = 0; int gtkLoadFullscreen = 0; +int gtkEnablePlayBar = 0; // --- @@ -128,7 +129,8 @@ static config_t gui_opts[] = { "cache",>kCacheOn,CONF_TYPE_FLAG,0,0,1,NULL }, { "cache_size",>kCacheSize,CONF_TYPE_INT,CONF_RANGE,-1,65535,NULL }, - + + { "playbar",>kEnablePlayBar,CONF_TYPE_FLAG,0,0,1,NULL }, { "load_fullscreen",>kLoadFullscreen,CONF_TYPE_FLAG,0,0,1,NULL }, { "stopxscreensaver",&stop_xscreensaver,CONF_TYPE_FLAG,0,0,1,NULL }, @@ -39,6 +39,7 @@ extern char * gtkEquChannel4; extern char * gtkEquChannel5; extern char * gtkEquChannel6; extern int gtkLoadFullscreen; +extern int gtkEnablePlayBar; extern int cfg_read( void ); extern int cfg_write( void ); diff --git a/Gui/interface.c b/Gui/interface.c index c2f53978f6..8bc3b901f1 100644 --- a/Gui/interface.c +++ b/Gui/interface.c @@ -203,6 +203,9 @@ void guiInit( void ) wsCreateImage( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Width,appMPlayer.sub.Bitmap.Height ); wsXDNDMakeAwareness(&appMPlayer.subWindow); + mplMenuInit(); + mplPBInit(); + vo_setwindow( appMPlayer.subWindow.WindowID, appMPlayer.subWindow.wGC ); // i=wsHideFrame|wsMaxSize|wsHideWindow; @@ -215,8 +218,6 @@ void guiInit( void ) wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image ); wsXDNDMakeAwareness(&appMPlayer.mainWindow); - mplMenuInit(); - #ifdef DEBUG mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] Depth on screen: %d\n",wsDepthOnScreen ); mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] parent: 0x%x\n",(int)appMPlayer.mainWindow.WindowID ); @@ -233,7 +234,7 @@ void guiInit( void ) appMPlayer.subWindow.KeyHandler=mplMainKeyHandle; appMPlayer.subWindow.DandDHandler=mplDandDHandler; - wsSetBackgroundRGB( &appMPlayer.subWindow,appMPlayer.subR,appMPlayer.subG,appMPlayer.subB ); + wsSetBackgroundRGB( &appMPlayer.subWindow,appMPlayer.sub.R,appMPlayer.sub.G,appMPlayer.sub.B ); wsClearWindow( appMPlayer.subWindow ); if ( appMPlayer.sub.Bitmap.Image ) wsConvert( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Image,appMPlayer.sub.Bitmap.ImageSize ); @@ -433,7 +434,7 @@ int guiGetEvent( int type,char * arg ) switch ( type ) { case guiXEvent: - guiIntfStruct.event_struct=(void *)arg; + guiIntfStruct.event_struct=(void *)arg; wsEvents( wsDisplay,(XEvent *)arg,NULL ); gtkEventHandling(); break; 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++ ) |