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

📄 menu.c

📁 这是一个相当棒的Linux下的台球游戏
💻 C
📖 第 1 页 / 共 2 页
字号:
{    if(!menu->textedit_mode){        (menu->select_index)++;        if( menu->select_index >= menu->nr ) menu->select_index=0;        *(menu->p_select_id) = menu->entry[menu->select_index].id;    }}void menu_select_prev( menuType * menu )/* selects the previous menupoint in the current submenu */{    if(!menu->textedit_mode){        (menu->select_index)--;        if( menu->select_index < 0 ) menu->select_index=(menu->nr)-1;        *(menu->p_select_id) = menu->entry[menu->select_index].id;    }}void menu_choose(menuType ** menu){    DPRINTF("menu_choose:\n");    if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_SUBMENU ) {        DPRINTF("menu_choose: switch submenu\n");//        menu_texObj_cleanup(menu);        (*menu)=(*menu)->entry[(*menu)->select_index].submenu;    } else if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_ID ) {        DPRINTF("menu_choose: id=%d\n",(*menu)->entry[(*menu)->select_index].id);        if( (*menu)->parent_entry != 0 ){            if( (*menu)->parent_entry->show_subsetting ){                menu_entry_set_settingtext( (*menu)->parent_entry, (*menu)->entry[(*menu)->select_index].text );            }        }        (*menu)->callback( (*menu)->entry[(*menu)->select_index].id,                           (*menu)->entry[(*menu)->select_index].arg );        menu_exit(menu);    } else if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_TEXTFIELD ) {        DPRINTF("menu_choose: ENTRY_TYPE_TEXTFIELD\n");        if(!(*menu)->textedit_mode){            DPRINTF("menu_choose: ENTRY_TYPE_TEXTFIELD - !textedit_mode\n");            (*menu)->textedit_mode=1;        } else {            DPRINTF("menu_choose: ENTRY_TYPE_TEXTFIELD - textedit_mode\n");            (*menu)->textedit_mode=0;            strcpy((*menu)->entry[(*menu)->select_index].text,                   (*menu)->entry[(*menu)->select_index].text_obj->str);            /* give the entered string as arg */            (*menu)->entry[(*menu)->select_index].arg = (void *)&((*menu)->entry[(*menu)->select_index].text[(*menu)->entry[(*menu)->select_index].fixedlen]);            DPRINTF("printing arg:\n");            DPRINTF("%s\n",(char *)((*menu)->entry[(*menu)->select_index].arg));            (*menu)->callback( (*menu)->entry[(*menu)->select_index].id,                               (*menu)->entry[(*menu)->select_index].arg );        }    } else if( (*menu)->entry[(*menu)->select_index].type==ENTRY_TYPE_EXIT ) {        menu_exit(menu);    }}void menu_exit(menuType ** menu){    DPRINTF("menu_exit:\n");    if(!(*menu)->textedit_mode){/*    if( (*menu)->parent != (menuType *)0 ){*/        DPRINTF("menu_exit: switch to parent\n");        menu_texObj_cleanup(*menu);        *menu=(*menu)->parent;        DPRINTF("menu_exit: switch to parent - end\n");/*    } else {        fprintf(stderr,"menu_exit: cleanup only\n");        menu_texObj_cleanup(*menu);        }*/    } else {        textObj_setText( (*menu)->entry[(*menu)->select_index].text_obj, (*menu)->entry[(*menu)->select_index].text );        (*menu)->textedit_mode=0;    }}void menu_text_keystroke( menuType * menu, int key ){    if(menu->textedit_mode){        switch(key){        case 8:            if(strlen(menu->entry[menu->select_index].text_obj->str) > menu->entry[menu->select_index].fixedlen)                textObj_delete_last( menu->entry[menu->select_index].text_obj );            break;        default:            if (isprint(key))                textObj_append_char( menu->entry[menu->select_index].text_obj, key );            break;        }    }}static void menu_draw_entry( menuEntry * entry ){    if( entry->text_obj == (textObj *)0 ){        menu_create_textobj( entry );    }    textObj_draw_centered(entry->text_obj);/*    if( entry->show_subsetting ){        textObj_draw_bound(entry->text_obj,        HBOUND_RIGHT, VBOUND_CENTER );        if(entry->settingtext_obj != (textObj *)0 ){            textObj_draw_bound(entry->settingtext_obj, HBOUND_LEFT,  VBOUND_CENTER );        }    } else {        textObj_draw_bound(entry->text_obj, HBOUND_CENTER, VBOUND_CENTER );    }*/}void menu_draw( menuType * menu ){    int i,all_height;//    fprintf(stderr,"menu_draw:\n");//    fprintf(stderr,"menu_draw: calc total height\n");    all_height=0;    for(i=0;i<menu->nr;i++){        all_height+=menu->entry[i].fontsize;    }//    fprintf(stderr,"menu_draw: draw\n");    glPushMatrix();    glTranslatef(0,all_height/2,0);//    for(i=0;i<1/*menu->nr*/;i++){    for(i=0;i<menu->nr;i++){        /* hilight the entry with id=*p_select_id *///        fprintf(stderr,"menu_draw: draw entry#%d\n",i);        if( i==menu->select_index ){     /* selected menu entry */            if(menu->textedit_mode){     /* if textedit-field */                glColor3f(1.0,0.0,0.0);                menu_draw_entry(&(menu->entry[i]));            } else {                glPushMatrix();                glScalef(1.1,1.1,1.0);                glBlendFunc( GL_ZERO, GL_ONE_MINUS_SRC_COLOR );                glColor3f(1.0,1.0,1.0);                glTranslatef(2,2,0);                menu_draw_entry(&(menu->entry[i]));                glTranslatef(-4,0,0);                menu_draw_entry(&(menu->entry[i]));                glTranslatef(0,-4,0);                menu_draw_entry(&(menu->entry[i]));                glTranslatef(4,0,0);                menu_draw_entry(&(menu->entry[i]));                glTranslatef(-2,2,0);                glBlendFunc(GL_ONE,GL_ONE);                glColor3f(1.0,1.0,0.0);                menu_draw_entry(&(menu->entry[i]));                glPopMatrix();            }        } else {         /* normal menu entry */            glPushMatrix();            glBlendFunc(GL_ZERO,GL_ONE_MINUS_SRC_COLOR);            glColor3f(1.0,1.0,1.0);            glTranslatef(2,2,0);            menu_draw_entry(&(menu->entry[i]));            glTranslatef(-4,0,0);            menu_draw_entry(&(menu->entry[i]));            glTranslatef(0,-4,0);            menu_draw_entry(&(menu->entry[i]));            glTranslatef(4,0,0);            menu_draw_entry(&(menu->entry[i]));            glTranslatef(-2,2,0);            glBlendFunc(GL_ONE,GL_ONE);            glColor3f(1.0,1.0,1.0);            menu_draw_entry(&(menu->entry[i]));            glPopMatrix();        }        glTranslatef(0,-menu->entry[i].fontsize,0);    }    glPopMatrix();//    fprintf(stderr,"menu_draw: end\n");}void menu_texObj_cleanup(menuType * menu)/* releases the gl-lists and the allocated textures */{    int i;    DPRINTF("menu_texObj_cleanup:\n");    if( menu != (menuType *)0 ){        for ( i=0 ; i<menu->nr ; i++ ) {            DPRINTF("menu_texObj_cleanup: i=%d (%s)\n",i,menu->entry[i].text);            if( menu->entry[i].text_obj != (textObj *)0 )                textObj_delete(menu->entry[i].text_obj);            DPRINTF("menu_texObj_cleanup: 1\n");//            if( menu->entry[i].settingtext_obj != (textObj *)0 )//                textObj_delete(menu->entry[i].settingtext_obj);            if( menu->entry[i].type == ENTRY_TYPE_SUBMENU ){                DPRINTF("menu_texObj_cleanup: menu_texObj_cleanup\n");                menu_texObj_cleanup(menu->entry[i].submenu);            }            DPRINTF("menu_texObj_cleanup: 2\n");            if( menu->entry[i].text_obj != (textObj *)0 )                free(menu->entry[i].text_obj);            DPRINTF("menu_texObj_cleanup: 3\n");            menu->entry[i].text_obj = (textObj *)0;            DPRINTF("menu_texObj_cleanup: 4\n");        }    }}

⌨️ 快捷键说明

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