annotate gui/win32/skinload.c @ 34092:dbf5042ab255

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