comparison Gui/mplayer/mw.c @ 8973:0a665389cf2b

- add playbar - add vpotmeter - fix gtk menu's pixel bug - fix some critical (10l) bug
author pontscho
date Fri, 17 Jan 2003 22:39:43 +0000
parents bfe1b826cff1
children e0a3139a4dea
comparison
equal deleted inserted replaced
8972:2ed9b2143f94 8973:0a665389cf2b
41 41
42 int boxMoved = 0; 42 int boxMoved = 0;
43 int sx = 0,sy = 0; 43 int sx = 0,sy = 0;
44 int i,pot = 0; 44 int i,pot = 0;
45 45
46 inline void TranslateFilename( int c,char * tmp ) 46 #include "common.h"
47 {
48 int i;
49 switch ( guiIntfStruct.StreamType )
50 {
51 case STREAMTYPE_STREAM:
52 strcpy( tmp,guiIntfStruct.Filename );
53 break;
54 case STREAMTYPE_FILE:
55 if ( ( guiIntfStruct.Filename )&&( guiIntfStruct.Filename[0] ) )
56 {
57 if ( strrchr( guiIntfStruct.Filename,'/' ) ) strcpy( tmp,strrchr( guiIntfStruct.Filename,'/' ) + 1 );
58 else strcpy( tmp,guiIntfStruct.Filename );
59 if ( tmp[strlen( tmp ) - 4] == '.' ) tmp[strlen( tmp ) - 4]=0;
60 if ( tmp[strlen( tmp ) - 5] == '.' ) tmp[strlen( tmp ) - 5]=0;
61 } else strcpy( tmp,MSGTR_NoFileLoaded );
62 break;
63 #ifdef USE_DVDREAD
64 case STREAMTYPE_DVD:
65 if ( guiIntfStruct.DVD.current_chapter ) sprintf( tmp,MSGTR_Chapter,guiIntfStruct.DVD.current_chapter );
66 else strcat( tmp,MSGTR_NoChapter );
67 break;
68 #endif
69 #ifdef HAVE_VCD
70 case STREAMTYPE_VCD:
71 sprintf( tmp,MSGTR_VCDTrack,guiIntfStruct.Track );
72 break;
73 #endif
74 default: strcpy( tmp,MSGTR_NoMediaOpened );
75 }
76 if ( c )
77 {
78 for ( i=0;i < (int)strlen( tmp );i++ )
79 {
80 int t=0;
81 if ( c == 1 ) { if ( ( tmp[i] >= 'A' )&&( tmp[i] <= 'Z' ) ) t=32; }
82 if ( c == 2 ) { if ( ( tmp[i] >= 'a' )&&( tmp[i] <= 'z' ) ) t=-32; }
83 tmp[i]=(char)( tmp[i] + t );
84 }
85 }
86 }
87
88 char * Translate( char * str )
89 {
90 static char trbuf[512];
91 char tmp[512];
92 int i,c;
93 int t;
94 memset( trbuf,0,512 );
95 memset( tmp,0,128 );
96 for ( c=0,i=0;i < (int)strlen( str );i++ )
97 {
98 if ( str[i] != '$' ) { trbuf[c++]=str[i]; trbuf[c]=0; }
99 else
100 {
101 switch ( str[++i] )
102 {
103 case 't': sprintf( tmp,"%02d",guiIntfStruct.Track ); strcat( trbuf,tmp ); break;
104 case 'o': TranslateFilename( 0,tmp ); strcat( trbuf,tmp ); break;
105 case 'f': TranslateFilename( 1,tmp ); strcat( trbuf,tmp ); break;
106 case 'F': TranslateFilename( 2,tmp ); strcat( trbuf,tmp ); break;
107 case '6': t=guiIntfStruct.LengthInSec; goto calclengthhhmmss;
108 case '1': t=guiIntfStruct.TimeSec;
109 calclengthhhmmss:
110 sprintf( tmp,"%02d:%02d:%02d",t/3600,t/60%60,t%60 ); strcat( trbuf,tmp );
111 break;
112 case '7': t=guiIntfStruct.LengthInSec; goto calclengthmmmmss;
113 case '2': t=guiIntfStruct.TimeSec;
114 calclengthmmmmss:
115 sprintf( tmp,"%04d:%02d",t/60,t%60 ); strcat( trbuf,tmp );
116 break;
117 case '3': sprintf( tmp,"%02d",guiIntfStruct.TimeSec / 3600 ); strcat( trbuf,tmp ); break;
118 case '4': sprintf( tmp,"%02d",( ( guiIntfStruct.TimeSec / 60 ) % 60 ) ); strcat( trbuf,tmp ); break;
119 case '5': sprintf( tmp,"%02d",guiIntfStruct.TimeSec % 60 ); strcat( trbuf,tmp ); break;
120 case '8': sprintf( tmp,"%01d:%02d:%02d",guiIntfStruct.TimeSec / 3600,( guiIntfStruct.TimeSec / 60 ) % 60,guiIntfStruct.TimeSec % 60 ); strcat( trbuf,tmp ); break;
121 case 'v': sprintf( tmp,"%3.2f%%",guiIntfStruct.Volume ); strcat( trbuf,tmp ); break;
122 case 'V': sprintf( tmp,"%3.1f",guiIntfStruct.Volume ); strcat( trbuf,tmp ); break;
123 case 'b': sprintf( tmp,"%3.2f%%",guiIntfStruct.Balance ); strcat( trbuf,tmp ); break;
124 case 'B': sprintf( tmp,"%3.1f",guiIntfStruct.Balance ); strcat( trbuf,tmp ); break;
125 case 'd': sprintf( tmp,"%d",guiIntfStruct.FrameDrop ); strcat( trbuf,tmp ); break;
126 case 'x': sprintf( tmp,"%d",guiIntfStruct.MovieWidth ); strcat( trbuf,tmp ); break;
127 case 'y': sprintf( tmp,"%d",guiIntfStruct.MovieHeight ); strcat( trbuf,tmp ); break;
128 case 'C': sprintf( tmp,"%s", guiIntfStruct.sh_video? ((sh_video_t *)guiIntfStruct.sh_video)->codec->name : "");
129 strcat( trbuf,tmp ); break;
130 case 's': if ( guiIntfStruct.Playing == 0 ) strcat( trbuf,"s" ); break;
131 case 'l': if ( guiIntfStruct.Playing == 1 ) strcat( trbuf,"p" ); break;
132 case 'e': if ( guiIntfStruct.Playing == 2 ) strcat( trbuf,"e" ); break;
133 case 'a':
134 if ( muted ) { strcat( trbuf,"n" ); break; }
135 switch ( guiIntfStruct.AudioType )
136 {
137 case 0: strcat( trbuf,"n" ); break;
138 case 1: strcat( trbuf,"m" ); break;
139 case 2: strcat( trbuf,"t" ); break;
140 }
141 break;
142 case 'T':
143 switch ( guiIntfStruct.StreamType )
144 {
145 case STREAMTYPE_FILE: strcat( trbuf,"f" ); break;
146 #ifdef HAVE_VCD
147 case STREAMTYPE_VCD: strcat( trbuf,"v" ); break;
148 #endif
149 case STREAMTYPE_STREAM: strcat( trbuf,"u" ); break;
150 #ifdef USE_DVDREAD
151 case STREAMTYPE_DVD: strcat( trbuf,"d" ); break;
152 #endif
153 default: strcat( trbuf," " ); break;
154 }
155 break;
156 case '$': strcat( trbuf,"$" ); break;
157 default: continue;
158 }
159 c=strlen( trbuf );
160 }
161 }
162 return trbuf;
163 }
164
165 inline void PutImage( txSample * bf,int x,int y,int max,int ofs )
166 {
167 int i=0,ix,iy;
168 uint32_t * buf = NULL;
169 uint32_t * drw = NULL;
170 uint32_t tmp;
171
172 if ( ( !bf )||( bf->Image == NULL ) ) return;
173
174 i=( bf->Width * ( bf->Height / max ) ) * ofs;
175 buf=(uint32_t *)mplDrawBuffer;
176 drw=(uint32_t *)bf->Image;
177
178 for ( iy=y;iy < (int)(y+bf->Height / max);iy++ )
179 for ( ix=x;ix < (int)(x+bf->Width);ix++ )
180 {
181 tmp=drw[i++];
182 if ( tmp != 0x00ff00ff )
183 buf[ iy*appMPlayer.main.Bitmap.Width+ix ]=tmp;
184 }
185 }
186 47
187 void mplMainDraw( void ) 48 void mplMainDraw( void )
188 { 49 {
189 wItem * item; 50 wItem * item;
190 txSample * image = NULL; 51 txSample * image = NULL;
194 55
195 if ( appMPlayer.mainWindow.Visible == wsWindowNotVisible || 56 if ( appMPlayer.mainWindow.Visible == wsWindowNotVisible ||
196 !mainVisible ) return; 57 !mainVisible ) return;
197 // !appMPlayer.mainWindow.Mapped ) return; 58 // !appMPlayer.mainWindow.Mapped ) return;
198 59
199 btnModify( evSetMoviePosition,guiIntfStruct.Position );
200 btnModify( evSetVolume,guiIntfStruct.Volume );
201
202 if ( mplMainRender && appMPlayer.mainWindow.State == wsWindowExpose ) 60 if ( mplMainRender && appMPlayer.mainWindow.State == wsWindowExpose )
203 { 61 {
62 btnModify( evSetMoviePosition,guiIntfStruct.Position );
63 btnModify( evSetVolume,guiIntfStruct.Volume );
64
204 memcpy( mplDrawBuffer,appMPlayer.main.Bitmap.Image,appMPlayer.main.Bitmap.ImageSize ); 65 memcpy( mplDrawBuffer,appMPlayer.main.Bitmap.Image,appMPlayer.main.Bitmap.ImageSize );
205 for( i=0;i < appMPlayer.NumberOfItems + 1;i++ ) 66 Render( &appMPlayer.mainWindow,appMPlayer.Items,appMPlayer.NumberOfItems,mplDrawBuffer,appMPlayer.main.Bitmap.ImageSize );
206 {
207 item=&appMPlayer.Items[i];
208 switch( item->type )
209 {
210 case itButton:
211 PutImage( &item->Bitmap,item->x,item->y,3,item->pressed );
212 break;
213 case itPotmeter:
214 PutImage( &item->Bitmap,item->x,item->y,item->phases,( item->phases - 1 ) * ( item->value / 100.0f ) );
215 break;
216 case itHPotmeter:
217 PutImage( &item->Bitmap,item->x,item->y,item->phases,item->phases * ( item->value / 100.0f ) );
218 PutImage( &item->Mask,item->x + (int)( ( item->width - item->psx ) * item->value / 100.0f ),item->y,3,item->pressed );
219 break;
220 case itSLabel:
221 image=fntRender( item,0,"%s",item->label );
222 if ( image ) PutImage( image,item->x,item->y,1,0 );
223 case itDLabel:
224 {
225 char * t = Translate( item->label );
226 int l = fntTextWidth( item->fontid,t );
227 image=fntRender( item,(GetTimerMS() / 20)%(l?l:item->width),"%s",t );
228 }
229 if ( image ) PutImage( image,item->x,item->y,1,0 );
230 break;
231 }
232 }
233 wsConvert( &appMPlayer.mainWindow,mplDrawBuffer,appMPlayer.main.Bitmap.ImageSize );
234 mplMainRender=0; 67 mplMainRender=0;
235 } 68 }
236 wsPutImage( &appMPlayer.mainWindow ); 69 wsPutImage( &appMPlayer.mainWindow );
237 // XFlush( wsDisplay ); 70 // XFlush( wsDisplay );
238 } 71 }
496 329
497 // --- timer events 330 // --- timer events
498 case evRedraw: 331 case evRedraw:
499 mplMainRender=1; 332 mplMainRender=1;
500 wsPostRedisplay( &appMPlayer.mainWindow ); 333 wsPostRedisplay( &appMPlayer.mainWindow );
334 wsPostRedisplay( &appMPlayer.barWindow );
501 break; 335 break;
502 // --- system events 336 // --- system events
503 #ifdef MP_DEBUG 337 #ifdef MP_DEBUG
504 case evNone: 338 case evNone:
505 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] event none received.\n" ); 339 mp_msg( MSGT_GPLAYER,MSGL_STATUS,"[mw] event none received.\n" );
540 mplHideMenu( RX,RY,0 ); 374 mplHideMenu( RX,RY,0 );
541 break; 375 break;
542 376
543 case wsPLMouseButton: 377 case wsPLMouseButton:
544 gtkShow( evHidePopUpMenu,NULL ); 378 gtkShow( evHidePopUpMenu,NULL );
545 sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton; // if move the main window 379 sx=X; sy=Y; boxMoved=1; itemtype=itPLMButton;
546 SelectedItem=currentselected; 380 SelectedItem=currentselected;
547 if ( SelectedItem == -1 ) break; // yeees, i'm move the fucking window 381 if ( SelectedItem == -1 ) break;
548 boxMoved=0; //mplMainRender=1; // No, not move the window, i'm pressed one button 382 boxMoved=0;
549 item=&appMPlayer.Items[SelectedItem]; 383 item=&appMPlayer.Items[SelectedItem];
550 itemtype=item->type; 384 itemtype=item->type;
551 item->pressed=btnPressed; 385 item->pressed=btnPressed;
552 switch( item->type ) 386 switch( item->type )
553 { 387 {
554 case itButton: 388 case itButton:
555 if ( ( SelectedItem > -1 ) && 389 if ( ( SelectedItem > -1 ) &&
556 ( ( ( appMPlayer.Items[SelectedItem].msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) || 390 ( ( ( item->msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) ||
557 ( ( appMPlayer.Items[SelectedItem].msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) ) 391 ( ( item->msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) )
558 { appMPlayer.Items[SelectedItem].pressed=btnDisabled; } 392 { item->pressed=btnDisabled; }
559 break; 393 break;
560 } 394 }
561 break; 395 break;
562 case wsRLMouseButton: 396 case wsRLMouseButton:
563 boxMoved=0; 397 boxMoved=0;
574 mplEventHandling( item->msg,item->value ); 408 mplEventHandling( item->msg,item->value );
575 value=item->value; 409 value=item->value;
576 break; 410 break;
577 } 411 }
578 mplEventHandling( item->msg,value ); 412 mplEventHandling( item->msg,value );
579 // mplMainRender=1;
580 itemtype=0; 413 itemtype=0;
581 break; 414 break;
582 415
583 case wsPRMouseButton: 416 case wsPRMouseButton:
584 gtkShow( evShowPopUpMenu,NULL ); 417 gtkShow( evShowPopUpMenu,NULL );
610 mplMenuMouseHandle( X,Y,RX,RY ); 443 mplMenuMouseHandle( X,Y,RX,RY );
611 break; 444 break;
612 case itPotmeter: 445 case itPotmeter:
613 item->value=(float)( X - item->x ) / item->width * 100.0f; 446 item->value=(float)( X - item->x ) / item->width * 100.0f;
614 goto potihandled; 447 goto potihandled;
448 case itVPotmeter:
449 item->value=(float)( Y - item->y ) / item->height * 100.0f;
450 goto potihandled;
615 case itHPotmeter: 451 case itHPotmeter:
616 item->value=(float)( X - item->x ) / item->width * 100.0f; 452 item->value=(float)( X - item->x ) / item->width * 100.0f;
617 potihandled: 453 potihandled:
618 if ( item->value > 100.0f ) item->value=100.0f; 454 if ( item->value > 100.0f ) item->value=100.0f;
619 if ( item->value < 0.0f ) item->value=0.0f; 455 if ( item->value < 0.0f ) item->value=0.0f;
620 mplEventHandling( item->msg,item->value ); 456 mplEventHandling( item->msg,item->value );
621 break; 457 break;
622 } 458 }
623 break; 459 break;
624 } 460 }
625 // if ( Button != wsMoveMouse ) wsPostRedisplay( &appMPlayer.mainWindow );
626 } 461 }
627 462
628 int keyPressed = 0; 463 int keyPressed = 0;
629 464
630 void mplMainKeyHandle( int KeyCode,int Type,int Key ) 465 void mplMainKeyHandle( int KeyCode,int Type,int Key )
657 case wsXF86Play: msg=evPlaySwitchToPause; break; 492 case wsXF86Play: msg=evPlaySwitchToPause; break;
658 case wsXF86Stop: msg=evStop; break; 493 case wsXF86Stop: msg=evStop; break;
659 case wsXF86Prev: msg=evPrev; break; 494 case wsXF86Prev: msg=evPrev; break;
660 case wsXF86Next: msg=evNext; break; 495 case wsXF86Next: msg=evNext; break;
661 case wsXF86Media: msg=evLoad; break; 496 case wsXF86Media: msg=evLoad; break;
662 case wsEscape: 497 case wsEscape:
663 if ( appMPlayer.subWindow.isFullScreen ) 498 if ( appMPlayer.subWindow.isFullScreen )
664 { 499 {
665 if ( guiIntfStruct.event_struct ) 500 if ( guiIntfStruct.event_struct ) ((XEvent *)guiIntfStruct.event_struct)->type=None;
666 { memset( guiIntfStruct.event_struct,0,sizeof( XEvent ) ); guiIntfStruct.event_struct=NULL; }
667 mplEventHandling( evNormalSize,0 ); 501 mplEventHandling( evNormalSize,0 );
668 break; 502 return;
669 } 503 }
670
671 default: vo_x11_putkey( Key ); return; 504 default: vo_x11_putkey( Key ); return;
672 } 505 }
673 } 506 }
674 if ( msg != evNone ) mplEventHandling( msg,0 ); 507 if ( msg != evNone ) mplEventHandling( msg,0 );
675 } 508 }