X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fmenu%2Fxonotic%2Flanguagelist.c;h=5697f823109d001bdc1a226165d62cb47fef3ef7;hb=cb99176a6fd8bab641ea2776bee2863d3d25df11;hp=5f6226f493fbee1ec5c5d1214cdf6aae16f62b1e;hpb=87d4a81433ca7dbd761782f9b4b235976c7cdae5;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/menu/xonotic/languagelist.c b/qcsrc/menu/xonotic/languagelist.c index 5f6226f49..5697f8231 100644 --- a/qcsrc/menu/xonotic/languagelist.c +++ b/qcsrc/menu/xonotic/languagelist.c @@ -12,11 +12,11 @@ CLASS(XonoticLanguageList) EXTENDS(XonoticListBox) ATTRIB(XonoticLanguageList, realUpperMargin, float, 0) ATTRIB(XonoticLanguageList, columnNameOrigin, float, 0) ATTRIB(XonoticLanguageList, columnNameSize, float, 0) + ATTRIB(XonoticLanguageList, columnPercentageOrigin, float, 0) + ATTRIB(XonoticLanguageList, columnPercentageSize, float, 0) - METHOD(XonoticLanguageList, clickListBoxItem, void(entity, float, vector)) // double click handling + METHOD(XonoticLanguageList, doubleClickListBoxItem, void(entity, float, vector)) METHOD(XonoticLanguageList, keyDown, float(entity, float, float, float)) // enter handling - ATTRIB(XonoticLanguageList, lastClickedLanguage, float, -1) - ATTRIB(XonoticLanguageList, lastClickedTime, float, 0) METHOD(XonoticLanguageList, destroy, void(entity)) @@ -26,8 +26,6 @@ CLASS(XonoticLanguageList) EXTENDS(XonoticListBox) METHOD(XonoticLanguageList, languageParameter, string(entity, float, float)) ATTRIB(XonoticLanguageList, name, string, "languageselector") // change this to make it noninteractive (for first run dialog) - - ATTRIB(XonoticLanguageList, doubleClickCommand, string, "prvm_language \"$_menu_prvm_language\"\nmenu_restart\nmenu_cmd languageselect") ENDCLASS(XonoticLanguageList) entity makeXonoticLanguageList(); @@ -39,7 +37,8 @@ void SetLanguage_Click(entity btn, entity me); #define LANGPARM_ID 0 #define LANGPARM_NAME 1 #define LANGPARM_NAME_LOCALIZED 2 -#define LANGPARM_COUNT 3 +#define LANGPARM_PERCENTAGE 3 +#define LANGPARM_COUNT 4 entity makeXonoticLanguageList() { @@ -58,11 +57,31 @@ void XonoticLanguageList_configureXonoticLanguageList(entity me) void XonoticLanguageList_drawListBoxItem(entity me, float i, vector absSize, float isSelected) { - string s; + string s, p; if(isSelected) draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); + s = me.languageParameter(me, i, LANGPARM_NAME_LOCALIZED); - draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0); + + vector save_fontscale = draw_fontscale; + float f = draw_CondensedFontFactor(s, FALSE, me.realFontSize, 1); + draw_fontscale_x *= f; + vector fs = me.realFontSize; + fs_x *= f; + draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0); + draw_fontscale = save_fontscale; + + p = me.languageParameter(me, i, LANGPARM_PERCENTAGE); + if(p != "") + { + vector save_fontscale = draw_fontscale; + float f = draw_CondensedFontFactor(p, FALSE, me.realFontSize, 1); + draw_fontscale_x *= f; + vector fs = me.realFontSize; + fs_x *= f; + draw_Text(me.realUpperMargin * eY + (me.columnPercentageOrigin + (me.columnPercentageSize - draw_TextWidth(p, 0, fs))) * eX, p, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0); + draw_fontscale = save_fontscale; + } } void XonoticLanguageList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) @@ -71,8 +90,10 @@ void XonoticLanguageList_resizeNotify(entity me, vector relOrigin, vector relSiz me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight); me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth)); me.realUpperMargin = 0.5 * (1 - me.realFontSize_y); + me.columnPercentageSize = me.realFontSize_x * 3; + me.columnPercentageOrigin = 1 - me.columnPercentageSize; me.columnNameOrigin = 0; - me.columnNameSize = 1; + me.columnNameSize = me.columnPercentageOrigin; } void XonoticLanguageList_setSelected(entity me, float i) @@ -117,22 +138,17 @@ void XonoticLanguageList_saveCvars(entity me) cvar_set("_menu_prvm_language", me.languageParameter(me, me.selectedItem, LANGPARM_ID)); } -void XonoticLanguageList_clickListBoxItem(entity me, float i, vector where) +void XonoticLanguageList_doubleClickListBoxItem(entity me, float i, vector where) { - if(i == me.lastClickedLanguage) - if(time < me.lastClickedTime + 0.3) - { - // DOUBLE CLICK! - me.setSelected(me, i); - me.setLanguage(me); - } - me.lastClickedLanguage = i; - me.lastClickedTime = time; + m_play_click_sound(MENU_SOUND_EXECUTE); + me.setLanguage(me); } float XonoticLanguageList_keyDown(entity me, float scan, float ascii, float shift) { - if(scan == K_ENTER || scan == K_KP_ENTER) { + if(scan == K_ENTER || scan == K_KP_ENTER) + { + m_play_click_sound(MENU_SOUND_EXECUTE); me.setLanguage(me); return 1; } @@ -153,6 +169,7 @@ void XonoticLanguageList_getLanguages(entity me) buf = buf_create(); fh = fopen("languages.txt", FILE_READ); + i = 0; while((s = fgets(fh))) { n = tokenize_console(s); @@ -160,7 +177,15 @@ void XonoticLanguageList_getLanguages(entity me) continue; bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_ID, argv(0)); bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME, argv(1)); - bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME_LOCALIZED, argv(2)); + float k = strstrofs(argv(2), "(", 0); + if(k > 0) + if(substring(argv(2), strlen(argv(2)) - 1, 1) == ")") + { + string percent = substring(argv(2), k + 1, -2); + if(percent != "100%") + bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_PERCENTAGE, percent); + } + bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME_LOCALIZED, (k < 0) ? argv(2) : substring(argv(2), 0, k - 1)); ++i; } fclose(fh); @@ -171,7 +196,13 @@ void XonoticLanguageList_getLanguages(entity me) void XonoticLanguageList_setLanguage(entity me) { - localcmd(sprintf("\n%s\n", me.doubleClickCommand)); + if(prvm_language != cvar_string("_menu_prvm_language")) + { + if(!(gamestatus & GAME_CONNECTED)) + localcmd("\nprvm_language \"$_menu_prvm_language\"; menu_restart; menu_cmd languageselect\n"); + else + DialogOpenButton_Click(me, main.languageWarningDialog); + } } string XonoticLanguageList_languageParameter(entity me, float i, float key)