diff options
Diffstat (limited to 'gui/win32/skinload.c')
-rw-r--r-- | gui/win32/skinload.c | 776 |
1 files changed, 0 insertions, 776 deletions
diff --git a/gui/win32/skinload.c b/gui/win32/skinload.c deleted file mode 100644 index 3c3c21234e..0000000000 --- a/gui/win32/skinload.c +++ /dev/null @@ -1,776 +0,0 @@ -/* - * MPlayer GUI for Win32 - * Copyright (C) 2003 Sascha Sommer <saschasommer@freenet.de> - * Copyright (C) 2006 Erik Augustson <erik_27can@yahoo.com> - * Copyright (C) 2006 Gianluigi Tiesi <sherpya@netfarm.it> - * - * This file is part of MPlayer. - * - * MPlayer is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * MPlayer is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with MPlayer; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <stdlib.h> -#include <stdio.h> -#include <inttypes.h> -#include <windows.h> - -#include "mp_msg.h" -#include "cpudetect.h" -#include "libswscale/rgb2rgb.h" -#include "libswscale/swscale.h" -#include "gui.h" -#include "gui/bitmap.h" - -#define MAX_LINESIZE 256 - -typedef struct -{ - int msg; - char *name; -} evName; - -static const evName evNames[] = -{ - { evNone, "evNone" }, - { evPlay, "evPlay" }, - { evDropFile, "evDropFile" }, - { evStop, "evStop" }, - { evPause, "evPause" }, - { evPrev, "evPrev" }, - { evNext, "evNext" }, - { evLoad, "evLoad" }, - { evEqualizer, "evEqualizer" }, - { evEqualizer, "evEqualeaser" }, - { evPlayList, "evPlaylist" }, - { evExit, "evExit" }, - { evIconify, "evIconify" }, - { evIncBalance, "evIncBalance" }, - { evDecBalance, "evDecBalance" }, - { evFullScreen, "evFullScreen" }, - { evFName, "evFName" }, - { evMovieTime, "evMovieTime" }, - { evAbout, "evAbout" }, - { evLoadPlay, "evLoadPlay" }, - { evPreferences, "evPreferences" }, - { evSkinBrowser, "evSkinBrowser" }, - { evBackward10sec, "evBackward10sec" }, - { evForward10sec, "evForward10sec" }, - { evBackward1min, "evBackward1min" }, - { evForward1min, "evForward1min" }, - { evBackward10min, "evBackward10min" }, - { evForward10min, "evForward10min" }, - { evIncVolume, "evIncVolume" }, - { evDecVolume, "evDecVolume" }, - { evMute, "evMute" }, - { evIncAudioBufDelay, "evIncAudioBufDelay" }, - { evDecAudioBufDelay, "evDecAudioBufDelay" }, - { evPlaySwitchToPause, "evPlaySwitchToPause" }, - { evPauseSwitchToPlay, "evPauseSwitchToPlay" }, - { evNormalSize, "evNormalSize" }, - { evDoubleSize, "evDoubleSize" }, - { evSetMoviePosition, "evSetMoviePosition" }, - { evSetVolume, "evSetVolume" }, - { evSetBalance, "evSetBalance" }, - { evHelp, "evHelp" }, - { evLoadSubtitle, "evLoadSubtitle" }, - { evPlayDVD, "evPlayDVD" }, - { evPlayVCD, "evPlayVCD" }, - { evSetURL, "evSetURL" }, - { evLoadAudioFile, "evLoadAudioFile" }, - { evDropSubtitle, "evDropSubtitle" }, - { evSetAspect, "evSetAspect" } -}; - -static const int evBoxs = sizeof(evNames) / sizeof(evName); - -static char *geteventname(int event) -{ - int i; - for(i=0; i<evBoxs; i++) - if(evNames[i].msg == event) - return evNames[i].name; - return NULL; -} - -static inline int get_sws_cpuflags(void) -{ - return (gCpuCaps.hasMMX ? SWS_CPU_CAPS_MMX : 0) | - (gCpuCaps.hasMMX2 ? SWS_CPU_CAPS_MMX2 : 0) | - (gCpuCaps.has3DNow ? SWS_CPU_CAPS_3DNOW : 0); -} - -/* reads a complete image as is into image buffer */ -static image *pngRead(skin_t *skin, unsigned char *fname) -{ - int i; - txSample bmp; - image *bf; - char *filename = NULL; - FILE *fp; - - if(!stricmp(fname, "NULL")) return 0; - - /* find filename in order file file.png */ - if(!(fp = fopen(fname, "rb"))) - { - filename = calloc(1, strlen(skin->skindir) + strlen(fname) + 6); - sprintf(filename, "%s\\%s.png", skin->skindir, fname); - if(!(fp = fopen(filename, "rb"))) - { - mp_msg(MSGT_GPLAYER, MSGL_ERR, "[png] cannot find image %s\n", filename); - free(filename); - return 0; - } - } - fclose(fp); - - for (i=0; i < skin->imagecount; i++) - if(!strcmp(fname, skin->images[i]->name)) - { -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] skinfile %s already exists\n", fname); -#endif - free(filename); - return skin->images[i]; - } - (skin->imagecount)++; - skin->images = realloc(skin->images, sizeof(image *) * skin->imagecount); - bf = skin->images[(skin->imagecount) - 1] = calloc(1, sizeof(image)); - bf->name = strdup(fname); - bpRead(filename ? filename : fname, &bmp); - free(filename); - bf->width = bmp.Width; bf->height = bmp.Height; - -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] loaded image %s\n", fname); - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] size: %dx%d bits: %d\n", bf->width, bf->height, BPP); - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[png] imagesize: %u\n", imgsize); -#endif - - bf->size = bf->width * bf->height * skin->desktopbpp / 8; - if (skin->desktopbpp == 32) - bf->data = bmp.Image; - else { - bf->data = malloc(bf->size); - rgb32tobgr32(bmp.Image, bmp.Image, bmp.ImageSize); - if(skin->desktopbpp == 16) rgb32tobgr15(bmp.Image, bf->data, bmp.ImageSize); - else if(skin->desktopbpp == 24) rgb32tobgr24(bmp.Image, bf->data, bmp.ImageSize); - free(bmp.Image); - } - return bf; -} - -/* frees all skin images */ -static void freeimages(skin_t *skin) -{ - unsigned int i; - for (i=0; i<skin->imagecount; i++) - { - if(skin->images && skin->images[i]) - { - if(skin->images[i]->data) free(skin->images[i]->data); - if(skin->images[i]->name) free(skin->images[i]->name); - free(skin->images[i]); - } - } - free(skin->images); -} - -#ifdef DEBUG -void dumpwidgets(skin_t *skin) -{ - unsigned int i; - for (i=0; i<skin->widgetcount; i++) - mp_msg(MSGT_GPLAYER, MSGL_V, "widget %p id %i\n", skin->widgets[i], skin->widgets[i]->id); -} -#endif - -static int counttonextchar(const char *s1, char c) -{ - unsigned int i; - for (i=0; i<strlen(s1); i++) - if(s1[i] == c) return i; - return 0; -} - -static char *findnextstring(char *temp, const char *desc, int *base) -{ - int len = counttonextchar(*base + desc, ','); - memset(temp, 0, strlen(desc) + 1); - if(!len) len = strlen(desc); - memcpy(temp, *base + desc, len); - *base += (len+1); - return temp; -} - -static void freeskin(skin_t *skin) -{ - unsigned int i; - if(skin->skindir) - { - free(skin->skindir); - skin->skindir = NULL; - } - - for (i=1; i<=skin->lastusedid; i++) - skin->removewidget(skin, i); - - if(skin->widgets) - { - free(skin->widgets); - skin->widgets = NULL; - } - - freeimages(skin); - for(i=0; i<skin->windowcount; i++) - { - if(skin->windows[i]->name) - { - free(skin->windows[i]->name); - skin->windows[i]->name = NULL; - } - free(skin->windows[i]); - } - - free(skin->windows); - skin->windows = NULL; - - for (i=0; i<skin->fontcount; i++) - { - unsigned int x; - if(skin->fonts[i]->name) - { - free(skin->fonts[i]->name); - skin->fonts[i]->name = NULL; - } - - if(skin->fonts[i]->id) - { - free(skin->fonts[i]->id); - skin->fonts[i]->id = NULL; - } - - for (x=0; x<skin->fonts[i]->charcount; x++) - { - free(skin->fonts[i]->chars[x]); - skin->fonts[i]->chars[x] = NULL; - } - - if(skin->fonts[i]->chars) - { - free(skin->fonts[i]->chars); - skin->fonts[i]->chars = NULL; - } - - free(skin->fonts[i]); - skin->fonts[i] = NULL; - } - free(skin->fonts); - skin->fonts = NULL; -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN FREE] skin freed\n"); -#endif - free(skin); - skin = NULL; -} - -static void removewidget(skin_t *skin, int id) -{ - unsigned int i; - unsigned int pos=0; - widget **temp = calloc(skin->widgetcount - 1, sizeof(widget *)); - - for (i=0; i<skin->widgetcount; i++) - { - if(skin->widgets[i]->id == id) - { - if(skin->widgets[i]->label) - free(skin->widgets[i]->label); - free(skin->widgets[i]); - skin->widgets[i] = NULL; - } - else - { - temp[pos] = skin->widgets[i]; - pos++; - } - } - if (pos != i) - { - (skin->widgetcount)--; - free(skin->widgets); - skin->widgets = temp; -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "removed widget %i\n", id); -#endif - return; - } - free(temp); - mp_msg(MSGT_GPLAYER, MSGL_ERR, "widget %i not found\n", id); -} - -static void addwidget(skin_t *skin, window *win, const char *desc) -{ - widget *mywidget; - char *temp = calloc(1, strlen(desc) + 1); - (skin->widgetcount)++; - (skin->lastusedid)++; - skin->widgets = realloc(skin->widgets, sizeof(widget *) * skin->widgetcount); - mywidget = skin->widgets[(skin->widgetcount) - 1] = calloc(1, sizeof(widget)); - mywidget->id = skin->lastusedid; - mywidget->window = win->type; - /* parse and fill widget specific info */ - if(!strncmp(desc, "base", 4)) - { - int base = counttonextchar(desc, '=') + 1; - mywidget->type = tyBase; - mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); - mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); - mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); - mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base)); - mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base)); - win->base = mywidget; -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [BASE] %s %i %i %i %i\n", - (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, - mywidget->x, mywidget->y, mywidget->width, mywidget->height); -#endif - } - else if(!strncmp(desc, "button", 6)) - { - int base = counttonextchar(desc, '=') + 1; - int i; - mywidget->type = tyButton; - mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); - mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); - mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); - mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base)); - mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base)); - findnextstring(temp, desc, &base); - - /* Assign corresponding event to the widget */ - mywidget->msg = evNone; - for (i=0; i<evBoxs; i++) - { - if(!strcmp(temp, evNames[i].name)) - { - mywidget->msg = evNames[i].msg; - break; - } - } - -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [BUTTON] %s %i %i %i %i msg %i\n", - (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, - mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg); -#endif - } - else if(!strncmp(desc, "hpotmeter", 9) || !strncmp(desc, "vpotmeter", 9)) - { - int base = counttonextchar(desc, '=') + 1; - int i; - /* hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message */ - if(!strncmp(desc, "hpotmeter", 9)) mywidget->type = tyHpotmeter; - else mywidget->type = tyVpotmeter; - mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); - mywidget->width = atoi(findnextstring(temp, desc, &base)); - mywidget->height = atoi(findnextstring(temp, desc, &base)); - mywidget->bitmap[1] = pngRead(skin, findnextstring(temp, desc, &base)); - mywidget->phases = atoi(findnextstring(temp, desc, &base)); - mywidget->value = atof(findnextstring(temp, desc, &base)); - mywidget->x = mywidget->wx = atoi(findnextstring(temp, desc, &base)); - mywidget->y = mywidget->wy = atoi(findnextstring(temp, desc, &base)); - mywidget->wwidth = atoi(findnextstring(temp, desc, &base)); - mywidget->wheight = atoi(findnextstring(temp, desc, &base)); - findnextstring(temp, desc, &base); - mywidget->msg = evNone; - for (i=0; i<evBoxs; i++) - { - if(!strcmp(temp, evNames[i].name)) - { - mywidget->msg = evNames[i].msg; - break; - } - } -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] %s %s %i %i %s %i %f %i %i %i %i msg %i\n", - (mywidget->type == tyHpotmeter) ? "[HPOTMETER]" : "[VPOTMETER]", - (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, - mywidget->width, mywidget->height, - (mywidget->bitmap[1]) ? mywidget->bitmap[1]->name : NULL, - mywidget->phases, mywidget->value, - mywidget->wx, mywidget->wy, mywidget->wwidth, mywidget->wwidth, - mywidget->msg); -#endif - } - else if(!strncmp(desc, "potmeter", 8)) - { - int base = counttonextchar(desc, '=') + 1; - int i; - /* potmeter = phases, numphases, default, X, Y, width, height, message */ - mywidget->type = tyPotmeter; - mywidget->bitmap[0] = pngRead(skin, findnextstring(temp, desc, &base)); - mywidget->phases = atoi(findnextstring(temp, desc, &base)); - mywidget->value = atof(findnextstring(temp, desc, &base)); - mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); - mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); - mywidget->wwidth = mywidget->width = atoi(findnextstring(temp, desc, &base)); - mywidget->wheight = mywidget->height = atoi(findnextstring(temp, desc, &base)); - findnextstring(temp, desc, &base); - mywidget->msg = evNone; - for (i=0; i<evBoxs; i++) - { - if(!strcmp(temp, evNames[i].name)) - { - mywidget->msg=evNames[i].msg; - break; - } - } -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [POTMETER] %s %i %i %i %f %i %i msg %i\n", - (mywidget->bitmap[0]) ? mywidget->bitmap[0]->name : NULL, - mywidget->width, mywidget->height, - mywidget->phases, mywidget->value, - mywidget->x, mywidget->y, - mywidget->msg); -#endif - } - else if(!strncmp(desc, "menu", 4)) - { - int base = counttonextchar(desc, '=') + 1; - int i; - mywidget->type = tyMenu; - mywidget->wx=atoi(findnextstring(temp, desc, &base)); - mywidget->x=0; - mywidget->wy=mywidget->y=atoi(findnextstring(temp, desc, &base)); - mywidget->wwidth=mywidget->width=atoi(findnextstring(temp, desc, &base)); - mywidget->wheight=mywidget->height=atoi(findnextstring(temp, desc, &base)); - findnextstring(temp, desc, &base); - mywidget->msg = evNone; - for (i=0; i<evBoxs; i++) - { - if(!strcmp(temp, evNames[i].name)) - { - mywidget->msg = evNames[i].msg; - break; - } - } -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [MENU] %i %i %i %i msg %i\n", - mywidget->x, mywidget->y, mywidget->width, mywidget->height, mywidget->msg); -#endif - } - else if(!strncmp(desc, "selected", 8)) - { - win->base->bitmap[1] = pngRead(skin, (char *) desc + 9); -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [BASE] added image %s\n", win->base->bitmap[1]->name); -#endif - } - else if(!strncmp(desc, "slabel",6)) - { - int base = counttonextchar(desc, '=') + 1; - unsigned int i; - mywidget->type = tySlabel; - mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); - mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); - findnextstring(temp, desc, &base); - mywidget->font = NULL; - for (i=0; i<skin->fontcount; i++) - { - if(!strcmp(temp, skin->fonts[i]->name)) - { - mywidget->font = skin->fonts[i]; - break; - } - } - mywidget->label = strdup(findnextstring(temp, desc, &base)); -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [SLABEL] %i %i %s %s\n", - mywidget->x, mywidget->y, mywidget->font->name, mywidget->label); -#endif - } - else if(!strncmp(desc, "dlabel", 6)) - { - int base = counttonextchar(desc, '=') + 1; - unsigned int i; - mywidget->type = tyDlabel; - mywidget->wx = mywidget->x = atoi(findnextstring(temp, desc, &base)); - mywidget->wy = mywidget->y = atoi(findnextstring(temp, desc, &base)); - mywidget->length = atoi(findnextstring(temp, desc, &base)); - mywidget->align = atoi(findnextstring(temp, desc, &base)); - findnextstring(temp, desc, &base); - mywidget->font = NULL; - for (i=0; i<skin->fontcount; i++) - { - if(!strcmp(temp, skin->fonts[i]->name)) - { - mywidget->font=skin->fonts[i]; - break; - } - } - mywidget->label=strdup(findnextstring(temp, desc, &base)); -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [ITEM] [DLABEL] %i %i %i %i %s \"%s\"\n", - mywidget->x, mywidget->y, mywidget->length, mywidget->align, mywidget->font->name, mywidget->label); -#endif - } - free(temp); -} - -static void loadfonts(skin_t* skin) -{ - unsigned int x; - for (x=0; x<skin->fontcount; x++) - { - FILE *fp; - int linenumber=0; - char *filename; - char *tmp = calloc(1, MAX_LINESIZE); - char *desc = calloc(1, MAX_LINESIZE); - filename = calloc(1, strlen(skin->skindir) + strlen(skin->fonts[x]->name) + 6); - sprintf(filename, "%s\\%s.fnt", skin->skindir, skin->fonts[x]->name); - if(!(fp = fopen(filename,"rb"))) - { - mp_msg(MSGT_GPLAYER, MSGL_ERR, "[FONT LOAD] Font not found \"%s\"\n", skin->fonts[x]->name); - return; - } - while(!feof(fp)) - { - int pos = 0; - unsigned int i; - fgets(tmp, MAX_LINESIZE, fp); - linenumber++; - memset(desc, 0, MAX_LINESIZE); - for (i=0; i<strlen(tmp); i++) - { - /* remove spaces and linebreaks */ - if((tmp[i] == ' ') || (tmp[i] == '\n') || (tmp[i] == '\r')) continue; - /* remove comments */ - if((tmp[i] == ';') && ((i < 1) || (tmp[i-1] != '\"'))) - { -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[FONT LOAD] Comment: %s", tmp + i + 1); -#endif - break; - } - desc[pos] = tmp[i]; - pos++; - } - if(!strlen(desc)) continue; - /* now we have "readable" output -> parse it */ - if(!strncmp(desc, "image", 5)) - { - skin->fonts[x]->image = pngRead(skin, desc + 6); -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[FONT] [IMAGE] \"%s\"\n", desc + 6); -#endif - } - else - { - int base = 4; - if(*desc != '"') break; - if(*(desc + 1) == 0) break; - (skin->fonts[x]->charcount)++; - skin->fonts[x]->chars = realloc(skin->fonts[x]->chars, sizeof(char_t *) *skin->fonts[x]->charcount); - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]=calloc(1, sizeof(char_t)); - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c = ((*(desc + 1) == '"') && (*(desc + 2) != '"')) ? ' ': *(desc + 1); - if((*(desc + 1) == '"') && (*(desc + 2) != '"')) base = 3; - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x = atoi(findnextstring(tmp, desc, &base)); - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y = atoi(findnextstring(tmp, desc, &base)); - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width = atoi(findnextstring(tmp, desc, &base)); - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height = atoi(findnextstring(tmp, desc, &base)); -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[FONT] [CHAR] %c %i %i %i %i\n", - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->c, - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->x, - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->y, - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->width, - skin->fonts[x]->chars[skin->fonts[x]->charcount - 1]->height); -#endif - } - } - free(desc); - free(filename); - free(tmp); - fclose(fp); - } -} - -skin_t* loadskin(char* skindir, int desktopbpp) -{ - FILE *fp; - int reachedendofwindow = 0; - int linenumber = 0; - skin_t *skin = calloc(1, sizeof(skin_t)); - char *filename; - char *tmp = calloc(1, MAX_LINESIZE); - char *desc = calloc(1, MAX_LINESIZE); - window* mywindow = NULL; - - /* init swscaler */ - sws_rgb2rgb_init(get_sws_cpuflags()); - /* setup funcs */ - skin->freeskin = freeskin; - skin->pngRead = pngRead; - skin->addwidget = addwidget; - skin->removewidget = removewidget; - skin->geteventname = geteventname; - skin->desktopbpp = desktopbpp; - skin->skindir = strdup(skindir); - - filename = calloc(1, strlen(skin->skindir) + strlen("skin") + 2); - sprintf(filename, "%s\\skin", skin->skindir); - if(!(fp = fopen(filename, "rb"))) - { - mp_msg(MSGT_GPLAYER, MSGL_FATAL, "[SKIN LOAD] Skin \"%s\" not found\n", skindir); - skin->freeskin(skin); - return NULL; - } - - while(!feof(fp)) - { - int pos = 0; - unsigned int i; - int insidequote = 0; - fgets(tmp, MAX_LINESIZE, fp); - linenumber++; - memset(desc, 0, MAX_LINESIZE); - for (i=0; i<strlen(tmp); i++) - { - if((tmp[i] == '"') && !insidequote) { insidequote=1; continue; } - else if((tmp[i] == '"') && insidequote) { insidequote=0 ; continue; } - /* remove spaces and linebreaks */ - if((!insidequote && (tmp[i] == ' ')) || (tmp[i] == '\n') || (tmp[i] == '\r')) continue; - /* remove comments */ - else if(tmp[i] == ';') - { -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN LOAD] Comment: %s", tmp + i + 1); -#endif - break; - } - desc[pos] = tmp[i]; - pos++; - } - - if(!strlen(desc)) continue; - /* now we have "readable" output -> parse it */ - /* parse window specific info */ - if(!strncmp(desc, "section", 7)) - { -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [SECTION] \"%s\"\n", desc + 8); -#endif - } - else if(!strncmp(desc, "window", 6)) - { -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [WINDOW] \"%s\"\n", desc + 7); -#endif - reachedendofwindow = 0; - (skin->windowcount)++; - skin->windows = realloc(skin->windows, sizeof(window *) * skin->windowcount); - mywindow = skin->windows[(skin->windowcount) - 1] = calloc(1, sizeof(window)); - mywindow->name = strdup(desc + 7); - if(!strncmp(desc + 7, "main", 4)) mywindow->type = wiMain; - else if(!strncmp(desc+7, "sub", 3)) - { - mywindow->type = wiSub; - mywindow->decoration = 1; - } - else if(!strncmp(desc + 7, "menu", 4)) mywindow->type = wiMenu; - else if(!strncmp(desc + 7, "playbar", 7)) mywindow->type = wiPlaybar; - else mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN] warning found unknown windowtype"); - } - else if(!strncmp(desc, "decoration", 10) && !strncmp(desc + 11, "enable", 6)) - { - mywindow->decoration = 1; -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [DECORATION] enabled decoration for window \"%s\"\n", mywindow->name); -#endif - } - else if(!strncmp(desc, "background", 10)) - { - int base = counttonextchar(desc, '=') + 1; - char temp[MAX_LINESIZE]; - mywindow->backgroundcolor[0] = atoi(findnextstring(temp, desc, &base)); - mywindow->backgroundcolor[1] = atoi(findnextstring(temp, desc, &base)); - mywindow->backgroundcolor[2] = atoi(findnextstring(temp, desc, &base)); -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [BACKGROUND] window \"%s\" has backgroundcolor (%i,%i,%i)\n", mywindow->name, - mywindow->backgroundcolor[0], - mywindow->backgroundcolor[1], - mywindow->backgroundcolor[2]); -#endif - } - else if(!strncmp(desc, "end", 3)) - { - if(reachedendofwindow) - { -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [END] of section\n"); -#endif - } - else - { - reachedendofwindow = 1; -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [END] of window \"%s\"\n", mywindow->name); -#endif - } - } - else if(!strncmp(desc, "font", 4)) - { - unsigned int i; - int id = 0; - char temp[MAX_LINESIZE]; - int base = counttonextchar(desc, '=')+1; - findnextstring(temp, desc, &base); - findnextstring(temp, desc, &base); - for (i=0; i<skin->fontcount; i++) - if(!strcmp(skin->fonts[i]->id, temp)) - { - id = i; - break; - } - if(!id) - { - int base = counttonextchar(desc, '=') + 1; - findnextstring(temp, desc, &base); - id = skin->fontcount; - (skin->fontcount)++; - skin->fonts = realloc(skin->fonts, sizeof(font_t *) * skin->fontcount); - skin->fonts[id]=calloc(1, sizeof(font_t)); - skin->fonts[id]->name = strdup(temp); - skin->fonts[id]->id = strdup(findnextstring(temp, desc, &base)); - } -#ifdef DEBUG - mp_msg(MSGT_GPLAYER, MSGL_DBG4, "[SKIN] [FONT] id \"%s\" name \"%s\"\n", skin->fonts[id]->name, skin->fonts[id]->id); -#endif - } - else - skin->addwidget(skin, mywindow, desc); - } - - free(desc); - free(filename); - free(tmp); - fclose(fp); - loadfonts(skin); - mp_msg(MSGT_GPLAYER, MSGL_V, "[SKIN LOAD] loaded skin \"%s\"\n", skin->skindir); - /* dumpwidgets(skin); */ - return skin; -} |