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

📄 menu.c

📁 这是一个相当棒的Linux下的台球游戏
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "menu.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <GL/gl.h>#include "options.h"#include "sys_stuff.h"menuType * menu_new( void (* callback)( int, void * ) ){    menuType * menu;    DPRINTF("menu_new:\n");    menu = malloc(sizeof(menuType));    menu->nr           = 0;    menu->select_id    = -1;    menu->p_select_id  = &(menu->select_id);    menu->select_index = 0;    menu->textedit_mode = 0;    menu->callback     = callback;    menu->parent       = (menuType *)0;    return menu;}void menu_add_submenu( menuType * menu, char * text, menuType * submenu, int show_subsetting ){    DPRINTF("menu_add_submenu:\n");    if(menu->nr<MAX_MENU_ENTRY_NUM){        menu->entry[menu->nr].type     = ENTRY_TYPE_SUBMENU;        strcpy( menu->entry[menu->nr].text, text);        menu->entry[menu->nr].settingtext[0] = 0;        menu->entry[menu->nr].submenu  = submenu;        menu->entry[menu->nr].text_obj = (textObj *)0;//    menu->entry[menu->nr].settingtext_obj = (textObj *)0;        menu->entry[menu->nr].fontname = options_menu_fontname;        menu->entry[menu->nr].fontsize = 32;        menu->entry[menu->nr].show_subsetting = show_subsetting;        menu->entry[menu->nr].arg      = (void *) 0;        if(submenu!=(menuType *)0){            submenu->callback     = menu->callback;            submenu->p_select_id  = menu->p_select_id;            submenu->parent       = menu;            submenu->parent_entry = &(menu->entry[menu->nr]);        }        menu->nr++;    } else {        printf("menu_add_submenu: too many menu entries - ignoring this entry\n");    }}void menu_add_entry( menuType * menu, char * text, int id ){    DPRINTF("menu_add_entry:\n");    if(menu->nr<MAX_MENU_ENTRY_NUM){        menu->entry[menu->nr].type     = ENTRY_TYPE_ID;        strcpy( menu->entry[menu->nr].text, text );        menu->entry[menu->nr].settingtext[0] = 0;        menu->entry[menu->nr].id       = id;        menu->entry[menu->nr].text_obj = (textObj *)0;//    menu->entry[menu->nr].settingtext_obj = (textObj *)0;        menu->entry[menu->nr].fontname = options_menu_fontname;        menu->entry[menu->nr].fontsize = 32;        menu->entry[menu->nr].arg      = (void *) 0;        menu->nr++;    } else {        printf("menu_add_entry: too many menu entries - ignoring this entry\n");    }}void menu_add_arg_entry( menuType * menu, char * text, int id, void * arg ){    DPRINTF("menu_add_arg_entry:\n");    if(menu->nr<MAX_MENU_ENTRY_NUM){        menu->entry[menu->nr].type     = ENTRY_TYPE_ID;        strcpy( menu->entry[menu->nr].text, text );        menu->entry[menu->nr].settingtext[0] = 0;        menu->entry[menu->nr].id       = id;        menu->entry[menu->nr].text_obj = (textObj *)0;        //    menu->entry[menu->nr].settingtext_obj = (textObj *)0;        menu->entry[menu->nr].fontname = options_menu_fontname;        menu->entry[menu->nr].fontsize = 32;        menu->entry[menu->nr].arg      = arg;        menu->nr++;    } else {        printf("menu_add_arg_entry: too many menu entries - ignoring this entry\n");    }}void menu_add_textfield( menuType * menu, char * text, int id, int fixedlen ){    DPRINTF("menu_add_arg_entry:\n");    if(menu->nr<MAX_MENU_ENTRY_NUM){        menu->entry[menu->nr].type     = ENTRY_TYPE_TEXTFIELD;        strcpy( menu->entry[menu->nr].text, text );        menu->entry[menu->nr].settingtext[0] = 0;        menu->entry[menu->nr].id       = id;        menu->entry[menu->nr].text_obj = (textObj *)0;        //    menu->entry[menu->nr].settingtext_obj = (textObj *)0;        menu->entry[menu->nr].fontname = options_menu_fontname;        menu->entry[menu->nr].fontsize = 32;        menu->entry[menu->nr].arg      = (void *)0;        menu->entry[menu->nr].fixedlen = fixedlen;        menu->nr++;    } else {        printf("menu_add_textfield: too many menu entries - ignoring this entry\n");    }}void menu_add_exit( menuType * menu, char * text ){    DPRINTF("menu_add_exit:\n");    if(menu->nr<MAX_MENU_ENTRY_NUM){        menu->entry[menu->nr].type     = ENTRY_TYPE_EXIT;        strcpy( menu->entry[menu->nr].text, text );        menu->entry[menu->nr].settingtext[0] = 0;        menu->entry[menu->nr].text_obj = (textObj *)0;//    menu->entry[menu->nr].settingtext_obj = (textObj *)0;        menu->entry[menu->nr].fontname = options_menu_fontname;        menu->entry[menu->nr].fontsize = 32;        menu->entry[menu->nr].arg      = (void *) 0;        menu->nr++;    } else {        printf("menu_add_exit: too many menu entries - ignoring this entry\n");    }}void menu_entry_set_text( menuEntry * entry, char * text ){    char str[256];    strcpy( entry->text, text );    if( entry->text_obj != (textObj *)0 ){        if( entry->show_subsetting && entry->settingtext[0]!=0 ){            sprintf(str,"%s : %s",entry->text,entry->settingtext);            textObj_setText( entry->text_obj, str );//            textObj_setText( entry->text_obj, text );        } else {            textObj_setText( entry->text_obj, text );        }    }}void menu_entry_set_settingtext( menuEntry * entry, char * text ){    char str[256];    strcpy( entry->settingtext, text );    if( entry->text_obj != (textObj *)0 ){        if( entry->show_subsetting && entry->settingtext[0]!=0 ){            sprintf(str,"%s : %s",entry->text,entry->settingtext);            textObj_setText( entry->text_obj, str );/*            sprintf(str," : %s",entry->settingtext);            if( entry->settingtext_obj != (textObj *)0 ){                textObj_setText( entry->settingtext_obj, str );            } else {                entry->settingtext_obj=textObj_new( str, entry->fontname, entry->fontsize );            }*/        } else {            textObj_setText( entry->text_obj, text );        }    }}static void menu_create_textobj( menuEntry * entry ){    char str[256];    if( entry->text_obj == (textObj *)0 ){        if( entry->show_subsetting && entry->settingtext[0]!=0 ){            sprintf(str,"%s : %s",entry->text,entry->settingtext);            entry->text_obj = textObj_new( str, entry->fontname, entry->fontsize );/*            entry->text_obj = textObj_new( entry->text, entry->fontname, entry->fontsize );            sprintf(str," : %s",entry->settingtext);            entry->settingtext_obj = textObj_new( str, entry->fontname, entry->fontsize );*/        } else {            entry->text_obj = textObj_new( entry->text, entry->fontname, entry->fontsize );        }//        textObj_toggle3D(entry->text_obj);    }}void menu_select_by_coord( menuType * menu, int x, int y )/* selects the menupoint under the pos x,y */{    int i,x1,y1,x2,y2, all_height;    if(!menu->textedit_mode){        all_height=0;        for(i=0;i<menu->nr;i++){            all_height+=menu->entry[i].fontsize;        }        for(i=0;i<menu->nr;i++){            //        fprintf( stderr, "menu->entry[i].text_obj = %d\n", menu->entry[i].text_obj );            if( menu->entry[i].text_obj == (textObj *)0 ){                menu_create_textobj( &(menu->entry[i]) );            }            x1 = -menu->entry[i].text_obj->quad_w/2;            y1 = all_height/2-i*menu->entry[i].fontsize-menu->entry[i].text_obj->quad_h/2;            x2 = +menu->entry[i].text_obj->quad_w/2;            y2 = all_height/2-i*menu->entry[i].fontsize+menu->entry[i].text_obj->quad_h/2;            if( x<=x2 && x>=x1 && y<=y2 && y>=y1 ){                menu->select_index=i;                *(menu->p_select_id)=menu->entry[i].id;            }        }    }}void menu_select_next( menuType * menu )/* selects the next menupoint in the current submenu */

⌨️ 快捷键说明

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