⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skinload.c

📁 uclinux下mplayer的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
        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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -