summaryrefslogtreecommitdiffstats
path: root/Gui/mplayer
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 /Gui/mplayer
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
Diffstat (limited to 'Gui/mplayer')
-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
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: