summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-17 22:39:43 +0000
committerpontscho <pontscho@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-17 22:39:43 +0000
commit4ae9c5c307d951bf995434cfd6948c7a716516e7 (patch)
tree2f202c794043dca9ba4c4ddeae19c6adbd9c6c48
parentd97e2769db3d66f3abc3a3ecb307309161f80379 (diff)
downloadmpv-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
-rw-r--r--ChangeLog17
-rw-r--r--Gui/Makefile2
-rw-r--r--Gui/app.c29
-rw-r--r--Gui/app.h14
-rw-r--r--Gui/cfg.c4
-rw-r--r--Gui/cfg.h1
-rw-r--r--Gui/interface.c9
-rw-r--r--Gui/mplayer/common.c238
-rw-r--r--Gui/mplayer/common.h19
-rw-r--r--Gui/mplayer/gtk/opts.c56
-rw-r--r--Gui/mplayer/mplayer.h3
-rw-r--r--Gui/mplayer/mw.c203
-rw-r--r--Gui/mplayer/pb.c228
-rw-r--r--Gui/mplayer/play.c35
-rw-r--r--Gui/mplayer/sw.c3
-rw-r--r--Gui/mplayer/widgets.c13
-rw-r--r--Gui/skin/font.c4
-rw-r--r--Gui/skin/skin.c216
-rw-r--r--Gui/skin/skin.h4
-rw-r--r--Gui/wm/ws.c7
-rw-r--r--help/help_mp-en.h2
21 files changed, 777 insertions, 330 deletions
diff --git a/ChangeLog b/ChangeLog
index 614d0d6aa7..2e594078b7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
diff --git a/Gui/app.c b/Gui/app.c
index d6e7303dca..c0a3f6e5a9 100644
--- a/Gui/app.c
+++ b/Gui/app.c
@@ -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 )
diff --git a/Gui/app.h b/Gui/app.h
index 5441630c11..d0afd320e4 100644
--- a/Gui/app.h
+++ b/Gui/app.h
@@ -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;
diff --git a/Gui/cfg.c b/Gui/cfg.c
index 96b4c9d1ce..8eca1724ce 100644
--- a/Gui/cfg.c
+++ b/Gui/cfg.c
@@ -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",&gtkCacheOn,CONF_TYPE_FLAG,0,0,1,NULL },
{ "cache_size",&gtkCacheSize,CONF_TYPE_INT,CONF_RANGE,-1,65535,NULL },
-
+
+ { "playbar",&gtkEnablePlayBar,CONF_TYPE_FLAG,0,0,1,NULL },
{ "load_fullscreen",&gtkLoadFullscreen,CONF_TYPE_FLAG,0,0,1,NULL },
{ "stopxscreensaver",&stop_xscreensaver,CONF_TYPE_FLAG,0,0,1,NULL },
diff --git a/Gui/cfg.h b/Gui/cfg.h
index 76e5e3bb38..1035595886 100644
--- a/Gui/cfg.h
+++ b/Gui/cfg.h
@@ -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-&