annotate gui/win32/skinload.c @ 34697:ac6b38cd0d45

Rename sub window video window. It was a bad idea to name the video window "sub window" at the time the GUI was written. The term "sub window" does make sense from the programmer's point of view, but it doesn't make any sense at all from the user's point of view, because the sub window simply is the window where the video will be displayed. Moreover, since the term "sub" is generally short for "subtitles", the renaming makes the code much easier to understand.
author ib
date Sat, 03 Mar 2012 16:45:15 +0000
parents 1e84148527ab
children ebcc17a3c165
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 { evStop, "evStop" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
51 { evPause, "evPause" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
52 { evPrev, "evPrev" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
53 { evNext, "evNext" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
54 { evLoad, "evLoad" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
55 { evLoadPlay, "evLoadPlay" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
56 { evLoadAudioFile, "evLoadAudioFile" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
57 { evLoadSubtitle, "evLoadSubtitle" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
58 { evDropSubtitle, "evDropSubtitle" },
34321
daebf766dea6 Cosmetic: Synchronize evPlaylist event and message names.
ib
parents: 34320
diff changeset
59 { evPlaylist, "evPlaylist" },
34387
0ba85cad4c7e Add audio CD playback support to the X11/GTK GUI.
ib
parents: 34326
diff changeset
60 { evPlayCD, "evPlayCD" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
61 { evPlayVCD, "evPlayVCD" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
62 { evPlayDVD, "evPlayDVD" },
34324
58aaa0d8cc82 Replace evSetURL by evLoadURL for consistency.
ib
parents: 34322
diff changeset
63 { evLoadURL, "evSetURL" }, // legacy
58aaa0d8cc82 Replace evSetURL by evLoadURL for consistency.
ib
parents: 34322
diff changeset
64 { evLoadURL, "evLoadURL" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
65 { evPlaySwitchToPause, "evPlaySwitchToPause" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
66 { evPauseSwitchToPlay, "evPauseSwitchToPlay" },
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
67 { evBackward10sec, "evBackward10sec" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
68 { evForward10sec, "evForward10sec" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
69 { evBackward1min, "evBackward1min" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
70 { evForward1min, "evForward1min" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
71 { evBackward10min, "evBackward10min" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
72 { evForward10min, "evForward10min" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
73 { evSetMoviePosition, "evSetMoviePosition" },
34320
e3e77ce76c13 Add evHalfSize event to the Win32 GUI.
ib
parents: 34317
diff changeset
74 { evHalfSize, "evHalfSize" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
75 { evDoubleSize, "evDoubleSize" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
76 { evFullScreen, "evFullScreen" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
77 { evNormalSize, "evNormalSize" },
34322
6075b19ad3ad Cosmetic: Add evSetAspect event to video events.
ib
parents: 34321
diff changeset
78 { evSetAspect, "evSetAspect" },
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
79 { evIncVolume, "evIncVolume" },
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
80 { evDecVolume, "evDecVolume" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
81 { evSetVolume, "evSetVolume" },
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
82 { evMute, "evMute" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
83 { evSetBalance, "evSetBalance" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
84 { evEqualizer, "evEqualizer" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
85 { evAbout, "evAbout" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
86 { evPreferences, "evPreferences" },
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
87 { evSkinBrowser, "evSkinBrowser" },
34458
1e84148527ab Add user event evMenu.
ib
parents: 34450
diff changeset
88 { evMenu, "evMenu" },
34317
e905a896243d Cosmetic: Rearrange and group GUI user events.
ib
parents: 34315
diff changeset
89 { evIconify, "evIconify" },
34326
d188b59d3fa4 Remove non-existing GUI user events.
ib
parents: 34324
diff changeset
90 { evExit, "evExit" }
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
91 };
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
92
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
93 static const int evBoxs = sizeof(evNames) / sizeof(evName);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
94
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
95 static char *geteventname(int event)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
96 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
97 int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
98 for(i=0; i<evBoxs; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
99 if(evNames[i].msg == event)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
100 return evNames[i].name;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
101 return NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
102 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
103
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
104 /* reads a complete image as is into image buffer */
33784
72adb79f5a16 Change fname parameter to const in pngRead().
ib
parents: 33783
diff changeset
105 static image *pngRead(skin_t *skin, const char *fname)
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
106 {
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
107 int i;
33555
c5a19bbeac2b Cosmetic: Rename some GUI variables and functions.
ib
parents: 33047
diff changeset
108 guiImage bmp;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
109 image *bf;
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
110 char *filename = NULL;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
111 FILE *fp;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
112
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
113 if(!stricmp(fname, "NULL")) return 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
114
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
115 /* find filename in order file file.png */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
116 if(!(fp = fopen(fname, "rb")))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
117 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
118 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
119 sprintf(filename, "%s/%s.png", skin->skindir, fname);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
120 if(!(fp = fopen(filename, "rb")))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
121 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
122 mp_msg(MSGT_GPLAYER, MSGL_ERR, "[png] cannot find image %s\n", filename);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
123 free(filename);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
124 return 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
125 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
126 }
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
127 fclose(fp);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
128
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
129 for (i=0; i < skin->imagecount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
130 if(!strcmp(fname, skin->images[i]->name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
131 {
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
132 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[png] skinfile %s already exists\n", fname);
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
133 free(filename);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
134 return skin->images[i];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
135 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
136 (skin->imagecount)++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
137 skin->images = realloc(skin->images, sizeof(image *) * skin->imagecount);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
138 bf = skin->images[(skin->imagecount) - 1] = calloc(1, sizeof(image));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
139 bf->name = strdup(fname);
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
140 bpRead(filename ? filename : fname, &bmp);
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
141 free(filename);
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
142 bf->width = bmp.Width; bf->height = bmp.Height;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
143
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
144 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
145 if (skin->desktopbpp == 32)
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
146 bf->data = bmp.Image;
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
147 else {
32028
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
148 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
149 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
150 uint8_t *dst[4] = { NULL, NULL, NULL, NULL };
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
151 int dst_stride[4];
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
152 enum PixelFormat out_pix_fmt;
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
153 struct SwsContext *sws;
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
154 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
155 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
156 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
157 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
158 bmp.Width, bmp.Height, out_pix_fmt,
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
159 SWS_POINT, NULL, NULL, NULL);
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
160 bf->data = malloc(bf->size);
32028
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
161 dst[0] = bf->data;
9e6fdede8ece gui: remove direct usage of rgb2rgb interface, use swscale instead
ramiro
parents: 26457
diff changeset
162 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
163 sws_freeContext(sws);
23266
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
164 free(bmp.Image);
6cd7f1c23d90 Reuse linux code for reading png images for windows Gui,
reimar
parents: 23091
diff changeset
165 }
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
166 return bf;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
167 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
168
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
169 /* frees all skin images */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
170 static void freeimages(skin_t *skin)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
171 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
172 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
173 for (i=0; i<skin->imagecount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
174 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
175 if(skin->images && skin->images[i])
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
176 {
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32028
diff changeset
177 free(skin->images[i]->data);
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32028
diff changeset
178 free(skin->images[i]->name);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
179 free(skin->images[i]);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
180 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
181 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
182 free(skin->images);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
183 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
184
33621
18b47d32b0d0 win32 gui: Mark debug function only used within the file as static.
diego
parents: 33620
diff changeset
185 static void dumpwidgets(skin_t *skin)
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
186 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
187 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
188 for (i=0; i<skin->widgetcount; i++)
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
189 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "widget %p id %i\n", skin->widgets[i], skin->widgets[i]->id);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
190 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
191
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
192 static int counttonextchar(const char *s1, char c)
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<strlen(s1); i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
196 if(s1[i] == c) return i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
197 return 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
198 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
199
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
200 static char *findnextstring(char *temp, const char *desc, int *base)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
201 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
202 int len = counttonextchar(*base + desc, ',');
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
203 memset(temp, 0, strlen(desc) + 1);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
204 if(!len) len = strlen(desc);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
205 memcpy(temp, *base + desc, len);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
206 *base += (len+1);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
207 return temp;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
208 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
209
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
210 static void freeskin(skin_t *skin)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
211 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
212 unsigned int i;
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32028
diff changeset
213
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
214 nfree(skin->skindir);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
215
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
216 for (i=1; i<=skin->lastusedid; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
217 skin->removewidget(skin, i);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
218
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
219 nfree(skin->widgets);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
220
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
221 freeimages(skin);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
222 for(i=0; i<skin->windowcount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
223 {
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
224 nfree(skin->windows[i]->name);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
225 free(skin->windows[i]);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
226 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
227
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
228 nfree(skin->windows);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
229
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
230 for (i=0; i<skin->fontcount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
231 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
232 unsigned int x;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
233
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
234 nfree(skin->fonts[i]->name);
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
235 nfree(skin->fonts[i]->id);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
236
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
237 for (x=0; x<skin->fonts[i]->charcount; x++)
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
238 nfree(skin->fonts[i]->chars[x]);
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
239
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
240 nfree(skin->fonts[i]->chars);
23077
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]);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
243 }
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
244 nfree(skin->fonts);
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
245 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN FREE] skin freed\n");
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
246 nfree(skin);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
247 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
248
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
249 static void removewidget(skin_t *skin, int id)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
250 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
251 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
252 unsigned int pos=0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
253 widget **temp = calloc(skin->widgetcount - 1, sizeof(widget *));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
254
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
255 for (i=0; i<skin->widgetcount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
256 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
257 if(skin->widgets[i]->id == id)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
258 {
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32028
diff changeset
259 free(skin->widgets[i]->label);
33770
6134493605c6 Use macro nfree() in Win32 GUI code.
ib
parents: 33761
diff changeset
260 nfree(skin->widgets[i]);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
261 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
262 else
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
263 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
264 temp[pos] = skin->widgets[i];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
265 pos++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
266 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
267 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
268 if (pos != i)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
269 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
270 (skin->widgetcount)--;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
271 free(skin->widgets);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
272 skin->widgets = temp;
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
273 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "removed widget %i\n", id);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
274 return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
275 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
276 free(temp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
277 mp_msg(MSGT_GPLAYER, MSGL_ERR, "widget %i not found\n", id);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
278 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
279
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
280 static void addwidget(skin_t *skin, window *win, const char *desc)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
281 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
282 widget *mywidget;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
283 char *temp = calloc(1, strlen(desc) + 1);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
284 (skin->widgetcount)++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
285 (skin->lastusedid)++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
286 skin->widgets = realloc(skin->widgets, sizeof(widget *) * skin->widgetcount);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
287 mywidget = skin->widgets[(skin->widgetcount) - 1] = calloc(1, sizeof(widget));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
288 mywidget->id = skin->lastusedid;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
289 mywidget->window = win->type;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
290 /* parse and fill widget specific info */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
291 if(!strncmp(desc, "base", 4))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
292 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
293 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
294 mywidget->type = tyBase;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
295 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
296 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
297 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
298 mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
299 mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
300 win->base = mywidget;
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
301 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [BASE] %s %i %i %i %i\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
302 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
303 mywidget->x, mywidget->y, mywidget->width, mywidget->height);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
304 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
305 else if(!strncmp(desc, "button", 6))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
306 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
307 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
308 int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
309 mywidget->type = tyButton;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
310 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
311 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
312 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
313 mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
314 mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
315 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
316
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
317 /* Assign corresponding event to the widget */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
318 mywidget->msg = evNone;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
319 for (i=0; i<evBoxs; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
320 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
321 if(!strcmp(temp, evNames[i].name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
322 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
323 mywidget->msg = evNames[i].msg;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
324 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
325 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
326 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
327
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
328 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [BUTTON] %s %i %i %i %i msg %i\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
329 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
330 mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
331 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
332 else if(!strncmp(desc, "hpotmeter", 9) || !strncmp(desc, "vpotmeter", 9))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
333 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
334 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
335 int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
336 /* hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
337 if(!strncmp(desc, "hpotmeter", 9)) mywidget->type = tyHpotmeter;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
338 else mywidget->type = tyVpotmeter;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
339 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
340 mywidget->width = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
341 mywidget->height = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
342 mywidget->bitmap[1] = pngRead(skin, findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
343 mywidget->phases = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
344 mywidget->value = atof(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
345 mywidget->x = mywidget->wx = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
346 mywidget->y = mywidget->wy = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
347 mywidget->wwidth = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
348 mywidget->wheight = 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 mywidget->msg = evNone;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
351 for (i=0; i<evBoxs; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
352 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
353 if(!strcmp(temp, evNames[i].name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
354 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
355 mywidget->msg = evNames[i].msg;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
356 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
357 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
358 }
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
359 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] %s %s %i %i %s %i %f %i %i %i %i msg %i\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
360 (mywidget->type == tyHpotmeter) ? "[HPOTMETER]" : "[VPOTMETER]",
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
361 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
362 mywidget->width, mywidget->height,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
363 (mywidget->bitmap[1]) ? mywidget->bitmap[1]->name : NULL,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
364 mywidget->phases, mywidget->value,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
365 mywidget->wx, mywidget->wy, mywidget->wwidth, mywidget->wwidth,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
366 mywidget->msg);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
367 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
368 else if(!strncmp(desc, "potmeter", 8))
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 /* potmeter = phases, numphases, default, X, Y, width, height, message */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
373 mywidget->type = tyPotmeter;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
374 mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
375 mywidget->phases = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
376 mywidget->value = atof(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
377 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
378 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
379 mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
380 mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
381 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
382 mywidget->msg = evNone;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
383 for (i=0; i<evBoxs; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
384 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
385 if(!strcmp(temp, evNames[i].name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
386 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
387 mywidget->msg=evNames[i].msg;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
388 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
389 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
390 }
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
391 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [POTMETER] %s %i %i %i %f %i %i msg %i\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
392 (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
393 mywidget->width, mywidget->height,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
394 mywidget->phases, mywidget->value,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
395 mywidget->x, mywidget->y,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
396 mywidget->msg);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
397 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
398 else if(!strncmp(desc, "menu", 4))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
399 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
400 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
401 int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
402 mywidget->type = tyMenu;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
403 mywidget->wx=atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
404 mywidget->x=0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
405 mywidget->wy=mywidget->y=atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
406 mywidget->wwidth=mywidget->width=atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
407 mywidget->wheight=mywidget->height=atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
408 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
409 mywidget->msg = evNone;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
410 for (i=0; i<evBoxs; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
411 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
412 if(!strcmp(temp, evNames[i].name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
413 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
414 mywidget->msg = evNames[i].msg;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
415 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
416 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
417 }
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
418 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [MENU] %i %i %i %i msg %i\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
419 mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
420 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
421 else if(!strncmp(desc, "selected", 8))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
422 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
423 win->base->bitmap[1] = pngRead(skin, (char *) desc + 9);
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
424 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [BASE] added image %s\n", win->base->bitmap[1]->name);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
425 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
426 else if(!strncmp(desc, "slabel",6))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
427 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
428 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
429 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
430 mywidget->type = tySlabel;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
431 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
432 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
433 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
434 mywidget->font = NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
435 for (i=0; i<skin->fontcount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
436 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
437 if(!strcmp(temp, skin->fonts[i]->name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
438 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
439 mywidget->font = skin->fonts[i];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
440 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
441 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
442 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
443 mywidget->label = strdup(findnextstring(temp, desc, &base));
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
444 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [SLABEL] %i %i %s %s\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
445 mywidget->x, mywidget->y, mywidget->font->name, mywidget->label);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
446 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
447 else if(!strncmp(desc, "dlabel", 6))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
448 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
449 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
450 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
451 mywidget->type = tyDlabel;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
452 mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
453 mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
454 mywidget->length = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
455 mywidget->align = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
456 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
457 mywidget->font = NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
458 for (i=0; i<skin->fontcount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
459 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
460 if(!strcmp(temp, skin->fonts[i]->name))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
461 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
462 mywidget->font=skin->fonts[i];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
463 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
464 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
465 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
466 mywidget->label=strdup(findnextstring(temp, desc, &base));
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
467 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [ITEM] [DLABEL] %i %i %i %i %s \"%s\"\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
468 mywidget->x, mywidget->y, mywidget->length, mywidget->align, mywidget->font->name, mywidget->label);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
469 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
470 free(temp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
471 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
472
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
473 static void loadfonts(skin_t* skin)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
474 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
475 unsigned int x;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
476 for (x=0; x<skin->fontcount; x++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
477 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
478 FILE *fp;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
479 int linenumber=0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
480 char *filename;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
481 char *tmp = calloc(1, MAX_LINESIZE);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
482 char *desc = calloc(1, MAX_LINESIZE);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
483 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
484 sprintf(filename, "%s/%s.fnt", skin->skindir, skin->fonts[x]->name);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
485 if(!(fp = fopen(filename,"rb")))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
486 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
487 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
488 free(tmp);
a450fade6a83 Fix memory leaks in the Win32 GUI.
ib
parents: 33770
diff changeset
489 free(desc);
a450fade6a83 Fix memory leaks in the Win32 GUI.
ib
parents: 33770
diff changeset
490 free(filename);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
491 return;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
492 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
493 while(!feof(fp))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
494 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
495 int pos = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
496 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
497 fgets(tmp, MAX_LINESIZE, fp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
498 linenumber++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
499 memset(desc, 0, MAX_LINESIZE);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
500 for (i=0; i<strlen(tmp); i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
501 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
502 /* remove spaces and linebreaks */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
503 if((tmp[i] == ' ') || (tmp[i] == '\n') || (tmp[i] == '\r')) continue;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
504 /* remove comments */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
505 if((tmp[i] == ';') && ((i < 1) || (tmp[i-1] != '\"')))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
506 {
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
507 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[FONT LOAD] Comment: %s", tmp + i + 1);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
508 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
509 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
510 desc[pos] = tmp[i];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
511 pos++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
512 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
513 if(!strlen(desc)) continue;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
514 /* now we have "readable" output -> parse it */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
515 if(!strncmp(desc, "image", 5))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
516 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
517 skin->fonts[x]->image = pngRead(skin, desc + 6);
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
518 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[FONT] [IMAGE] \"%s\"\n", desc + 6);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
519 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
520 else
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
521 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
522 int base = 4;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
523 if(*desc != '"') break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
524 if(*(desc + 1) == 0) break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
525 (skin->fonts[x]->charcount)++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
526 skin->fonts[x]->chars = realloc(skin->fonts[x]->chars, sizeof(char_t *) *skin->fonts[x]->charcount);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
527 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]=calloc(1, sizeof(char_t));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
528 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c = ((*(desc + 1) == '"') && (*(desc + 2) != '"')) ? ' ': *(desc + 1);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
529 if((*(desc + 1) == '"') && (*(desc + 2) != '"')) base = 3;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
530 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x = atoi(findnextstring(tmp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
531 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y = atoi(findnextstring(tmp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
532 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width = atoi(findnextstring(tmp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
533 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height = atoi(findnextstring(tmp, desc, &base));
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
534 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[FONT] [CHAR] %c %i %i %i %i\n",
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
535 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
536 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
537 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
538 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width,
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
539 skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
540 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
541 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
542 free(desc);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
543 free(filename);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
544 free(tmp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
545 fclose(fp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
546 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
547 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
548
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
549 skin_t* loadskin(char* skindir, int desktopbpp)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
550 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
551 FILE *fp;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
552 int reachedendofwindow = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
553 int linenumber = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
554 skin_t *skin = calloc(1, sizeof(skin_t));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
555 char *filename;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
556 char *tmp = calloc(1, MAX_LINESIZE);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
557 char *desc = calloc(1, MAX_LINESIZE);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
558 window* mywindow = NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
559
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
560 /* setup funcs */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
561 skin->freeskin = freeskin;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
562 skin->pngRead = pngRead;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
563 skin->addwidget = addwidget;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
564 skin->removewidget = removewidget;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
565 skin->geteventname = geteventname;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
566 skin->desktopbpp = desktopbpp;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
567 skin->skindir = strdup(skindir);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
568
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
569 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
570 sprintf(filename, "%s/skin", skin->skindir);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
571 if(!(fp = fopen(filename, "rb")))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
572 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
573 mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[SKIN LOAD] Skin \"%s\" not found\n", skindir);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
574 skin->freeskin(skin);
33783
a450fade6a83 Fix memory leaks in the Win32 GUI.
ib
parents: 33770
diff changeset
575 free(tmp);
a450fade6a83 Fix memory leaks in the Win32 GUI.
ib
parents: 33770
diff changeset
576 free(desc);
a450fade6a83 Fix memory leaks in the Win32 GUI.
ib
parents: 33770
diff changeset
577 free(filename);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
578 return NULL;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
579 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
580
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
581 while(!feof(fp))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
582 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
583 int pos = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
584 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
585 int insidequote = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
586 fgets(tmp, MAX_LINESIZE, fp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
587 linenumber++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
588 memset(desc, 0, MAX_LINESIZE);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
589 for (i=0; i<strlen(tmp); i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
590 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
591 if((tmp[i] == '"') && !insidequote) { insidequote=1; continue; }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
592 else if((tmp[i] == '"') && insidequote) { insidequote=0 ; continue; }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
593 /* remove spaces and linebreaks */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
594 if((!insidequote && (tmp[i] == ' ')) || (tmp[i] == '\n') || (tmp[i] == '\r')) continue;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
595 /* remove comments */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
596 else if(tmp[i] == ';')
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
597 {
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
598 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN LOAD] Comment: %s", tmp + i + 1);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
599 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
600 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
601 desc[pos] = tmp[i];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
602 pos++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
603 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
604
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
605 if(!strlen(desc)) continue;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
606 /* now we have "readable" output -> parse it */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
607 /* parse window specific info */
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
608 if(!strncmp(desc, "section", 7))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
609 {
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
610 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [SECTION] \"%s\"\n", desc + 8);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
611 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
612 else if(!strncmp(desc, "window", 6))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
613 {
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
614 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [WINDOW] \"%s\"\n", desc + 7);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
615 reachedendofwindow = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
616 (skin->windowcount)++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
617 skin->windows = realloc(skin->windows, sizeof(window *) * skin->windowcount);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
618 mywindow = skin->windows[(skin->windowcount) - 1] = calloc(1, sizeof(window));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
619 mywindow->name = strdup(desc + 7);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
620 if(!strncmp(desc + 7, "main", 4)) mywindow->type = wiMain;
34697
ac6b38cd0d45 Rename sub window video window.
ib
parents: 34458
diff changeset
621 else if(!strncmp(desc+7, "video", 5) || !strncmp(desc+7, "sub", 3)) // legacy
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
622 {
34697
ac6b38cd0d45 Rename sub window video window.
ib
parents: 34458
diff changeset
623 mywindow->type = wiVideo;
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
624 mywindow->decoration = 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
625 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
626 else if(!strncmp(desc + 7, "menu", 4)) mywindow->type = wiMenu;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
627 else if(!strncmp(desc + 7, "playbar", 7)) mywindow->type = wiPlaybar;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
628 else mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN] warning found unknown windowtype");
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
629 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
630 else if(!strncmp(desc, "decoration", 10) && !strncmp(desc + 11, "enable", 6))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
631 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
632 mywindow->decoration = 1;
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
633 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [DECORATION] enabled decoration for window \"%s\"\n", mywindow->name);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
634 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
635 else if(!strncmp(desc, "background", 10))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
636 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
637 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
638 char temp[MAX_LINESIZE];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
639 mywindow->backgroundcolor[0] = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
640 mywindow->backgroundcolor[1] = atoi(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
641 mywindow->backgroundcolor[2] = atoi(findnextstring(temp, desc, &base));
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
642 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [BACKGROUND] window \"%s\" has backgroundcolor (%i,%i,%i)\n", mywindow->name,
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
643 mywindow->backgroundcolor[0],
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
644 mywindow->backgroundcolor[1],
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
645 mywindow->backgroundcolor[2]);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
646 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
647 else if(!strncmp(desc, "end", 3))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
648 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
649 if(reachedendofwindow)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
650 {
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
651 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [END] of section\n");
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
652 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
653 else
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
654 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
655 reachedendofwindow = 1;
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
656 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [END] of window \"%s\"\n", mywindow->name);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
657 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
658 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
659 else if(!strncmp(desc, "font", 4))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
660 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
661 unsigned int i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
662 int id = 0;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
663 char temp[MAX_LINESIZE];
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
664 int base = counttonextchar(desc, '=')+1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
665 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
666 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
667 for (i=0; i<skin->fontcount; i++)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
668 if(!strcmp(skin->fonts[i]->id, temp))
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
669 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
670 id = i;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
671 break;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
672 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
673 if(!id)
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
674 {
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
675 int base = counttonextchar(desc, '=') + 1;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
676 findnextstring(temp, desc, &base);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
677 id = skin->fontcount;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
678 (skin->fontcount)++;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
679 skin->fonts = realloc(skin->fonts, sizeof(font_t *) * skin->fontcount);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
680 skin->fonts[id]=calloc(1, sizeof(font_t));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
681 skin->fonts[id]->name = strdup(temp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
682 skin->fonts[id]->id = strdup(findnextstring(temp, desc, &base));
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
683 }
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
684 mp_msg(MSGT_GPLAYER, MSGL_DBG2, "[SKIN] [FONT] id \"%s\" name \"%s\"\n", skin->fonts[id]->name, skin->fonts[id]->id);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
685 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
686 else
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
687 skin->addwidget(skin, mywindow, desc);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
688 }
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
689
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
690 free(desc);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
691 free(filename);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
692 free(tmp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
693 fclose(fp);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
694 loadfonts(skin);
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
695 mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN LOAD] loaded skin \"%s\"\n", skin->skindir);
34450
74622554a386 Remove all #ifdef MP_DEBUG from Win32 GUI code.
ib
parents: 34387
diff changeset
696 dumpwidgets(skin);
23077
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
697 return skin;
17bf4f4b0715 Gui --> gui
diego
parents:
diff changeset
698 }