Mercurial > mplayer.hg
annotate gui/mplayer/pb.c @ 33263:5f527a9a9521
Add an exit function.
This function will allow performing clean-up operations.
(MPlayer calls guiDone() before exiting, but only if the GUI has been
initialized, i.e. if guiInit() has been called successfully. Any
exit_player()/exit_player_with_rc() after GUI's cfg_read() until
guiInit(), or any exit_player() during guiInit() itself will end the GUI
without calling guiDone(). This exit function will at least handle
abortions during guiInit() itself. It will be called twice in case of an
guiExit() after GUI initialization - first directly, next by guiDone()
via MPlayer's exit_player_with_rc().)
author | ib |
---|---|
date | Tue, 03 May 2011 12:19:22 +0000 |
parents | 9566100d88a1 |
children | ba473335e68b |
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 <sys/stat.h> | |
24 #include <unistd.h> | |
23305
22d3d12c6dfb
Include string.h for memcpy, fastmemcpy.h alone is not enough.
reimar
parents:
23077
diff
changeset
|
25 #include <string.h> |
23077 | 26 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
27 #include "config.h" |
26365
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
28 #include "gui/app.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
29 #include "gui/skin/font.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
30 #include "gui/skin/skin.h" |
10dfbc523184
Add gui/ prefix to some #include paths so that compilation from the
diego
parents:
26203
diff
changeset
|
31 #include "gui/wm/ws.h" |
23077 | 32 |
26382
b2f4abcf20ed
Make include paths consistent; do not use ../ in them.
diego
parents:
26365
diff
changeset
|
33 #include "help_mp.h" |
33024 | 34 #include "mp_core.h" |
26382
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" |
32467 | 40 #include "sub/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 | |
30535
016e5fc1dead
GUI: Mark functions that are not used outside their files as static.
diego
parents:
29263
diff
changeset
|
59 static void mplPBDraw( void ) |
23077 | 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 ); |
32931
03b1051bed5c
Rename the 'NumberOf' members of the listItems structure.
ib
parents:
32919
diff
changeset
|
109 Render( &appMPlayer.barWindow,appMPlayer.barItems,appMPlayer.IndexOfBarItems,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 | |
30535
016e5fc1dead
GUI: Mark functions that are not used outside their files as static.
diego
parents:
29263
diff
changeset
|
115 static void mplPBMouseHandle( int Button, int X, int Y, int RX, int RY ) |
23077 | 116 { |
117 static int itemtype = 0; | |
118 int i; | |
119 wItem * item = NULL; | |
120 float value = 0.0f; | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
121 |
23077 | 122 static int SelectedItem = -1; |
123 int currentselected = -1; | |
124 | |
32931
03b1051bed5c
Rename the 'NumberOf' members of the listItems structure.
ib
parents:
32919
diff
changeset
|
125 for ( i=0;i <= appMPlayer.IndexOfBarItems;i++ ) |
23077 | 126 if ( ( appMPlayer.barItems[i].pressed != btnDisabled )&& |
127 ( 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 ) ) ) | |
128 { currentselected=i; break; } | |
29263
0f1b5b68af32
whitespace cosmetics: Remove all trailing whitespace.
diego
parents:
28051
diff
changeset
|
129 |
23077 | 130 switch ( Button ) |
131 { | |
132 case wsPMMouseButton: | |
133 gtkShow( evHidePopUpMenu,NULL ); | |
134 mplShowMenu( RX,RY ); | |
135 break; | |
136 case wsRMMouseButton: | |
137 mplHideMenu( RX,RY,0 ); | |
138 break; | |
139 case wsRRMouseButton: | |
140 gtkShow( evShowPopUpMenu,NULL ); | |
141 break; | |
142 // --- | |
143 case wsPLMouseButton: | |
144 gtkShow( evHidePopUpMenu,NULL ); | |
145 SelectedItem=currentselected; | |
146 if ( SelectedItem == -1 ) break; // yeees, i'm move the fucking window | |
147 item=&appMPlayer.barItems[SelectedItem]; | |
148 itemtype=item->type; | |
149 item->pressed=btnPressed; | |
150 | |
151 switch( item->type ) | |
152 { | |
153 case itButton: | |
154 if ( ( SelectedItem > -1 ) && | |
32911 | 155 ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) || |
156 ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) ) | |
23077 | 157 { item->pressed=btnDisabled; } |
158 break; | |
159 } | |
160 | |
161 break; | |
162 case wsRLMouseButton: | |
33107 | 163 if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter |
164 { | |
33108 | 165 item=&appMPlayer.barItems[SelectedItem]; |
166 item->pressed=btnReleased; | |
33107 | 167 } |
23077 | 168 SelectedItem=-1; |
169 if ( currentselected == - 1 ) { itemtype=0; break; } | |
170 value=0; | |
171 | |
172 switch( itemtype ) | |
173 { | |
174 case itPotmeter: | |
175 case itHPotmeter: | |
32911 | 176 btnModify( item->message,(float)( X - item->x ) / item->width * 100.0f ); |
177 mplEventHandling( item->message,item->value ); | |
23077 | 178 value=item->value; |
179 break; | |
180 case itVPotmeter: | |
32911 | 181 btnModify( item->message, ( 1. - (float)( Y - item->y ) / item->height) * 100.0f ); |
182 mplEventHandling( item->message,item->value ); | |
23077 | 183 value=item->value; |
184 break; | |
185 } | |
32911 | 186 mplEventHandling( item->message,value ); |
23077 | 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; | |
32911 | 198 btnModify( item->message,item->value ); |
199 mplEventHandling( item->message,item->value ); | |
23077 | 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; | |
32911 | 221 mplEventHandling( item->message,item->value ); |
23077 | 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 { | |
33024 | 249 gmp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_NEMDB ); |
33263 | 250 guiExit( EXIT_ERROR ); |
23077 | 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 } |