Mercurial > mplayer.hg
annotate gui/win32/skinload.c @ 36892:f50427ad9ff6
Internally map item 'potmeter' onto 'hpotmeter'.
Former version of the GUI treated a potmeter very similar to a hpotmeter
(the Win32 GUI still does so) and lots of skins are solely using
potmeters instead of hpotmeters, although this doesn't make sense at
all.
The current version of the GUI is treating a potmeter differently, but
in order to not break old skins, restore the old behaviour.
For the X11/GTK GUI, a potmeter is now simply a hpotmeter with
button=NULL and (button)width=(button)height=0. For the Win32 GUI
(where skins unfortunately are handled a bit differently and things
are more complicated) a potmeter is now a hpotmeter without button
but (button)width=(widget)width and (button)height=(widget)height.
Additionally, print a legacy information, because the item 'potmeter' is
obsolete now and oughtn't be used any longer.
author | ib |
---|---|
date | Mon, 10 Mar 2014 17:32:29 +0000 |
parents | c5ee0fc2ec75 |
children | 87e6a09a07a7 |
rev | line source |
---|---|
23077 | 1 /* |
23079 | 2 * MPlayer GUI for Win32 |
3 * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de> | |
4 * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com> | |
5 * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it> | |
6 * | |
7 * This file is part of MPlayer. | |
8 * | |
9 * MPlayer is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * MPlayer is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
26457 | 19 * You should have received a copy of the GNU General Public License along |
20 * with MPlayer; if not, write to the Free Software Foundation, Inc., | |
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
23079 | 22 */ |
23077 | 23 |
33761 | 24 #include <string.h> |
23077 | 25 #include <stdlib.h> |
23796 | 26 #include <stdio.h> |
23077 | 27 #include <inttypes.h> |
28 #include <windows.h> | |
29 | |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
30 #include "mp_msg.h" |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
31 #include "help_mp.h" |
23091
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
32 #include "cpudetect.h" |
52488bb09d90
Consistently use quotes instead of angled brackets in #include
diego
parents:
23079
diff
changeset
|
33 #include "libswscale/swscale.h" |
32833
c4891d10ddbb
Adjust #include paths after the merge of libavcore into libavutil in FFmpeg.
diego
parents:
32537
diff
changeset
|
34 #include "libavutil/imgutils.h" |
23077 | 35 #include "gui.h" |
33770 | 36 #include "gui/util/mem.h" |
33046 | 37 #include "gui/util/bitmap.h" |
23077 | 38 |
39 #define MAX_LINESIZE 256 | |
40 | |
41 typedef struct | |
42 { | |
43 int msg; | |
44 char *name; | |
45 } evName; | |
46 | |
47 static const evName evNames[] = | |
48 { | |
49 { evNone, "evNone" }, | |
50 { evPlay, "evPlay" }, | |
51 { evStop, "evStop" }, | |
52 { evPause, "evPause" }, | |
53 { evPrev, "evPrev" }, | |
54 { evNext, "evNext" }, | |
55 { evLoad, "evLoad" }, | |
34317 | 56 { evLoadPlay, "evLoadPlay" }, |
57 { evLoadAudioFile, "evLoadAudioFile" }, | |
58 { evLoadSubtitle, "evLoadSubtitle" }, | |
59 { evDropSubtitle, "evDropSubtitle" }, | |
34321
daebf766dea6
Cosmetic: Synchronize evPlaylist event and message names.
ib
parents:
34320
diff
changeset
|
60 { evPlaylist, "evPlaylist" }, |
34387 | 61 { evPlayCD, "evPlayCD" }, |
34317 | 62 { evPlayVCD, "evPlayVCD" }, |
63 { evPlayDVD, "evPlayDVD" }, | |
34324 | 64 { evLoadURL, "evSetURL" }, // legacy |
65 { evLoadURL, "evLoadURL" }, | |
36429 | 66 { evPlayTV, "evPlayTV" }, |
34317 | 67 { evPlaySwitchToPause, "evPlaySwitchToPause" }, |
68 { evPauseSwitchToPlay, "evPauseSwitchToPlay" }, | |
23077 | 69 { evBackward10sec, "evBackward10sec" }, |
70 { evForward10sec, "evForward10sec" }, | |
71 { evBackward1min, "evBackward1min" }, | |
72 { evForward1min, "evForward1min" }, | |
73 { evBackward10min, "evBackward10min" }, | |
74 { evForward10min, "evForward10min" }, | |
34317 | 75 { evSetMoviePosition, "evSetMoviePosition" }, |
34320 | 76 { evHalfSize, "evHalfSize" }, |
34317 | 77 { evDoubleSize, "evDoubleSize" }, |
78 { evFullScreen, "evFullScreen" }, | |
79 { evNormalSize, "evNormalSize" }, | |
34322 | 80 { evSetAspect, "evSetAspect" }, |
23077 | 81 { evIncVolume, "evIncVolume" }, |
82 { evDecVolume, "evDecVolume" }, | |
34317 | 83 { evSetVolume, "evSetVolume" }, |
23077 | 84 { evMute, "evMute" }, |
34317 | 85 { evSetBalance, "evSetBalance" }, |
86 { evEqualizer, "evEqualizer" }, | |
87 { evAbout, "evAbout" }, | |
88 { evPreferences, "evPreferences" }, | |
89 { evSkinBrowser, "evSkinBrowser" }, | |
34458 | 90 { evMenu, "evMenu" }, |
34317 | 91 { evIconify, "evIconify" }, |
34326 | 92 { evExit, "evExit" } |
23077 | 93 }; |
94 | |
95 static const int evBoxs = sizeof(evNames) / sizeof(evName); | |
96 | |
36890 | 97 static int linenumber; |
98 | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
99 /** |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
100 * @brief Print a legacy information on an entry. |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
101 * |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
102 * @param old identifier (and deprecated entry) |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
103 * @param data pointer to additional data necessary for checking and |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
104 * to print the information on @a old |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
105 */ |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
106 static void skin_legacy (const char *old, const char *data) |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
107 { |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
108 const char *p; |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
109 |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
110 if (strcmp(old, "fontid") == 0) |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
111 { |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
112 p = strchr(data, ','); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
113 |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
114 if (p) mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_GUI_MSG_SkinLegacy, linenumber, p, "font = fontfile"); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
115 } |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
116 else if (strcmp(old, "$l") == 0) |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
117 { |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
118 p = strstr(old, data); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
119 |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
120 if (p && (p == data || p[-1] != '$')) mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_GUI_MSG_SkinLegacy, linenumber, old, "$p"); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
121 } |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
122 else if (strcmp(old, "evSetURL") == 0 && strcmp(data, old) == 0) |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
123 mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_GUI_MSG_SkinLegacy, linenumber, old, "evLoadURL"); |
36892 | 124 else if (strcmp(old, "sub") == 0 || strcmp(old, "potmeter") == 0) |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
125 mp_msg(MSGT_GPLAYER, MSGL_INFO, MSGTR_GUI_MSG_SkinLegacy, linenumber, old, data); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
126 } |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
127 |
23077 | 128 static char *geteventname(int event) |
129 { | |
130 int i; | |
131 for(i=0; i<evBoxs; i++) | |
132 if(evNames[i].msg == event) | |
133 return evNames[i].name; | |
134 return NULL; | |
135 } | |
136 | |
137 /* reads a complete image as is into image buffer */ | |
33784 | 138 static image *pngRead(skin_t *skin, const char *fname) |
23077 | 139 { |
34996
ebcc17a3c165
Fix compiler warnings (comparison between signed and unsigned).
ib
parents:
34697
diff
changeset
|
140 unsigned int i; |
33555 | 141 guiImage bmp; |
23077 | 142 image *bf; |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
143 char *filename = NULL; |
23077 | 144 FILE *fp; |
145 | |
146 if(!stricmp(fname, "NULL")) return 0; | |
147 | |
148 /* find filename in order file file.png */ | |
149 if(!(fp = fopen(fname, "rb"))) | |
150 { | |
151 filename = calloc(1, strlen(skin->skindir) + strlen(fname) + 6); | |
34092
dbf5042ab255
Don't use the Windows style path separator character in Win32 GUI.
ib
parents:
33784
diff
changeset
|
152 sprintf(filename, "%s/%s.png", skin->skindir, fname); |
23077 | 153 if(!(fp = fopen(filename, "rb"))) |
154 { | |
155 mp_msg(MSGT_GPLAYER, MSGL_ERR, "[png] cannot find image %s\n", filename); | |
156 free(filename); | |
157 return 0; | |
158 } | |
159 } | |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
160 fclose(fp); |
23077 | 161 |
162 for (i=0; i < skin->imagecount; i++) | |
163 if(!strcmp(fname, skin->images[i]->name)) | |
164 { | |
34450 | 165 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[png] skinfile %s already exists\n", fname); |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
166 free(filename); |
23077 | 167 return skin->images[i]; |
168 } | |
169 (skin->imagecount)++; | |
170 skin->images = realloc(skin->images, sizeof(image *) * skin->imagecount); | |
171 bf = skin->images[(skin->imagecount) - 1] = calloc(1, sizeof(image)); | |
172 bf->name = strdup(fname); | |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
173 bpRead(filename ? filename : fname, &bmp); |
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
174 free(filename); |
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
175 bf->width = bmp.Width; bf->height = bmp.Height; |
23077 | 176 |
177 bf->size = bf->width * bf->height * skin->desktopbpp / 8; | |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
178 if (skin->desktopbpp == 32) |
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
179 bf->data = bmp.Image; |
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
180 else { |
32028
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
181 const uint8_t *src[4] = { bmp.Image, NULL, NULL, NULL}; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
182 int src_stride[4] = { 4 * bmp.Width, 0, 0, 0 }; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
183 uint8_t *dst[4] = { NULL, NULL, NULL, NULL }; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
184 int dst_stride[4]; |
35707
4ba6b8d3197e
Replace PixelFormat and PIX_FMT_FOO by their AV_-prefixed counterparts.
diego
parents:
35501
diff
changeset
|
185 enum AVPixelFormat out_pix_fmt = PIX_FMT_NONE; |
32028
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
186 struct SwsContext *sws; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
187 if (skin->desktopbpp == 16) out_pix_fmt = PIX_FMT_RGB555; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
188 else if (skin->desktopbpp == 24) out_pix_fmt = PIX_FMT_RGB24; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
189 av_image_fill_linesizes(dst_stride, out_pix_fmt, bmp.Width); |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
190 sws = sws_getContext(bmp.Width, bmp.Height, PIX_FMT_RGB32, |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
191 bmp.Width, bmp.Height, out_pix_fmt, |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
192 SWS_POINT, NULL, NULL, NULL); |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
193 bf->data = malloc(bf->size); |
32028
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
194 dst[0] = bf->data; |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
195 sws_scale(sws, src, src_stride, 0, bmp.Height, dst, dst_stride); |
9e6fdede8ece
gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents:
26457
diff
changeset
|
196 sws_freeContext(sws); |
23266
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
197 free(bmp.Image); |
6cd7f1c23d90
Reuse linux code for reading png images for windows Gui,
reimar
parents:
23091
diff
changeset
|
198 } |
23077 | 199 return bf; |
200 } | |
201 | |
202 /* frees all skin images */ | |
203 static void freeimages(skin_t *skin) | |
204 { | |
205 unsigned int i; | |
206 for (i=0; i<skin->imagecount; i++) | |
207 { | |
208 if(skin->images && skin->images[i]) | |
209 { | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32028
diff
changeset
|
210 free(skin->images[i]->data); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32028
diff
changeset
|
211 free(skin->images[i]->name); |
23077 | 212 free(skin->images[i]); |
213 } | |
214 } | |
215 free(skin->images); | |
216 } | |
217 | |
33621
18b47d32b0d0
win32 gui: Mark debug function only used within the file as static.
diego
parents:
33620
diff
changeset
|
218 static void dumpwidgets(skin_t *skin) |
23077 | 219 { |
220 unsigned int i; | |
221 for (i=0; i<skin->widgetcount; i++) | |
34450 | 222 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "widget %p id %i\n", skin->widgets[i], skin->widgets[i]->id); |
23077 | 223 } |
224 | |
225 static int counttonextchar(const char *s1, char c) | |
226 { | |
227 unsigned int i; | |
228 for (i=0; i<strlen(s1); i++) | |
229 if(s1[i] == c) return i; | |
230 return 0; | |
231 } | |
232 | |
233 static char *findnextstring(char *temp, const char *desc, int *base) | |
234 { | |
235 int len = counttonextchar(*base + desc, ','); | |
236 memset(temp, 0, strlen(desc) + 1); | |
237 if(!len) len = strlen(desc); | |
238 memcpy(temp, *base + desc, len); | |
239 *base += (len+1); | |
240 return temp; | |
241 } | |
242 | |
243 static void freeskin(skin_t *skin) | |
244 { | |
245 unsigned int i; | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32028
diff
changeset
|
246 |
33770 | 247 nfree(skin->skindir); |
23077 | 248 |
249 for (i=1; i<=skin->lastusedid; i++) | |
250 skin->removewidget(skin, i); | |
251 | |
33770 | 252 nfree(skin->widgets); |
23077 | 253 |
254 freeimages(skin); | |
255 for(i=0; i<skin->windowcount; i++) | |
256 { | |
33770 | 257 nfree(skin->windows[i]->name); |
23077 | 258 free(skin->windows[i]); |
259 } | |
260 | |
33770 | 261 nfree(skin->windows); |
23077 | 262 |
263 for (i=0; i<skin->fontcount; i++) | |
264 { | |
265 unsigned int x; | |
266 | |
33770 | 267 nfree(skin->fonts[i]->name); |
23077 | 268 |
269 for (x=0; x<skin->fonts[i]->charcount; x++) | |
33770 | 270 nfree(skin->fonts[i]->chars[x]); |
271 | |
272 nfree(skin->fonts[i]->chars); | |
23077 | 273 |
33770 | 274 nfree(skin->fonts[i]); |
23077 | 275 } |
33770 | 276 nfree(skin->fonts); |
34450 | 277 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN FREE] skin freed\n"); |
33770 | 278 nfree(skin); |
23077 | 279 } |
280 | |
281 static void removewidget(skin_t *skin, int id) | |
282 { | |
283 unsigned int i; | |
284 unsigned int pos=0; | |
285 widget **temp = calloc(skin->widgetcount - 1, sizeof(widget *)); | |
286 | |
287 for (i=0; i<skin->widgetcount; i++) | |
288 { | |
289 if(skin->widgets[i]->id == id) | |
290 { | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32028
diff
changeset
|
291 free(skin->widgets[i]->label); |
33770 | 292 nfree(skin->widgets[i]); |
23077 | 293 } |
294 else | |
295 { | |
296 temp[pos] = skin->widgets[i]; | |
297 pos++; | |
298 } | |
299 } | |
300 if (pos != i) | |
301 { | |
302 (skin->widgetcount)--; | |
303 free(skin->widgets); | |
304 skin->widgets = temp; | |
34450 | 305 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "removed widget %i\n", id); |
23077 | 306 return; |
307 } | |
308 free(temp); | |
309 mp_msg(MSGT_GPLAYER, MSGL_ERR, "widget %i not found\n", id); | |
310 } | |
311 | |
312 static void addwidget(skin_t *skin, window *win, const char *desc) | |
313 { | |
314 widget *mywidget; | |
315 char *temp = calloc(1, strlen(desc) + 1); | |
316 (skin->widgetcount)++; | |
317 (skin->lastusedid)++; | |
318 skin->widgets = realloc(skin->widgets, sizeof(widget *) * skin->widgetcount); | |
319 mywidget = skin->widgets[(skin->widgetcount) - 1] = calloc(1, sizeof(widget)); | |
320 mywidget->id = skin->lastusedid; | |
321 mywidget->window = win->type; | |
322 /* parse and fill widget specific info */ | |
323 if(!strncmp(desc, "base", 4)) | |
324 { | |
325 int base = counttonextchar(desc, '=') + 1; | |
326 mywidget->type = tyBase; | |
327 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); | |
328 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); | |
329 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); | |
330 mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base)); | |
331 mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base)); | |
332 win->base = mywidget; | |
34450 | 333 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [BASE] %s %i %i %i %i\n", |
23077 | 334 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, |
335 mywidget->x, mywidget->y, mywidget->width, mywidget->height); | |
336 } | |
337 else if(!strncmp(desc, "button", 6)) | |
338 { | |
339 int base = counttonextchar(desc, '=') + 1; | |
340 int i; | |
341 mywidget->type = tyButton; | |
342 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); | |
343 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); | |
344 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); | |
345 mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base)); | |
346 mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base)); | |
347 findnextstring(temp, desc, &base); | |
348 | |
349 /* Assign corresponding event to the widget */ | |
350 mywidget->msg = evNone; | |
351 for (i=0; i<evBoxs; i++) | |
352 { | |
353 if(!strcmp(temp, evNames[i].name)) | |
354 { | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
355 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
356 skin_legacy("evSetURL", temp); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
357 |
23077 | 358 mywidget->msg = evNames[i].msg; |
359 break; | |
360 } | |
361 } | |
362 | |
34450 | 363 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [BUTTON] %s %i %i %i %i msg %i\n", |
23077 | 364 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, |
365 mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg); | |
366 } | |
36892 | 367 else if(!strncmp(desc, "hpotmeter", 9) || !strncmp(desc, "vpotmeter", 9) || /* legacy */ !strncmp(desc, "potmeter", 8)) |
23077 | 368 { |
369 int base = counttonextchar(desc, '=') + 1; | |
36892 | 370 int i = 0; |
23077 | 371 /* hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message */ |
36892 | 372 if(!strncmp(desc, "vpotmeter", 9)) mywidget->type = tyVpotmeter; |
373 else mywidget->type = tyHpotmeter; | |
374 if (*desc != 'p') | |
375 { | |
376 mywidget->bitmap[i++] = pngRead(skin, findnextstring(temp, desc, &base)); | |
23077 | 377 mywidget->width = atoi(findnextstring(temp, desc, &base)); |
378 mywidget->height = atoi(findnextstring(temp, desc, &base)); | |
36892 | 379 } |
380 mywidget->bitmap[i] = pngRead(skin, findnextstring(temp, desc, &base)); | |
23077 | 381 mywidget->phases = atoi(findnextstring(temp, desc, &base)); |
382 mywidget->value = atof(findnextstring(temp, desc, &base)); | |
383 mywidget->x = mywidget->wx = atoi(findnextstring(temp, desc, &base)); | |
384 mywidget->y = mywidget->wy = atoi(findnextstring(temp, desc, &base)); | |
385 mywidget->wwidth = atoi(findnextstring(temp, desc, &base)); | |
386 mywidget->wheight = atoi(findnextstring(temp, desc, &base)); | |
36892 | 387 if (*desc == 'p') |
388 { | |
389 // legacy | |
390 skin_legacy("potmeter", "hpotmeter"); | |
391 | |
392 mywidget->width = mywidget->wwidth; | |
393 mywidget->height = mywidget->wheight; | |
394 } | |
23077 | 395 findnextstring(temp, desc, &base); |
396 mywidget->msg = evNone; | |
397 for (i=0; i<evBoxs; i++) | |
398 { | |
399 if(!strcmp(temp, evNames[i].name)) | |
400 { | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
401 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
402 skin_legacy("evSetURL", temp); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
403 |
23077 | 404 mywidget->msg = evNames[i].msg; |
405 break; | |
406 } | |
407 } | |
34450 | 408 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] %s %s %i %i %s %i %f %i %i %i %i msg %i\n", |
23077 | 409 (mywidget->type == tyHpotmeter) ? "[HPOTMETER]" : "[VPOTMETER]", |
410 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, | |
411 mywidget->width, mywidget->height, | |
412 (mywidget->bitmap[1]) ? mywidget->bitmap[1]->name : NULL, | |
413 mywidget->phases, mywidget->value, | |
414 mywidget->wx, mywidget->wy, mywidget->wwidth, mywidget->wwidth, | |
415 mywidget->msg); | |
416 } | |
417 else if(!strncmp(desc, "potmeter", 8)) | |
418 { | |
419 int base = counttonextchar(desc, '=') + 1; | |
420 int i; | |
421 /* potmeter = phases, numphases, default, X, Y, width, height, message */ | |
422 mywidget->type = tyPotmeter; | |
423 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); | |
424 mywidget->phases = atoi(findnextstring(temp, desc, &base)); | |
425 mywidget->value = atof(findnextstring(temp, desc, &base)); | |
426 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); | |
427 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); | |
428 mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base)); | |
429 mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base)); | |
430 findnextstring(temp, desc, &base); | |
431 mywidget->msg = evNone; | |
432 for (i=0; i<evBoxs; i++) | |
433 { | |
434 if(!strcmp(temp, evNames[i].name)) | |
435 { | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
436 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
437 skin_legacy("evSetURL", temp); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
438 |
23077 | 439 mywidget->msg=evNames[i].msg; |
440 break; | |
441 } | |
442 } | |
34450 | 443 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [POTMETER] %s %i %i %i %f %i %i msg %i\n", |
23077 | 444 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, |
445 mywidget->width, mywidget->height, | |
446 mywidget->phases, mywidget->value, | |
447 mywidget->x, mywidget->y, | |
448 mywidget->msg); | |
449 } | |
450 else if(!strncmp(desc, "menu", 4)) | |
451 { | |
452 int base = counttonextchar(desc, '=') + 1; | |
453 int i; | |
454 mywidget->type = tyMenu; | |
455 mywidget->wx=atoi(findnextstring(temp, desc, &base)); | |
456 mywidget->x=0; | |
457 mywidget->wy=mywidget->y=atoi(findnextstring(temp, desc, &base)); | |
458 mywidget->wwidth=mywidget->width=atoi(findnextstring(temp, desc, &base)); | |
459 mywidget->wheight=mywidget->height=atoi(findnextstring(temp, desc, &base)); | |
460 findnextstring(temp, desc, &base); | |
461 mywidget->msg = evNone; | |
462 for (i=0; i<evBoxs; i++) | |
463 { | |
464 if(!strcmp(temp, evNames[i].name)) | |
465 { | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
466 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
467 skin_legacy("evSetURL", temp); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
468 |
23077 | 469 mywidget->msg = evNames[i].msg; |
470 break; | |
471 } | |
472 } | |
34450 | 473 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [MENU] %i %i %i %i msg %i\n", |
23077 | 474 mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg); |
475 } | |
476 else if(!strncmp(desc, "selected", 8)) | |
477 { | |
36840 | 478 win->base->bitmap[1] = pngRead(skin, desc + 9); |
34450 | 479 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [BASE] added image %s\n", win->base->bitmap[1]->name); |
23077 | 480 } |
481 else if(!strncmp(desc, "slabel",6)) | |
482 { | |
483 int base = counttonextchar(desc, '=') + 1; | |
484 unsigned int i; | |
485 mywidget->type = tySlabel; | |
486 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); | |
487 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); | |
488 findnextstring(temp, desc, &base); | |
489 mywidget->font = NULL; | |
490 for (i=0; i<skin->fontcount; i++) | |
491 { | |
492 if(!strcmp(temp, skin->fonts[i]->name)) | |
493 { | |
494 mywidget->font = skin->fonts[i]; | |
495 break; | |
496 } | |
497 } | |
498 mywidget->label = strdup(findnextstring(temp, desc, &base)); | |
34450 | 499 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [SLABEL] %i %i %s %s\n", |
23077 | 500 mywidget->x, mywidget->y, mywidget->font->name, mywidget->label); |
501 } | |
502 else if(!strncmp(desc, "dlabel", 6)) | |
503 { | |
504 int base = counttonextchar(desc, '=') + 1; | |
505 unsigned int i; | |
506 mywidget->type = tyDlabel; | |
507 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); | |
508 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); | |
509 mywidget->length = atoi(findnextstring(temp, desc, &base)); | |
510 mywidget->align = atoi(findnextstring(temp, desc, &base)); | |
511 findnextstring(temp, desc, &base); | |
512 mywidget->font = NULL; | |
513 for (i=0; i<skin->fontcount; i++) | |
514 { | |
515 if(!strcmp(temp, skin->fonts[i]->name)) | |
516 { | |
517 mywidget->font=skin->fonts[i]; | |
518 break; | |
519 } | |
520 } | |
521 mywidget->label=strdup(findnextstring(temp, desc, &base)); | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
522 |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
523 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
524 skin_legacy("$l", mywidget->label); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
525 |
34450 | 526 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [DLABEL] %i %i %i %i %s \"%s\"\n", |
23077 | 527 mywidget->x, mywidget->y, mywidget->length, mywidget->align, mywidget->font->name, mywidget->label); |
528 } | |
529 free(temp); | |
530 } | |
531 | |
532 static void loadfonts(skin_t* skin) | |
533 { | |
534 unsigned int x; | |
535 for (x=0; x<skin->fontcount; x++) | |
536 { | |
537 FILE *fp; | |
538 char *filename; | |
539 char *tmp = calloc(1, MAX_LINESIZE); | |
540 char *desc = calloc(1, MAX_LINESIZE); | |
541 filename = calloc(1, strlen(skin->skindir) + strlen(skin->fonts[x]->name) + 6); | |
34092
dbf5042ab255
Don't use the Windows style path separator character in Win32 GUI.
ib
parents:
33784
diff
changeset
|
542 sprintf(filename, "%s/%s.fnt", skin->skindir, skin->fonts[x]->name); |
23077 | 543 if(!(fp = fopen(filename,"rb"))) |
544 { | |
545 mp_msg(MSGT_GPLAYER, MSGL_ERR, "[FONT LOAD] Font not found \"%s\"\n", skin->fonts[x]->name); | |
33783 | 546 free(tmp); |
547 free(desc); | |
548 free(filename); | |
23077 | 549 return; |
550 } | |
551 while(!feof(fp)) | |
552 { | |
553 int pos = 0; | |
554 unsigned int i; | |
555 fgets(tmp, MAX_LINESIZE, fp); | |
556 memset(desc, 0, MAX_LINESIZE); | |
557 for (i=0; i<strlen(tmp); i++) | |
558 { | |
559 /* remove spaces and linebreaks */ | |
560 if((tmp[i] == ' ') || (tmp[i] == '\n') || (tmp[i] == '\r')) continue; | |
561 /* remove comments */ | |
562 if((tmp[i] == ';') && ((i < 1) || (tmp[i-1] != '\"'))) | |
563 { | |
34450 | 564 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[FONT LOAD] Comment: %s", tmp + i + 1); |
23077 | 565 break; |
566 } | |
567 desc[pos] = tmp[i]; | |
568 pos++; | |
569 } | |
570 if(!strlen(desc)) continue; | |
571 /* now we have "readable" output -> parse it */ | |
572 if(!strncmp(desc, "image", 5)) | |
573 { | |
574 skin->fonts[x]->image = pngRead(skin, desc + 6); | |
34450 | 575 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[FONT] [IMAGE] \"%s\"\n", desc + 6); |
23077 | 576 } |
577 else | |
578 { | |
579 int base = 4; | |
580 if(*desc != '"') break; | |
581 if(*(desc + 1) == 0) break; | |
582 (skin->fonts[x]->charcount)++; | |
583 skin->fonts[x]->chars = realloc(skin->fonts[x]->chars, sizeof(char_t *) *skin->fonts[x]->charcount); | |
584 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]=calloc(1, sizeof(char_t)); | |
585 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c = ((*(desc + 1) == '"') && (*(desc + 2) != '"')) ? ' ': *(desc + 1); | |
586 if((*(desc + 1) == '"') && (*(desc + 2) != '"')) base = 3; | |
587 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x = atoi(findnextstring(tmp, desc, &base)); | |
588 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y = atoi(findnextstring(tmp, desc, &base)); | |
589 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width = atoi(findnextstring(tmp, desc, &base)); | |
590 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height = atoi(findnextstring(tmp, desc, &base)); | |
34450 | 591 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[FONT] [CHAR] %c %i %i %i %i\n", |
23077 | 592 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c, |
593 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x, | |
594 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y, | |
595 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width, | |
596 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height); | |
597 } | |
598 } | |
599 free(desc); | |
600 free(filename); | |
601 free(tmp); | |
602 fclose(fp); | |
603 } | |
604 } | |
605 | |
606 skin_t* loadskin(char* skindir, int desktopbpp) | |
607 { | |
608 FILE *fp; | |
35501 | 609 int reachedendofwindow = FALSE; |
23077 | 610 skin_t *skin = calloc(1, sizeof(skin_t)); |
611 char *filename; | |
612 char *tmp = calloc(1, MAX_LINESIZE); | |
613 char *desc = calloc(1, MAX_LINESIZE); | |
614 window* mywindow = NULL; | |
615 | |
36890 | 616 linenumber = 0; |
617 | |
23077 | 618 /* setup funcs */ |
619 skin->freeskin = freeskin; | |
620 skin->pngRead = pngRead; | |
621 skin->addwidget = addwidget; | |
622 skin->removewidget = removewidget; | |
623 skin->geteventname = geteventname; | |
624 skin->desktopbpp = desktopbpp; | |
625 skin->skindir = strdup(skindir); | |
626 | |
627 filename = calloc(1, strlen(skin->skindir) + strlen("skin") + 2); | |
34092
dbf5042ab255
Don't use the Windows style path separator character in Win32 GUI.
ib
parents:
33784
diff
changeset
|
628 sprintf(filename, "%s/skin", skin->skindir); |
23077 | 629 if(!(fp = fopen(filename, "rb"))) |
630 { | |
631 mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[SKIN LOAD] Skin \"%s\" not found\n", skindir); | |
632 skin->freeskin(skin); | |
33783 | 633 free(tmp); |
634 free(desc); | |
635 free(filename); | |
23077 | 636 return NULL; |
637 } | |
638 | |
639 while(!feof(fp)) | |
640 { | |
641 int pos = 0; | |
642 unsigned int i; | |
35501 | 643 int insidequote = FALSE; |
23077 | 644 fgets(tmp, MAX_LINESIZE, fp); |
645 linenumber++; | |
646 memset(desc, 0, MAX_LINESIZE); | |
647 for (i=0; i<strlen(tmp); i++) | |
648 { | |
35501 | 649 if((tmp[i] == '"') && !insidequote) { insidequote=TRUE; continue; } |
650 else if((tmp[i] == '"') && insidequote) { insidequote=FALSE ; continue; } | |
23077 | 651 /* remove spaces and linebreaks */ |
652 if((!insidequote && (tmp[i] == ' ')) || (tmp[i] == '\n') || (tmp[i] == '\r')) continue; | |
653 /* remove comments */ | |
654 else if(tmp[i] == ';') | |
655 { | |
34450 | 656 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN LOAD] Comment: %s", tmp + i + 1); |
23077 | 657 break; |
658 } | |
659 desc[pos] = tmp[i]; | |
660 pos++; | |
661 } | |
662 | |
663 if(!strlen(desc)) continue; | |
664 /* now we have "readable" output -> parse it */ | |
665 /* parse window specific info */ | |
666 if(!strncmp(desc, "section", 7)) | |
667 { | |
34450 | 668 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [SECTION] \"%s\"\n", desc + 8); |
23077 | 669 } |
670 else if(!strncmp(desc, "window", 6)) | |
671 { | |
34450 | 672 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [WINDOW] \"%s\"\n", desc + 7); |
35501 | 673 reachedendofwindow = FALSE; |
23077 | 674 (skin->windowcount)++; |
675 skin->windows = realloc(skin->windows, sizeof(window *) * skin->windowcount); | |
676 mywindow = skin->windows[(skin->windowcount) - 1] = calloc(1, sizeof(window)); | |
677 mywindow->name = strdup(desc + 7); | |
678 if(!strncmp(desc + 7, "main", 4)) mywindow->type = wiMain; | |
36885 | 679 else if(!strncmp(desc+7, "video", 5) || /* legacy */ !strncmp(desc+7, "sub", 3)) |
23077 | 680 { |
34697 | 681 mywindow->type = wiVideo; |
35501 | 682 mywindow->decoration = TRUE; |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
683 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
684 if (desc[7] == 's') skin_legacy("sub", "video"); |
23077 | 685 } |
686 else if(!strncmp(desc + 7, "menu", 4)) mywindow->type = wiMenu; | |
687 else if(!strncmp(desc + 7, "playbar", 7)) mywindow->type = wiPlaybar; | |
688 else mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN] warning found unknown windowtype"); | |
689 } | |
690 else if(!strncmp(desc, "decoration", 10) && !strncmp(desc + 11, "enable", 6)) | |
691 { | |
35501 | 692 mywindow->decoration = TRUE; |
34450 | 693 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [DECORATION] enabled decoration for window \"%s\"\n", mywindow->name); |
23077 | 694 } |
695 else if(!strncmp(desc, "background", 10)) | |
696 { | |
697 int base = counttonextchar(desc, '=') + 1; | |
698 char temp[MAX_LINESIZE]; | |
699 mywindow->backgroundcolor[0] = atoi(findnextstring(temp, desc, &base)); | |
700 mywindow->backgroundcolor[1] = atoi(findnextstring(temp, desc, &base)); | |
701 mywindow->backgroundcolor[2] = atoi(findnextstring(temp, desc, &base)); | |
34450 | 702 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [BACKGROUND] window \"%s\" has backgroundcolor (%i,%i,%i)\n", mywindow->name, |
23077 | 703 mywindow->backgroundcolor[0], |
704 mywindow->backgroundcolor[1], | |
705 mywindow->backgroundcolor[2]); | |
706 } | |
707 else if(!strncmp(desc, "end", 3)) | |
708 { | |
709 if(reachedendofwindow) | |
710 { | |
34450 | 711 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [END] of section\n"); |
23077 | 712 } |
713 else | |
714 { | |
35501 | 715 reachedendofwindow = TRUE; |
34450 | 716 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [END] of window \"%s\"\n", mywindow->name); |
23077 | 717 } |
718 } | |
719 else if(!strncmp(desc, "font", 4)) | |
720 { | |
721 int id = 0; | |
722 char temp[MAX_LINESIZE]; | |
36888 | 723 int base = counttonextchar(desc, '=') + 1; |
724 findnextstring(temp, desc, &base); | |
725 id = skin->fontcount; | |
726 (skin->fontcount)++; | |
727 skin->fonts = realloc(skin->fonts, sizeof(font_t *) * skin->fontcount); | |
728 skin->fonts[id]=calloc(1, sizeof(font_t)); | |
729 skin->fonts[id]->name = strdup(temp); | |
36891
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
730 |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
731 // legacy |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
732 skin_legacy("fontid", desc); |
c5ee0fc2ec75
Print an information on deprecated skin config file entries.
ib
parents:
36890
diff
changeset
|
733 |
36887 | 734 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [FONT] name \"%s\"\n", skin->fonts[id]->name); |
23077 | 735 } |
736 else | |
737 skin->addwidget(skin, mywindow, desc); | |
738 } | |
739 | |
740 free(desc); | |
741 free(filename); | |
742 free(tmp); | |
743 fclose(fp); | |
744 loadfonts(skin); | |
745 mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN LOAD] loaded skin \"%s\"\n", skin->skindir); | |
34450 | 746 dumpwidgets(skin); |
23077 | 747 return skin; |
748 } |