diff gui/mplayer/pb.c @ 23077:17bf4f4b0715

Gui --> gui
author diego
date Mon, 23 Apr 2007 07:42:42 +0000
parents
children 22d3d12c6dfb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui/mplayer/pb.c	Mon Apr 23 07:42:42 2007 +0000
@@ -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;
+}