Mercurial > mplayer.hg
annotate gui/app.c @ 32927:edb972e22021
Fix memory leak in appInitStruct().
The NumberOf{Main,Bar,Menu}Items members actually don't hold the
number of items but the last index used. Therefore, the last item
won't get freed so far.
To set the correct "number" for the global external variable prior
to using it, the function appResetStruct() has been added and is used
in appInitStruct() as well.
author | ib |
---|---|
date | Thu, 03 Mar 2011 13:45:30 +0000 |
parents | 7c205a5c2a9b |
children | 0ef78cd3063b |
rev | line source |
---|---|
26458 | 1 /* |
2 * This file is part of MPlayer. | |
3 * | |
4 * MPlayer is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; either version 2 of the License, or | |
7 * (at your option) any later version. | |
8 * | |
9 * MPlayer is distributed in the hope that it will be useful, | |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 * GNU General Public License for more details. | |
13 * | |
14 * You should have received a copy of the GNU General Public License along | |
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
17 */ | |
23077 | 18 |
19 #include <string.h> | |
20 | |
21 #include "app.h" | |
32897 | 22 |
32921 | 23 #include "gui/skin/font.h" |
24 #include "interface.h" | |
25 | |
32897 | 26 listItems appMPlayer; |
27 | |
28 static const evName evNames[] = { | |
29 { evNone, "evNone" }, | |
30 { evPlay, "evPlay" }, | |
31 { evStop, "evStop" }, | |
32 { evPause, "evPause" }, | |
33 { evPrev, "evPrev" }, | |
34 { evNext, "evNext" }, | |
35 { evLoad, "evLoad" }, | |
36 { evEqualizer, "evEqualizer" }, | |
37 { evEqualizer, "evEqualeaser" }, // NOTE TO MYSELF: any skin using this? | |
38 { evPlayList, "evPlaylist" }, | |
39 { evExit, "evExit" }, | |
40 { evIconify, "evIconify" }, | |
41 { evIncBalance, "evIncBalance" }, // NOTE TO MYSELF: not all of these events | |
42 { evDecBalance, "evDecBalance" }, // are actually implemented, and update doc | |
43 { evFullScreen, "evFullScreen" }, | |
44 { evFName, "evFName" }, | |
45 { evMovieTime, "evMovieTime" }, | |
46 { evAbout, "evAbout" }, | |
47 { evLoadPlay, "evLoadPlay" }, | |
48 { evPreferences, "evPreferences" }, | |
49 { evSkinBrowser, "evSkinBrowser" }, | |
50 { evBackward10sec, "evBackward10sec" }, | |
51 { evForward10sec, "evForward10sec" }, | |
52 { evBackward1min, "evBackward1min" }, | |
53 { evForward1min, "evForward1min" }, | |
54 { evBackward10min, "evBackward10min" }, | |
55 { evForward10min, "evForward10min" }, | |
56 { evIncVolume, "evIncVolume" }, | |
57 { evDecVolume, "evDecVolume" }, | |
58 { evMute, "evMute" }, | |
59 { evIncAudioBufDelay, "evIncAudioBufDelay" }, | |
60 { evDecAudioBufDelay, "evDecAudioBufDelay" }, | |
61 { evPlaySwitchToPause, "evPlaySwitchToPause" }, | |
62 { evPauseSwitchToPlay, "evPauseSwitchToPlay" }, | |
63 { evNormalSize, "evHalfSize" }, | |
64 { evNormalSize, "evNormalSize" }, | |
65 { evDoubleSize, "evDoubleSize" }, | |
66 { evSetMoviePosition, "evSetMoviePosition" }, | |
67 { evSetVolume, "evSetVolume" }, | |
68 { evSetBalance, "evSetBalance" }, | |
69 { evHelp, "evHelp" }, | |
70 { evLoadSubtitle, "evLoadSubtitle" }, | |
71 { evPlayDVD, "evPlayDVD" }, | |
72 { evPlayVCD, "evPlayVCD" }, | |
73 { evSetURL, "evSetURL" }, | |
74 { evLoadAudioFile, "evLoadAudioFile" }, | |
75 { evDropSubtitle, "evDropSubtitle" }, | |
76 { evSetAspect, "evSetAspect" } | |
77 }; | |
23077 | 78 |
32923
b6a919e84760
Cosmetic: Rename constant for number of events from evBoxs to EVENTS.
ib
parents:
32922
diff
changeset
|
79 static const int EVENTS = sizeof(evNames) / sizeof(evName); |
23077 | 80 |
32898 | 81 static void appClearItem(wItem *item) |
23077 | 82 { |
32921 | 83 item->type = itNone; |
32922 | 84 item->x = 0; |
85 item->y = 0; | |
86 item->width = 0; | |
87 item->height = 0; | |
32917
9949f3a123cf
Add new function bpFree() to free txSamples (bitmaps).
ib
parents:
32912
diff
changeset
|
88 bpFree(&item->Bitmap); |
32921 | 89 bpFree(&item->Mask); |
32918 | 90 item->fontid = 0; |
32921 | 91 item->align = fntAlignLeft; |
92 gfree((void **)&item->label); | |
93 item->pwidth = 0; | |
94 item->pheight = 0; | |
95 item->numphases = 0; | |
96 item->value = 0; | |
97 item->message = evNone; | |
98 item->R = 0; | |
99 item->G = 0; | |
100 item->B = 0; | |
101 gfree((void **)&item->text); | |
32897 | 102 item->textwidth = 0; |
103 item->starttime = 0; | |
104 item->last_x = 0; | |
32921 | 105 item->pressed = btnDisabled; |
106 item->tmp = 0; | |
23077 | 107 } |
108 | |
32927 | 109 void appResetStruct(void) |
110 { | |
111 appMPlayer.NumberOfMainItems = -1; | |
112 appMPlayer.NumberOfBarItems = -1; | |
113 appMPlayer.NumberOfMenuItems = -1; | |
114 | |
115 appMPlayer.sub.x = -1; // NOTE TO MYSELF: is this really necessary? | |
116 appMPlayer.sub.y = -1; // NOTE TO MYSELF: is this really necessary? | |
117 } | |
118 | |
32926 | 119 void appInitStruct(void) |
23077 | 120 { |
32897 | 121 int i; |
122 | |
32927 | 123 for (i = 0; i < appMPlayer.NumberOfMainItems + 1; i++) |
32926 | 124 appClearItem(&appMPlayer.mainItems[i]); |
32927 | 125 for (i = 0; i < appMPlayer.NumberOfBarItems + 1; i++) |
32926 | 126 appClearItem(&appMPlayer.barItems[i]); |
32927 | 127 for (i = 0; i < appMPlayer.NumberOfMenuItems + 1; i++) |
32926 | 128 appClearItem(&appMPlayer.menuItems[i]); |
32897 | 129 |
32926 | 130 memset(appMPlayer.mainItems, 0, 256 * sizeof(wItem)); |
32897 | 131 |
32926 | 132 memset(appMPlayer.menuItems, 0, 64 * sizeof(wItem)); |
23077 | 133 |
32926 | 134 memset(appMPlayer.barItems, 0, 256 * sizeof(wItem)); |
32897 | 135 |
32926 | 136 appClearItem(&appMPlayer.main); |
137 appMPlayer.mainDecoration = 0; | |
23077 | 138 |
32926 | 139 appClearItem(&appMPlayer.sub); |
140 appMPlayer.sub.width = 0; | |
141 appMPlayer.sub.height = 0; | |
32897 | 142 |
32926 | 143 appClearItem(&appMPlayer.menuBase); |
144 appClearItem(&appMPlayer.menuSelected); | |
32897 | 145 |
32926 | 146 appMPlayer.sub.R = appMPlayer.sub.G = appMPlayer.sub.B = 0; |
147 appMPlayer.bar.R = appMPlayer.bar.G = appMPlayer.bar.B = 0; | |
148 appMPlayer.main.R = appMPlayer.main.G = appMPlayer.main.B = 0; | |
149 appMPlayer.barIsPresent = 0; | |
150 appMPlayer.menuIsPresent = 0; | |
32927 | 151 |
152 appResetStruct(); | |
23077 | 153 } |
154 | |
32897 | 155 int appFindMessage(unsigned char *str) |
23077 | 156 { |
32897 | 157 int i; |
158 | |
32923
b6a919e84760
Cosmetic: Rename constant for number of events from evBoxs to EVENTS.
ib
parents:
32922
diff
changeset
|
159 for (i = 0; i < EVENTS; i++) |
32897 | 160 if (!strcmp(evNames[i].name, str)) |
32911 | 161 return evNames[i].message; |
32897 | 162 |
163 return -1; | |
23077 | 164 } |
165 | |
32897 | 166 void btnModify(int event, float state) |
23077 | 167 { |
32897 | 168 int i; |
169 | |
32912 | 170 for (i = 0; i < appMPlayer.NumberOfMainItems + 1; i++) { |
171 if (appMPlayer.mainItems[i].message == event) { | |
172 switch (appMPlayer.mainItems[i].type) { | |
32897 | 173 case itButton: |
32912 | 174 appMPlayer.mainItems[i].pressed = (int)state; |
175 appMPlayer.mainItems[i].tmp = (int)state; | |
32897 | 176 break; |
23077 | 177 |
32897 | 178 case itPotmeter: |
179 case itVPotmeter: | |
180 case itHPotmeter: | |
181 if (state < 0.0) | |
182 state = 0.0; | |
183 if (state > 100.0) | |
184 state = 100.0; | |
32912 | 185 appMPlayer.mainItems[i].value = state; |
32897 | 186 break; |
187 } | |
188 } | |
189 } | |
190 | |
191 for (i = 0; i < appMPlayer.NumberOfBarItems + 1; i++) { | |
32911 | 192 if (appMPlayer.barItems[i].message == event) { |
32897 | 193 switch (appMPlayer.barItems[i].type) { |
194 case itButton: | |
195 appMPlayer.barItems[i].pressed = (int)state; | |
196 appMPlayer.barItems[i].tmp = (int)state; | |
197 break; | |
198 | |
199 case itPotmeter: | |
200 case itVPotmeter: | |
201 case itHPotmeter: | |
202 if (state < 0.0) | |
203 state = 0.0; | |
204 if (state > 100.0) | |
205 state = 100.0; | |
206 appMPlayer.barItems[i].value = state; | |
207 break; | |
208 } | |
209 } | |
210 } | |
23077 | 211 } |
212 | |
32897 | 213 void btnSet(int event, int set) |
23077 | 214 { |
32897 | 215 int i; |
216 | |
32912 | 217 for (i = 0; i < appMPlayer.NumberOfMainItems + 1; i++) { |
218 if (appMPlayer.mainItems[i].message == event) { | |
219 appMPlayer.mainItems[i].pressed = set; | |
220 appMPlayer.barItems[i].tmp = 0; | |
32897 | 221 } |
222 } | |
223 | |
224 for (i = 0; i < appMPlayer.NumberOfBarItems + 1; i++) { | |
32911 | 225 if (appMPlayer.barItems[i].message == event) { |
32897 | 226 appMPlayer.barItems[i].pressed = set; |
227 appMPlayer.barItems[i].tmp = 0; | |
228 } | |
229 } | |
23077 | 230 } |