Mercurial > mplayer.hg
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 } |