annotate gui/ui/main.c @ 36679:36cbede21428

Fix bug with unicode font loading for font.desc files. Unicode glyphs might not get loaded even if they are requested and available. Fix it by checking the font encoding rather than the subtitle encoding when loading the font.
author ib
date Sat, 01 Feb 2014 16:57:50 +0000
parents 7d250553d451
children eed2fb870f43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26458
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
1 /*
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
2 * This file is part of MPlayer.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
3 *
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
5 * it under the terms of the GNU General Public License as published by
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
7 * (at your option) any later version.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
8 *
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
12 * GNU General Public License for more details.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
13 *
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
14 * You should have received a copy of the GNU General Public License along
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
b0a7b35b78d2 Add standard GPL header to individual files.
diego
parents: 26382
diff changeset
17 */
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
18
34699
ed0e00db4306 Cosmetic: Move, change and add some comments on GUI windows.
ib
parents: 34697
diff changeset
19 /* main window */
ed0e00db4306 Cosmetic: Move, change and add some comments on GUI windows.
ib
parents: 34697
diff changeset
20
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
21 #include <stdlib.h>
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
22 #include <stdio.h>
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
23 #include <sys/stat.h>
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
24 #include <unistd.h>
23305
22d3d12c6dfb Include string.h for memcpy, fastmemcpy.h alone is not enough.
reimar
parents: 23154
diff changeset
25 #include <string.h>
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
26
35528
ab07b17fddfb Rebuild GUI directory structure.
ib
parents: 35525
diff changeset
27 #include "ui.h"
35525
e27855a45128 Rebuild GUI directory structure.
ib
parents: 35521
diff changeset
28 #include "gui/app/app.h"
e27855a45128 Rebuild GUI directory structure.
ib
parents: 35521
diff changeset
29 #include "gui/app/gui.h"
33738
998f94e62a61 Remove unnecessary #include "gui/interface.h".
ib
parents: 33737
diff changeset
30 #include "gui/interface.h"
26365
10dfbc523184 Add gui/ prefix to some #include paths so that compilation from the
diego
parents: 26203
diff changeset
31 #include "gui/skin/font.h"
10dfbc523184 Add gui/ prefix to some #include paths so that compilation from the
diego
parents: 26203
diff changeset
32 #include "gui/skin/skin.h"
33742
e1539e14d60f Move purely list related parts of gtkSet() from interface.c to list.c.
ib
parents: 33739
diff changeset
33 #include "gui/util/list.h"
33739
9f6d46d325de Remove gfree() from interface.c.
ib
parents: 33738
diff changeset
34 #include "gui/util/mem.h"
33737
71c29e8ec68f Move string functions from interface.c to string.c.
ib
parents: 33657
diff changeset
35 #include "gui/util/string.h"
26365
10dfbc523184 Add gui/ prefix to some #include paths so that compilation from the
diego
parents: 26203
diff changeset
36 #include "gui/wm/ws.h"
35789
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
37 #include "gui/wm/wsxdnd.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
38
26382
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
39 #include "help_mp.h"
34174
a93891202051 Add missing mp_msg.h #includes, remove some unnecessary ones.
diego
parents: 34077
diff changeset
40 #include "mp_msg.h"
26382
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
41 #include "libvo/x11_common.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
42 #include "libvo/fastmemcpy.h"
33531
84ce059fae34 Get non-multimedia X11 key definitions from libvo/wskeys.h.
ib
parents: 33525
diff changeset
43 #include "libvo/wskeys.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
44
26382
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
45 #include "stream/stream.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
46 #include "stream/url.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
47
26382
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
48 #include "libmpdemux/demuxer.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
49 #include "libmpdemux/stheader.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
50 #include "codec-cfg.h"
b2f4abcf20ed Make include paths consistent; do not use ../ in them.
diego
parents: 26365
diff changeset
51 #include "m_option.h"
30516
f4e017b6921a Fix exit_player() usage throughout the codebase.
diego
parents: 29263
diff changeset
52 #include "mp_core.h"
35545
d83d2bd5f365 Use FFMIN in evSetVolume.
ib
parents: 35544
diff changeset
53 #include "libavutil/common.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
54
33556
520fb0f7544c Rename GUI directory 'mplayer' and some files in it.
ib
parents: 33555
diff changeset
55 #include "actions.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
56
35795
5eac7c0879b7 Make mainDrawBuffer static.
ib
parents: 35789
diff changeset
57 static unsigned char * mainDrawBuffer;
35771
07057fd75c51 Relocate uiMainEvent().
ib
parents: 35770
diff changeset
58 int uiMainRender = True;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
59
35493
411875efca3f Introduce boolean symbolic constants.
ib
parents: 35490
diff changeset
60 int mainVisible = True;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
61
35493
411875efca3f Introduce boolean symbolic constants.
ib
parents: 35490
diff changeset
62 int boxMoved = False;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
63 int sx = 0,sy = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
64 int i,pot = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
65
33556
520fb0f7544c Rename GUI directory 'mplayer' and some files in it.
ib
parents: 33555
diff changeset
66 #include "render.h"
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
67
35780
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
68 static void uiMainDraw( void )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
69 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
70
33768
cee9987bc81d Remove guiExit().
ib
parents: 33763
diff changeset
71 if ( guiApp.mainWindow.State == wsWindowClosed ) mplayer( MPLAYER_EXIT_GUI, EXIT_QUIT, 0 );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
72
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
73 if ( guiApp.mainWindow.Visible == wsWindowNotVisible ||
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
74 !mainVisible ) return;
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
75 // !guiApp.mainWindow.Mapped ) return;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
76
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
77 if ( uiMainRender && guiApp.mainWindow.State == wsWindowExpose )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
78 {
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
79 btnModify( evSetMoviePosition,guiInfo.Position );
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
80 btnModify( evSetVolume,guiInfo.Volume );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
81
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
82 fast_memcpy( mainDrawBuffer,guiApp.main.Bitmap.Image,guiApp.main.Bitmap.ImageSize );
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
83 RenderAll( &guiApp.mainWindow,guiApp.mainItems,guiApp.IndexOfMainItems,mainDrawBuffer );
35493
411875efca3f Introduce boolean symbolic constants.
ib
parents: 35490
diff changeset
84 uiMainRender=False;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
85 }
35746
e745b22750f6 Add some notes for later checking and fixing.
ib
parents: 35727
diff changeset
86 // NOTE TO MYSELF: probably not, if uiMainRender is False
35681
80c5c89f77d6 Cosmetic: Rename ws functions for the sake of consistency.
ib
parents: 35675
diff changeset
87 wsImageDraw( &guiApp.mainWindow );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
88 // XFlush( wsDisplay );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
89 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
90
35780
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
91 static void uiMainMouse( int Button,int X,int Y,int RX,int RY )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
92 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
93 static int itemtype = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
94 int i;
35688
6fd886ce32b9 Cosmetic: Rename wItem guiItem.
ib
parents: 35681
diff changeset
95 guiItem * item = NULL;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
96 float value = 0.0f;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
97
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
98 static int SelectedItem = -1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
99 int currentselected = -1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
100
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
101 for ( i=0;i <= guiApp.IndexOfMainItems;i++ )
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
102 if ( ( guiApp.mainItems[i].pressed != btnDisabled )&&
35675
9e2183017f1f Move wgIsRect from ws.h to gui.h.
ib
parents: 35671
diff changeset
103 ( isInside( X,Y,guiApp.mainItems[i].x,guiApp.mainItems[i].y,guiApp.mainItems[i].x+guiApp.mainItems[i].width,guiApp.mainItems[i].y+guiApp.mainItems[i].height ) ) )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
104 { currentselected=i; break; }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
105
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
106 switch ( Button )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
107 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
108 case wsPMMouseButton:
34333
e8e4e6f9b7ac Change prefix for internal events from ev to iv.
ib
parents: 34329
diff changeset
109 gtkShow( ivHidePopUpMenu,NULL );
35766
16ed8155439b Rename uiShowMenu() uiMenuShow() and uiHideMenu() uiMenuHide().
ib
parents: 35763
diff changeset
110 uiMenuShow( RX,RY );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
111 itemtype=itPRMButton;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
112 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
113 case wsRMMouseButton:
35766
16ed8155439b Rename uiShowMenu() uiMenuShow() and uiHideMenu() uiMenuHide().
ib
parents: 35763
diff changeset
114 uiMenuHide( RX,RY,0 );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
115 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
116
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
117 case wsPLMouseButton:
34333
e8e4e6f9b7ac Change prefix for internal events from ev to iv.
ib
parents: 34329
diff changeset
118 gtkShow( ivHidePopUpMenu,NULL );
35493
411875efca3f Introduce boolean symbolic constants.
ib
parents: 35490
diff changeset
119 sx=X; sy=Y; boxMoved=True; itemtype=itPLMButton;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
120 SelectedItem=currentselected;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
121 if ( SelectedItem == -1 ) break;
35493
411875efca3f Introduce boolean symbolic constants.
ib
parents: 35490
diff changeset
122 boxMoved=False;
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
123 item=&guiApp.mainItems[SelectedItem];
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
124 itemtype=item->type;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
125 item->pressed=btnPressed;
35807
b5f83ea354e7 Comment code with no effect.
ib
parents: 35797
diff changeset
126 // NOTE TO MYSELF: commented, because the expression can never be true
b5f83ea354e7 Comment code with no effect.
ib
parents: 35797
diff changeset
127 /*switch( item->type )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
128 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
129 case itButton:
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
130 if ( ( SelectedItem > -1 ) &&
32911
e06fbdd8eb46 Clean up the wItem structure.
ib
parents: 32896
diff changeset
131 ( ( ( item->message == evPlaySwitchToPause && item->message == evPauseSwitchToPlay ) ) ||
e06fbdd8eb46 Clean up the wItem structure.
ib
parents: 32896
diff changeset
132 ( ( item->message == evPauseSwitchToPlay && item->message == evPlaySwitchToPause ) ) ) )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
133 { item->pressed=btnDisabled; }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
134 break;
35807
b5f83ea354e7 Comment code with no effect.
ib
parents: 35797
diff changeset
135 }*/
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
136 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
137 case wsRLMouseButton:
35493
411875efca3f Introduce boolean symbolic constants.
ib
parents: 35490
diff changeset
138 boxMoved=False;
33107
eda3df3e4a9d Prevent an out-of-bounds array access.
ib
parents: 33002
diff changeset
139 if ( SelectedItem != -1 ) // NOTE TO MYSELF: only if itButton, itHPotmeter or itVPotmeter
eda3df3e4a9d Prevent an out-of-bounds array access.
ib
parents: 33002
diff changeset
140 {
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
141 item=&guiApp.mainItems[SelectedItem];
33108
5450a92ac4bd Cosmetic: Adjust indent.
ib
parents: 33107
diff changeset
142 item->pressed=btnReleased;
33107
eda3df3e4a9d Prevent an out-of-bounds array access.
ib
parents: 33002
diff changeset
143 }
35351
92f6fc87ddc8 Fix segmentation fault with mouse button release.
ib
parents: 35349
diff changeset
144 if ( currentselected == - 1 || SelectedItem == -1 ) { itemtype=0; break; }
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
145 SelectedItem=-1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
146 value=0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
147 switch( itemtype )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
148 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
149 case itPotmeter:
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
150 case itHPotmeter:
36283
ebbd9730a8c6 Increase precision of calculation by using constants of type double.
ib
parents: 36281
diff changeset
151 btnModify( item->message,(float)( X - item->x ) / item->width * 100.0 );
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
152 uiEvent( item->message,item->value );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
153 value=item->value;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
154 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
155 case itVPotmeter:
36283
ebbd9730a8c6 Increase precision of calculation by using constants of type double.
ib
parents: 36281
diff changeset
156 btnModify( item->message, ( 1.0 - (float)( Y - item->y ) / item->height) * 100.0 );
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
157 uiEvent( item->message,item->value );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
158 value=item->value;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
159 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
160 }
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
161 uiEvent( item->message,value );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
162 itemtype=0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
163 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
164
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
165 case wsRRMouseButton:
34333
e8e4e6f9b7ac Change prefix for internal events from ev to iv.
ib
parents: 34329
diff changeset
166 gtkShow( ivShowPopUpMenu,NULL );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
167 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
168
34684
b03481253518 Cosmetic: Prefer C style for single line comments.
ib
parents: 34681
diff changeset
169 /* rolled mouse ... de szar :))) */
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
170 case wsP5MouseButton: value=-2.5f; goto rollerhandled;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
171 case wsP4MouseButton: value= 2.5f;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
172 rollerhandled:
35365
fb054f36c3a9 Prevent negative array index read.
ib
parents: 35357
diff changeset
173 if (currentselected != - 1)
fb054f36c3a9 Prevent negative array index read.
ib
parents: 35357
diff changeset
174 {
35366
92cafcf6f6b2 Cosmetic: Adjust indent.
ib
parents: 35365
diff changeset
175 item=&guiApp.mainItems[currentselected];
92cafcf6f6b2 Cosmetic: Adjust indent.
ib
parents: 35365
diff changeset
176 if ( ( item->type == itHPotmeter )||( item->type == itVPotmeter )||( item->type == itPotmeter ) )
92cafcf6f6b2 Cosmetic: Adjust indent.
ib
parents: 35365
diff changeset
177 {
92cafcf6f6b2 Cosmetic: Adjust indent.
ib
parents: 35365
diff changeset
178 item->value+=value;
92cafcf6f6b2 Cosmetic: Adjust indent.
ib
parents: 35365
diff changeset
179 btnModify( item->message,item->value );
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
180 uiEvent( item->message,item->value );
35366
92cafcf6f6b2 Cosmetic: Adjust indent.
ib
parents: 35365
diff changeset
181 }
35365
fb054f36c3a9 Prevent negative array index read.
ib
parents: 35357
diff changeset
182 }
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
183 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
184
34684
b03481253518 Cosmetic: Prefer C style for single line comments.
ib
parents: 34681
diff changeset
185 /* moving */
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
186 case wsMoveMouse:
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33548
diff changeset
187 item=&guiApp.mainItems[SelectedItem];
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
188 switch ( itemtype )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
189 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
190 case itPLMButton:
35681
80c5c89f77d6 Cosmetic: Rename ws functions for the sake of consistency.
ib
parents: 35675
diff changeset
191 wsWindowMove( &guiApp.mainWindow,True,RX - abs( sx ),RY - abs( sy ) );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
192 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
193 case itPRMButton:
35779
8ad72f9cf697 Fix segmentation fault with menu window.
ib
parents: 35778
diff changeset
194 if (guiApp.menuIsPresent) guiApp.menuWindow.MouseHandler( 0,RX,RY,0,0 );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
195 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
196 case itPotmeter:
36283
ebbd9730a8c6 Increase precision of calculation by using constants of type double.
ib
parents: 36281
diff changeset
197 item->value=(float)( X - item->x ) / item->width * 100.0;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
198 goto potihandled;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
199 case itVPotmeter:
36283
ebbd9730a8c6 Increase precision of calculation by using constants of type double.
ib
parents: 36281
diff changeset
200 item->value=(1.0 - (float)( Y - item->y ) / item->height) * 100.0;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
201 goto potihandled;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
202 case itHPotmeter:
36283
ebbd9730a8c6 Increase precision of calculation by using constants of type double.
ib
parents: 36281
diff changeset
203 item->value=(float)( X - item->x ) / item->width * 100.0;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
204 potihandled:
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
205 if ( item->value > 100.0f ) item->value=100.0f;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
206 if ( item->value < 0.0f ) item->value=0.0f;
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
207 uiEvent( item->message,item->value );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
208 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
209 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
210 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
211 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
212 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
213
35780
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
214 static void uiMainKey( int KeyCode,int Type,int Key )
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
215 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
216 int msg = evNone;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
217
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
218 if ( Type != wsKeyPressed ) return;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
219
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
220 if ( !Key )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
221 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
222 switch ( KeyCode )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
223 {
33524
7d5fd12b86e7 Add note on wsXFMM key definitions.
ib
parents: 33263
diff changeset
224 // NOTE TO MYSELF: This is only for the Acer AirKey V keyboard.
33536
fc1402410163 Remove support for Acer AirKey V keyboard multimedia keys.
ib
parents: 33535
diff changeset
225 /*case wsXFMMPrev: msg=evPrev; break;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
226 case wsXFMMStop: msg=evStop; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
227 case wsXFMMPlay: msg=evPlaySwitchToPause; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
228 case wsXFMMNext: msg=evNext; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
229 case wsXFMMVolUp: msg=evIncVolume; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
230 case wsXFMMVolDown: msg=evDecVolume; break;
33536
fc1402410163 Remove support for Acer AirKey V keyboard multimedia keys.
ib
parents: 33535
diff changeset
231 case wsXFMMMute: msg=evMute; break;*/
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
232 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
233 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
234 else
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
235 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
236 switch ( Key )
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
237 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
238 case wsEnter: msg=evPlay; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
239 case wsXF86LowerVolume: msg=evDecVolume; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
240 case wsXF86RaiseVolume: msg=evIncVolume; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
241 case wsXF86Mute: msg=evMute; break;
33525
b32fcc18c9b4 Add support for multimedia pause key.
ib
parents: 33524
diff changeset
242 case wsXF86Pause:
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
243 case wsXF86Play: msg=evPlaySwitchToPause; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
244 case wsXF86Stop: msg=evStop; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
245 case wsXF86Prev: msg=evPrev; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
246 case wsXF86Next: msg=evNext; break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
247 case wsXF86Media: msg=evLoad; break;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
248 case wsEscape:
34697
ac6b38cd0d45 Rename sub window video window.
ib
parents: 34684
diff changeset
249 if ( guiInfo.VideoWindow && guiInfo.Playing && guiApp.videoWindow.isFullScreen )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
250 {
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
251 uiEvent( evNormalSize,0 );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
252 return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
253 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
254 default: vo_x11_putkey( Key ); return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
255 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
256 }
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
257 if ( msg != evNone ) uiEvent( msg,0 );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
258 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
259
35759
afb55738b1b7 Cosmetic: Replace DandD by DND.
ib
parents: 35758
diff changeset
260 /* this will be used to handle drag & drop files */
35780
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
261 static void uiMainDND(int num,char** files)
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
262 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
263 struct stat buf;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
264 int f = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
265
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
266 char* subtitles = NULL;
35521
baf53d200292 Avoid using local variables named filename.
ib
parents: 35496
diff changeset
267 char* file = NULL;
35384
9c7bba653bfb Avoid a duplicate strrchr() call.
ib
parents: 35377
diff changeset
268 char* s;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
269
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
270 if (num <= 0)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
271 return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
272
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
273
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
274 /* now fill it with new items */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
275 for(f=0; f < num; f++){
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
276 char* str = strdup( files[f] );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
277 plItem* item;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
278
24086
f5b32d12b691 remove gconvert_uri_to_filename() and use url_unescape_string() instead.
iive
parents: 23457
diff changeset
279 url_unescape_string(str, files[f]);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
280
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
281 if(stat(str,&buf) == 0 && S_ISDIR(buf.st_mode) == 0) {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
282 /* this is not a directory so try to play it */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
283 mp_msg( MSGT_GPLAYER,MSGL_V,"Received D&D %s\n",str );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
284
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
285 /* check if it is a subtitle file */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
286 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
287 char* ext = strrchr(str,'.');
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
288 if (ext) {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
289 static char supported[] = "utf/sub/srt/smi/rt//txt/ssa/aqt/";
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
290 char* type;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
291 int len;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
292 if((len=strlen(++ext)) && (type=strstr(supported,ext)) &&\
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
293 (type-supported)%4 == 0 && *(type+len) == '/'){
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
294 /* handle subtitle file */
33739
9f6d46d325de Remove gfree() from interface.c.
ib
parents: 33738
diff changeset
295 nfree(subtitles);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
296 subtitles = str;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
297 continue;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
298 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
299 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
300 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
301
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
302 /* clear playlist */
35521
baf53d200292 Avoid using local variables named filename.
ib
parents: 35496
diff changeset
303 if (file == NULL) {
baf53d200292 Avoid using local variables named filename.
ib
parents: 35496
diff changeset
304 file = files[f];
34663
73a5ecb53ee2 Replace symbolic constants by enums.
ib
parents: 34610
diff changeset
305 listMgr(PLAYLIST_DELETE,0);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
306 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
307
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
308 item = calloc(1,sizeof(plItem));
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
309
35384
9c7bba653bfb Avoid a duplicate strrchr() call.
ib
parents: 35377
diff changeset
310 s = strrchr( str,'/' );
9c7bba653bfb Avoid a duplicate strrchr() call.
ib
parents: 35377
diff changeset
311
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
312 /* FIXME: decompose file name ? */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
313 /* yes -- Pontscho */
35384
9c7bba653bfb Avoid a duplicate strrchr() call.
ib
parents: 35377
diff changeset
314 if ( s ) {
9c7bba653bfb Avoid a duplicate strrchr() call.
ib
parents: 35377
diff changeset
315 *s=0; s++;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
316 item->name = gstrdup( s );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
317 item->path = gstrdup( str );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
318 } else {
35385
8b8534de8b83 A non-existing path shouldn't be an empty string.
ib
parents: 35384
diff changeset
319 // NOTE TO MYSELF: this shouldn't happen, make sure we have a full path
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
320 item->name = strdup(str);
35385
8b8534de8b83 A non-existing path shouldn't be an empty string.
ib
parents: 35384
diff changeset
321 item->path = strdup(".");
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
322 }
34681
42fa91951bd2 Rename PLAYLIST_ITEM_ADD PLAYLIST_ITEM_APPEND.
ib
parents: 34669
diff changeset
323 listMgr(PLAYLIST_ITEM_APPEND,item);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
324 } else {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
325 mp_msg( MSGT_GPLAYER,MSGL_WARN,MSGTR_NotAFile,str );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
326 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
327 free( str );
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
328 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
329
35521
baf53d200292 Avoid using local variables named filename.
ib
parents: 35496
diff changeset
330 if (file) {
baf53d200292 Avoid using local variables named filename.
ib
parents: 35496
diff changeset
331 uiSetFile( NULL,file,STREAMTYPE_FILE );
35773
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
332 if ( guiInfo.Playing == GUI_PLAY ) uiEvent( evStop,0 );
c688b0dcbe66 Cosmetic: Rename uiMainEvent() uiEvent().
ib
parents: 35771
diff changeset
333 uiEvent( evPlay,0 );
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
334 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
335 if (subtitles) {
33897
e0d211c62cf7 Cosmetic: Rename some guiInfo members.
ib
parents: 33890
diff changeset
336 nfree(guiInfo.SubtitleFilename);
e0d211c62cf7 Cosmetic: Rename some guiInfo members.
ib
parents: 33890
diff changeset
337 guiInfo.SubtitleFilename = subtitles;
e0d211c62cf7 Cosmetic: Rename some guiInfo members.
ib
parents: 33890
diff changeset
338 mplayerLoadSubtitle(guiInfo.SubtitleFilename);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
339 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
340 }
35780
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
341
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
342 void uiMainInit (void)
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
343 {
35789
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
344 mainDrawBuffer = malloc(guiApp.main.Bitmap.ImageSize);
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
345
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
346 if (!mainDrawBuffer)
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
347 {
36670
7d250553d451 Revise GUI help message texts.
ib
parents: 36291
diff changeset
348 gmp_msg(MSGT_GPLAYER, MSGL_FATAL, "[main] " MSGTR_NEMDB);
35789
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
349 mplayer(MPLAYER_EXIT_GUI, EXIT_ERROR, 0);
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
350 }
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
351
36053
7affacef2f88 Define "MPlayer" string.
ib
parents: 35807
diff changeset
352 wsWindowCreate(&guiApp.mainWindow, guiApp.main.x, guiApp.main.y, guiApp.main.width, guiApp.main.height, (guiApp.mainDecoration ? wsShowFrame : 0 ) | wsMinSize | wsMaxSize | wsHideWindow, wsShowMouseCursor | wsHandleMouseButton | wsHandleMouseMove, MPlayer);
35789
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
353 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[main] mainWindow ID: 0x%x\n", (int) guiApp.mainWindow.WindowID);
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
354 wsWindowShape(&guiApp.mainWindow, guiApp.main.Mask.Image);
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
355 wsWindowIcon(wsDisplay, guiApp.mainWindow.WindowID, &guiIcon);
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
356 wsXDNDMakeAwareness(&guiApp.mainWindow);
9fdc3e22063f Move main window initialization code to uiMainInit().
ib
parents: 35780
diff changeset
357
35780
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
358 guiApp.mainWindow.DrawHandler = uiMainDraw;
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
359 guiApp.mainWindow.MouseHandler = uiMainMouse;
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
360 guiApp.mainWindow.KeyHandler = uiMainKey;
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
361 guiApp.mainWindow.DNDHandler = uiMainDND;
4073fff5efc7 Add new functions uiMainInit() and uiVideoInit().
ib
parents: 35779
diff changeset
362 }
35796
497a1c45a597 Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents: 35795
diff changeset
363
497a1c45a597 Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents: 35795
diff changeset
364 void uiMainDone (void)
497a1c45a597 Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents: 35795
diff changeset
365 {
497a1c45a597 Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents: 35795
diff changeset
366 nfree(mainDrawBuffer);
497a1c45a597 Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents: 35795
diff changeset
367 wsWindowDestroy(&guiApp.mainWindow);
36291
b2edfe1a11a6 Process events after destroying a window.
ib
parents: 36283
diff changeset
368 wsEvents();
35796
497a1c45a597 Add uiMainDone(), uiVideoDone(), uiPlaybarDone() and uiMenuDone().
ib
parents: 35795
diff changeset
369 }