Mercurial > mplayer.hg
annotate gui/mplayer/pb.c @ 29864:4e79bdef6176
synced with r29885
author | ptt |
---|---|
date | Thu, 12 Nov 2009 17:04:41 +0000 |
parents | 0f1b5b68af32 |
children | 016e5fc1dead |
rev | line source |
---|---|
26458 | 1 /* |
2 * main window | |
3 * | |
4 * This file is part of MPlayer. | |
5 * | |
6 * MPlayer is free software; you can redistribute it and/or modify | |
7 * it under the terms of the GNU General Public License as published by | |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
11 * MPlayer is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
19 */ | |
23077 | 20 |
21 #include <stdlib.h> | |
22 #include <stdio.h> | |
23 #include <inttypes.h> | |
24 #include <sys/stat.h> | |
25 #include <unistd.h> | |
23305
22d3d12c6dfb
Include string.h for memcpy, fastmemcpy.h alone is not enough.
reimar
parents:
23077
diff
changeset
|
26 #include <string.h> |
23077 | 27 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
28 #include "config.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
29 #include "gui/app.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
30 #include "gui/skin/font.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
31 #include "gui/skin/skin.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
32 #include "gui/wm/ws.h" |
23077 | 33 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
34 #include "help_mp.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
35 #include "libvo/x11_common.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
36 #include "libvo/fastmemcpy.h" |
23077 | 37 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
38 #include "stream/stream.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
39 #include "mixer.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
40 #include "libvo/sub.h" |
23077 | 41 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
42 #include "libmpdemux/demuxer.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
43 #include "libmpdemux/stheader.h" |
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
44 #include "codec-cfg.h" |
23077 | 45 |
46 #include "gmplayer.h" | |
47 #include "play.h" | |
48 #include "widgets.h" | |
25603
01754b23193e
Rename common.[ch], there are too many files by that name.
diego
parents:
23457
diff
changeset
|
49 #include "gui_common.h" |
23077 | 50 |
28051 | 51 unsigned int GetTimerMS( void ); |
52 unsigned int GetTimer( void ); | |
23077 | 53 |
54 unsigned char * mplPBDrawBuffer = NULL; | |
55 int mplPBVisible = 0; | |
56 int mplPBLength = 0; | |
57 int mplPBFade = 0; | |
58 | |
59 void mplPBDraw( void ) | |
60 { | |
61 int x; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
62 |
23077 | 63 if ( !appMPlayer.subWindow.isFullScreen ) return; |
64 if ( !mplPBVisible || !appMPlayer.barIsPresent ) return; | |
65 | |
66 // appMPlayer.bar.x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ) / 2; | |
67 switch( appMPlayer.bar.x ) | |
68 { | |
69 case -1: x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ) / 2; break; | |
70 case -2: x=( appMPlayer.subWindow.Width - appMPlayer.bar.width ); break; | |
71 default: x=appMPlayer.bar.x; | |
72 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
73 |
23077 | 74 switch ( mplPBFade ) |
75 { | |
76 case 1: // fade in | |
77 mplPBLength--; | |
78 if ( appMPlayer.subWindow.Height - appMPlayer.bar.height >= mplPBLength ) | |
79 { | |
80 mplPBLength=appMPlayer.subWindow.Height - appMPlayer.bar.height; | |
81 mplPBFade=0; | |
82 vo_mouse_autohide=0; | |
83 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
84 wsMoveWindow( &appMPlayer.barWindow,0,x,mplPBLength ); |
23077 | 85 break; |
86 case 2: // fade out | |
87 mplPBLength+=10; | |
88 if ( mplPBLength > appMPlayer.subWindow.Height ) | |
89 { | |
90 mplPBLength=appMPlayer.subWindow.Height; | |
91 mplPBFade=mplPBVisible=0; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
92 vo_mouse_autohide=1; |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
93 wsVisibleWindow( &appMPlayer.barWindow,wsHideWindow ); |
23077 | 94 return; |
95 } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
96 wsMoveWindow( &appMPlayer.barWindow,0,x,mplPBLength ); |
23077 | 97 break; |
98 } | |
99 | |
100 // --- render | |
101 if ( appMPlayer.barWindow.State == wsWindowExpose ) | |
102 { | |
103 btnModify( evSetMoviePosition,guiIntfStruct.Position ); | |
104 btnModify( evSetVolume,guiIntfStruct.Volume ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
105 |
23077 | 106 vo_mouse_autohide=0; |
107 | |
23457
a124f3abc1ec
Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents:
23305
diff
changeset
|
108 fast_memcpy( mplPBDrawBuffer,appMPlayer.bar.Bitmap.Image,appMPlayer.bar.Bitmap.ImageSize ); |
23077 | 109 Render( &appMPlayer.barWindow,appMPlayer.barItems,appMPlayer.NumberOfBarItems,mplPBDrawBuffer,appMPlayer.bar.Bitmap.ImageSize ); |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
110 wsConvert( &appMPlayer.barWindow,mplPBDrawBuffer,appMPlayer.bar.Bitmap.ImageSize ); |
23077 | 111 } |
112 wsPutImage( &appMPlayer.barWindow ); | |
113 } | |
114 | |
115 #define itPLMButton (itNULL - 1) | |
116 #define itPRMButton (itNULL - 2) | |
117 | |
118 void mplPBMouseHandle( int Button,int X,int Y,int RX,int RY ) | |
119 { | |
120 static int itemtype = 0; | |
121 int i; | |
122 wItem * item = NULL; | |
123 float value = 0.0f; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
124 |
23077 | 125 static int SelectedItem = -1; |
126 int currentselected = -1; | |
127 | |
128 for ( i=0;i < appMPlayer.NumberOfBarItems + 1;i++ ) | |
129 if ( ( appMPlayer.barItems[i].pressed != btnDisabled )&& | |
130 ( 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 ) ) ) | |
131 { currentselected=i; break; } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
132 |
23077 | 133 switch ( Button ) |
134 { | |
135 case wsPMMouseButton: | |
136 gtkShow( evHidePopUpMenu,NULL ); | |
137 mplShowMenu( RX,RY ); | |
138 break; | |
139 case wsRMMouseButton: | |
140 mplHideMenu( RX,RY,0 ); | |
141 break; | |
142 case wsRRMouseButton: | |
143 gtkShow( evShowPopUpMenu,NULL ); | |
144 break; | |
145 // --- | |
146 case wsPLMouseButton: | |
147 gtkShow( evHidePopUpMenu,NULL ); | |
148 SelectedItem=currentselected; | |
149 if ( SelectedItem == -1 ) break; // yeees, i'm move the fucking window | |
150 item=&appMPlayer.barItems[SelectedItem]; | |
151 itemtype=item->type; | |
152 item->pressed=btnPressed; | |
153 | |
154 switch( item->type ) | |
155 { | |
156 case itButton: | |
157 if ( ( SelectedItem > -1 ) && | |
158 ( ( ( item->msg == evPlaySwitchToPause && item->msg == evPauseSwitchToPlay ) ) || | |
159 ( ( item->msg == evPauseSwitchToPlay && item->msg == evPlaySwitchToPause ) ) ) ) | |
160 { item->pressed=btnDisabled; } | |
161 break; | |
162 } | |
163 | |
164 break; | |
165 case wsRLMouseButton: | |
166 item=&appMPlayer.barItems[SelectedItem]; | |
167 item->pressed=btnReleased; | |
168 SelectedItem=-1; | |
169 if ( currentselected == - 1 ) { itemtype=0; break; } | |
170 value=0; | |
171 | |
172 switch( itemtype ) | |
173 { | |
174 case itPotmeter: | |
175 case itHPotmeter: | |
176 btnModify( item->msg,(float)( X - item->x ) / item->width * 100.0f ); | |
177 mplEventHandling( item->msg,item->value ); | |
178 value=item->value; | |
179 break; | |
180 case itVPotmeter: | |
181 btnModify( item->msg, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); | |
182 mplEventHandling( item->msg,item->value ); | |
183 value=item->value; | |
184 break; | |
185 } | |
186 mplEventHandling( item->msg,value ); | |
187 | |
188 itemtype=0; | |
189 break; | |
190 // --- | |
191 case wsP5MouseButton: value=-2.5f; goto rollerhandled; | |
192 case wsP4MouseButton: value= 2.5f; | |
193 rollerhandled: | |
194 item=&appMPlayer.barItems[currentselected]; | |
195 if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) ) | |
196 { | |
197 item->value+=value; | |
198 btnModify( item->msg,item->value ); | |
199 mplEventHandling( item->msg,item->value ); | |
200 } | |
201 break; | |
202 // --- | |
203 case wsMoveMouse: | |
204 item=&appMPlayer.barItems[SelectedItem]; | |
205 switch ( itemtype ) | |
206 { | |
207 case itPRMButton: | |
208 mplMenuMouseHandle( X,Y,RX,RY ); | |
209 break; | |
210 case itPotmeter: | |
211 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
212 goto potihandled; | |
213 case itVPotmeter: | |
214 item->value=(1. - (float)( Y - item->y ) / item->height) * 100.0f; | |
215 goto potihandled; | |
216 case itHPotmeter: | |
217 item->value=(float)( X - item->x ) / item->width * 100.0f; | |
218 potihandled: | |
219 if ( item->value > 100.0f ) item->value=100.0f; | |
220 if ( item->value < 0.0f ) item->value=0.0f; | |
221 mplEventHandling( item->msg,item->value ); | |
222 break; | |
223 } | |
224 break; | |
225 } | |
226 } | |
227 | |
228 void mplPBShow( int x, int y ) | |
229 { | |
230 if ( !appMPlayer.barIsPresent || !gtkEnablePlayBar ) return; | |
231 if ( !appMPlayer.subWindow.isFullScreen ) return; | |
232 | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
233 if ( y > appMPlayer.subWindow.Height - appMPlayer.bar.height ) |
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
234 { |
23077 | 235 if ( !mplPBFade ) wsVisibleWindow( &appMPlayer.barWindow,wsShowWindow ); |
236 mplPBFade=1; mplPBVisible=1; wsPostRedisplay( &appMPlayer.barWindow ); | |
237 } | |
238 else if ( !mplPBFade ) mplPBFade=2; | |
239 } | |
240 | |
241 void mplPBInit( void ) | |
242 { | |
243 if ( !appMPlayer.barIsPresent ) return; | |
244 | |
245 gfree( (void**)&mplPBDrawBuffer ); | |
246 | |
247 if ( ( mplPBDrawBuffer = malloc( appMPlayer.bar.Bitmap.ImageSize ) ) == NULL ) | |
248 { | |
249 mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_NEMDB ); | |
250 exit( 0 ); | |
251 } | |
252 | |
253 appMPlayer.barWindow.Parent=appMPlayer.subWindow.WindowID; | |
254 wsCreateWindow( &appMPlayer.barWindow, | |
255 appMPlayer.bar.x,appMPlayer.bar.y,appMPlayer.bar.width,appMPlayer.bar.height, | |
256 wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsHideFrame|wsHideWindow,"PlayBar" ); | |
257 | |
258 wsSetShape( &appMPlayer.barWindow,appMPlayer.bar.Mask.Image ); | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
259 |
23077 | 260 appMPlayer.barWindow.ReDraw=(void *)mplPBDraw; |
261 appMPlayer.barWindow.MouseHandler=mplPBMouseHandle; | |
262 appMPlayer.barWindow.KeyHandler=mplMainKeyHandle; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
263 |
23077 | 264 mplPBLength=appMPlayer.subWindow.Height; |
265 } |