summaryrefslogtreecommitdiffstats
path: root/gui/mplayer/pb.c
diff options
context:
space:
mode:
authordiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-04-23 07:42:42 +0000
committerdiego <diego@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-04-23 07:42:42 +0000
commit5c9abf7f9f02a3b675072b2725c2814d1c1ee239 (patch)
tree8e213b4087e2b185725c378bd01c495de587c759 /gui/mplayer/pb.c
parentc9e2a43f1ae48831b0110abc6d92e51b325cf863 (diff)
downloadmpv-5c9abf7f9f02a3b675072b2725c2814d1c1ee239.tar.bz2
mpv-5c9abf7f9f02a3b675072b2725c2814d1c1ee239.tar.xz
Gui --> gui
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23095 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'gui/mplayer/pb.c')
-rw-r--r--gui/mplayer/pb.c247
1 files changed, 247 insertions, 0 deletions
diff --git a/gui/mplayer/pb.c b/gui/mplayer/pb.c
new file mode 100644
index 0000000000..14ea8d97cc
--- /dev/null
+++ b/gui/mplayer/pb.c
@@ -0,0 +1,247 @@
+
+// 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 "../libvo/fastmemcpy.h"
+
+#include "../stream/stream.h"
+#include "../mixer.h"
+#include "../libvo/sub.h"
+
+#include "../libmpdemux/demuxer.h"
+#include "../libmpdemux/stheader.h"
+#include "../codec-cfg.h"
+
+#include "gmplayer.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 )
+{
+ int x;
+
+ if ( !appMPlayer.subWindow.isFullScreen ) return;
+ if ( !mplPBVisible || !appMPlayer.barIsPresent ) return;
+
+// appMPlayer.bar.x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ) / 2;
+ switch( appMPlayer.bar.x )
+ {
+ case -1: x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ) / 2; break;
+ case -2: x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ); break;
+ default: x=appMPlayer.bar.x;
+ }
+
+ 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,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,x,mplPBLength );
+ break;
+ }
+
+// --- render
+ if ( appMPlayer.barWindow.State == wsWindowExpose )
+ {
+ btnModify( evSetMoviePosition,guiIntfStruct.Position );
+ btnModify( evSetVolume,guiIntfStruct.Volume );
+
+ vo_mouse_autohide=0;
+
+ 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 wsRRMouseButton:
+ 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;
+ case itVPotmeter:
+ btnModify( item->msg, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f );
+ mplEventHandling( item->msg,item->value );
+ value=item->value;
+ break;
+ }
+ mplEventHandling( item->msg,value );
+
+ itemtype=0;
+ break;
+// ---
+ case 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:
+ item=&appMPlayer.barItems[SelectedItem];
+ switch ( itemtype )
+ {
+ case itPRMButton:
+ mplMenuMouseHandle( X,Y,RX,RY );
+ break;
+ case itPotmeter:
+ item->value=(float)( X - item->x ) / item->width * 100.0f;
+ goto potihandled;
+ case itVPotmeter:
+ item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f;
+ goto potihandled;
+ case itHPotmeter:
+ item->value=(float)( X - item->x ) / item->width * 100.0f;
+potihandled:
+ if ( item->value > 100.0f ) item->value=100.0f;
+ if ( item->value < 0.0f ) item->value=0.0f;
+ mplEventHandling( item->msg,item->value );
+ break;
+ }
+ break;
+ }
+}
+
+void mplPBShow( int x, int y )
+{
+ if ( !appMPlayer.barIsPresent || !gtkEnablePlayBar ) return;
+ if ( !appMPlayer.subWindow.isFullScreen ) return;
+
+ if ( y > appMPlayer.subWindow.Height - appMPlayer.bar.height )
+ {
+ if ( !mplPBFade ) wsVisibleWindow( &appMPlayer.barWindow,wsShowWindow );
+ mplPBFade=1; mplPBVisible=1; wsPostRedisplay( &appMPlayer.barWindow );
+ }
+ else if ( !mplPBFade ) mplPBFade=2;
+}
+
+void mplPBInit( void )
+{
+ if ( !appMPlayer.barIsPresent ) return;
+
+ gfree( (void**)&mplPBDrawBuffer );
+
+ if ( ( mplPBDrawBuffer = malloc( appMPlayer.bar.Bitmap.ImageSize ) ) == NULL )
+ {
+ mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_NEMDB );
+ exit( 0 );
+ }
+
+ appMPlayer.barWindow.Parent=appMPlayer.subWindow.WindowID;
+ wsCreateWindow( &appMPlayer.barWindow,
+ appMPlayer.bar.x,appMPlayer.bar.y,appMPlayer.bar.width,appMPlayer.bar.height,
+ wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsHideFrame|wsHideWindow,"PlayBar" );
+
+ wsSetShape( &appMPlayer.barWindow,appMPlayer.bar.Mask.Image );
+
+ appMPlayer.barWindow.ReDraw=(void *)mplPBDraw;
+ appMPlayer.barWindow.MouseHandler=mplPBMouseHandle;
+ appMPlayer.barWindow.KeyHandler=mplMainKeyHandle;
+
+ mplPBLength=appMPlayer.subWindow.Height;
+}