annotate gui/win32/skinload.c @ 32945:15aecb36f23e

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