/* * Glide64 - Glide video plugin for Nintendo 64 emulators. * Copyright (c) 2002 Dave2001 * * This program 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 * any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ //**************************************************************** // // Glide64 - Glide Plugin for Nintendo 64 emulators (tested mostly with Project64) // Project started on December 29th, 2001 // // To modify Glide64: // * Write your name and (optional)email, commented by your work, so I know who did it, and so that you can find which parts you modified when it comes time to send it to me. // * Do NOT send me the whole project or file that you modified. Take out your modified code sections, and tell me where to put them. If people sent the whole thing, I would have many different versions, but no idea how to combine them all. // // Official Glide64 development channel: #Glide64 on EFnet // // Original author: Dave2001 (Dave2999@hotmail.com) // Other authors: Gonetz, Gugaman // //**************************************************************** #include "Gfx1.3.h" #ifdef _WIN32 #include "resource.h" #include "ToolTips.h" PROPSHEETHEADER m_PropSheet; PROPSHEETPAGE m_psp[3]; /****************************************************************** Function: DllConfig Purpose: This function is optional function that is provided to allow the user to configure the dll input: a handle to the window that calls this function output: none *******************************************************************/ void CALL DllConfig ( HWND hParent ) { ReadSettings (); if (romopen) { char name[21] = "DEFAULT"; ReadSpecialSettings (name); // get the name of the ROM for (int i=0; i<20; i++) name[i] = gfx.HEADER[(32+i)^3]; name[20] = 0; // remove all trailing spaces while (name[strlen(name)-1] == ' ') name[strlen(name)-1] = 0; ReadSpecialSettings (name); } m_PropSheet.hwndParent = hParent; if (PropertySheet(&m_PropSheet)) { // re-init evoodoo graphics to resize window if (evoodoo && fullscreen && !ev_fullscreen) { ReleaseGfx (); InitGfx (TRUE); } } } // // ConfigProc - window proceedure for the configuration dialog // BOOL CALLBACK ConfigPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { #ifdef USE_TOOLTIPS case PSN_SETACTIVE: if (!g_hhk) { g_hwndDlg = hwndDlg; g_hinst = hInstance; g_hwndTT = NULL; DoCreateDialogTooltip (); } break; case TTN_NEEDTEXT: OnWMNotify (lParam); break; case PSN_KILLACTIVE: case PSN_QUERYCANCEL: //user clicked OK or selected another page if (g_hwndDlg == hwndDlg) { if (g_hhk) UnhookWindowsHookEx (g_hhk); g_hhk = NULL; g_hwndTT = NULL; g_hwndDlg = NULL; } break; #endif case PSN_APPLY: // Save the resolution HWND hwndRes = GetDlgItem (hwndDlg, IDC_RESOLUTION); settings.res_data = SendMessage (hwndRes, CB_GETCURSEL, 0, 0); HWND hwndWireframe = GetDlgItem (hwndDlg, IDC_WIREFRAME); settings.wireframe = (SendMessage (hwndWireframe, BM_GETCHECK, 0, 0)==BST_CHECKED)?1:0; HWND hwndWfmode = GetDlgItem (hwndDlg, IDC_WFMODE); settings.wfmode = SendMessage (hwndWfmode, CB_GETCURSEL, 0, 0); HWND hwndU = GetDlgItem (hwndDlg, IDC_UCODE); settings.ucode = SendMessage (hwndU, CB_GETCURSEL, 0, 0); // Actually set the new resolution numbers settings.scr_res_x = settings.res_x = resolutions[settings.res_data][0]; settings.scr_res_y = settings.res_y = resolutions[settings.res_data][1]; // Rendering // Filter modes settings.filtering = (BYTE)SendMessage (GetDlgItem (hwndDlg, IDC_FILTER), CB_GETCURSEL, 0, 0); // Buffer swapping modes settings.swapmode = (BYTE)SendMessage (GetDlgItem (hwndDlg, IDC_SWAP), CB_GETCURSEL, 0, 0); //LOD calculation modes settings.lodmode = (BYTE)SendMessage (GetDlgItem (hwndDlg, IDC_LOD), CB_GETCURSEL, 0, 0); #define GETBN(id,var) var=((SendMessage(GetDlgItem(hwndDlg,id),BM_GETCHECK,0,0)==BST_CHECKED)?1:0) GETBN (IDC_BUFFERCLEAR, settings.buff_clear); // Autodetect GETBN (IDC_AUTODETECT, settings.autodetect_ucode); // Glide card # if (SendMessage (GetDlgItem (hwndDlg, IDC_GID1), BM_GETCHECK, 0, 0)==BST_CHECKED) settings.card_id = 0; if (SendMessage (GetDlgItem (hwndDlg, IDC_GID2), BM_GETCHECK, 0, 0)==BST_CHECKED) settings.card_id = 1; if (SendMessage (GetDlgItem (hwndDlg, IDC_GID3), BM_GETCHECK, 0, 0)==BST_CHECKED) settings.card_id = 2; if (SendMessage (GetDlgItem (hwndDlg, IDC_GID4), BM_GETCHECK, 0, 0)==BST_CHECKED) settings.card_id = 3; GETBN (IDC_WRAP_BIG_TEX, settings.wrap_big_tex); GETBN (IDC_CORONA, settings.flame_corona); //GETBN (IDC_RE2_VIDEO, settings.RE2_native_video); GETBN (IDC_FOG, settings.fog); GETBN (IDC_VSYNC, settings.vsync); GETBN (IDC_CRC, settings.fast_crc); GETBN (IDC_FB_READ_ALWAYS, settings.fb_read_always); GETBN (IDC_FB_INFO, settings.fb_get_info); GETBN (IDC_FB_ALPHA, settings.fb_read_alpha); GETBN (IDC_FB_SMART, settings.fb_smart); GETBN (IDC_ENABLEMB, settings.fb_motionblur); GETBN (IDC_HIRESFB, settings.fb_hires); GETBN (IDC_DB_CLEAR, settings.fb_depth_clear); GETBN (IDC_DB_RENDER, settings.fb_depth_render); GETBN (IDC_CUSTOM, settings.custom_ini); GETBN (IDC_HOTKEYS, settings.hotkeys); WriteSettings (); if (g_hwndDlg == hwndDlg) { #ifdef USE_TOOLTIPS if (g_hhk) UnhookWindowsHookEx (g_hhk); g_hhk = NULL; #endif g_hwndDlg = NULL; } break; } return 0; case WM_INITDIALOG: { // Add the video modes to the list HWND hwndRes = GetDlgItem (hwndDlg, IDC_RESOLUTION); #define ADDRES(s,x) SendMessage(hwndRes,CB_ADDSTRING,0,(LPARAM)s); // MUST be in this order (SST1VID.H) ADDRES ("320x200", 0x00); ADDRES ("320x240", 0x01); ADDRES ("400x256", 0x02); ADDRES ("512x384", 0x03); ADDRES ("640x200", 0x04); ADDRES ("640x350", 0x05); ADDRES ("640x400", 0x06); ADDRES ("640x480", 0x07); ADDRES ("800x600", 0x08); ADDRES ("960x720", 0x09); ADDRES ("856x480", 0x0A); ADDRES ("512x256", 0x0B); ADDRES ("1024x768", 0x0C); ADDRES ("1280x1024", 0x0D); ADDRES ("1600x1200", 0x0E); ADDRES ("400x300", 0x0F); ADDRES ("1152x864", 0x10); ADDRES ("1280x960", 0x11); ADDRES ("1600x1024", 0x12); ADDRES ("1792x1344", 0x13); ADDRES ("1856x1392", 0x14); ADDRES ("1920x1440", 0x15); ADDRES ("2048x1536", 0x16); ADDRES ("2048x2048", 0x17); SendMessage (hwndRes, CB_SETCURSEL, settings.res_data, 0); HWND hwndWireframe = GetDlgItem (hwndDlg, IDC_WIREFRAME); SendMessage (hwndWireframe, BM_SETCHECK, settings.wireframe?BST_CHECKED:BST_UNCHECKED, 0); HWND hwndWfmode = GetDlgItem (hwndDlg, IDC_WFMODE); SendMessage (hwndWfmode, CB_ADDSTRING, 0, (LPARAM)"Original colors"); SendMessage (hwndWfmode, CB_ADDSTRING, 0, (LPARAM)"Vertex colors"); SendMessage (hwndWfmode, CB_ADDSTRING, 0, (LPARAM)"Red only"); SendMessage (hwndWfmode, CB_SETCURSEL, settings.wfmode, 0); HWND hwndU = GetDlgItem (hwndDlg, IDC_UCODE); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"0: RSP SW 2.0X (ex. Mario)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"1: F3DEX 1.XX (ex. Star Fox)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"2: F3DEX 2.XX (ex. Zelda OOT)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"3: RSP SW 2.0D EXT (ex. Waverace)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"4: RSP SW 2.0D EXT (ex. Shadows of the Empire)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"5: RSP SW 2.0 (ex. Diddy Kong Racing)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"6: S2DEX 1.XX (ex. Yoshi's Story)"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"7: RSP SW PD Perfect Dark"); SendMessage (hwndU, CB_ADDSTRING, 0, (LPARAM)"8: F3DEXBG 2.08 Conker's Bad Fur Day"); SendMessage (hwndU, CB_SETCURSEL, settings.ucode, 0); // Rendering // Filter modes HWND hwndFilter = GetDlgItem (hwndDlg, IDC_FILTER); SendMessage (hwndFilter, CB_ADDSTRING, 0, (LPARAM)"Automatic"); SendMessage (hwndFilter, CB_ADDSTRING, 0, (LPARAM)"Force Bilinear"); SendMessage (hwndFilter, CB_ADDSTRING, 0, (LPARAM)"Force Point-sampled"); SendMessage (hwndFilter, CB_SETCURSEL, settings.filtering, 0); // Buffer swapping modes HWND hwndSwap = GetDlgItem (hwndDlg, IDC_SWAP); SendMessage (hwndSwap, CB_ADDSTRING, 0, (LPARAM)"old"); SendMessage (hwndSwap, CB_ADDSTRING, 0, (LPARAM)"new"); SendMessage (hwndSwap, CB_ADDSTRING, 0, (LPARAM)"hybrid"); SendMessage (hwndSwap, CB_SETCURSEL, settings.swapmode, 0); // LOD calculation modes modes HWND hwndLOD = GetDlgItem (hwndDlg, IDC_LOD); SendMessage (hwndLOD, CB_ADDSTRING, 0, (LPARAM)"off"); SendMessage (hwndLOD, CB_ADDSTRING, 0, (LPARAM)"fast"); SendMessage (hwndLOD, CB_ADDSTRING, 0, (LPARAM)"precise"); SendMessage (hwndLOD, CB_SETCURSEL, settings.lodmode, 0); #define CHECKBN(id,set) SendMessage(GetDlgItem(hwndDlg,id),BM_SETCHECK,(set)?BST_CHECKED:BST_UNCHECKED, 0); CHECKBN (IDC_BUFFERCLEAR, settings.buff_clear); // Autodetect CHECKBN (IDC_AUTODETECT, settings.autodetect_ucode); // Glide card # CHECKBN (IDC_GID1, settings.card_id==0); CHECKBN (IDC_GID2, settings.card_id==1); CHECKBN (IDC_GID3, settings.card_id==2); CHECKBN (IDC_GID4, settings.card_id==3); // Special fixes CHECKBN (IDC_WRAP_BIG_TEX, settings.wrap_big_tex); CHECKBN (IDC_CORONA, settings.flame_corona); //CHECKBN (IDC_RE2_VIDEO, settings.RE2_native_video); CHECKBN (IDC_FOG, settings.fog); CHECKBN (IDC_VSYNC, settings.vsync); CHECKBN (IDC_CRC, settings.fast_crc); //Frame buffer CHECKBN (IDC_FB_READ_ALWAYS, settings.fb_read_always); CHECKBN (IDC_FB_INFO, settings.fb_get_info); CHECKBN (IDC_FB_ALPHA, settings.fb_read_alpha); CHECKBN (IDC_FB_SMART, settings.fb_smart); CHECKBN (IDC_ENABLEMB, settings.fb_motionblur); CHECKBN (IDC_HIRESFB, settings.fb_hires); CHECKBN (IDC_DB_CLEAR, settings.fb_depth_clear); CHECKBN (IDC_DB_RENDER, settings.fb_depth_render); CHECKBN (IDC_CUSTOM, settings.custom_ini); CHECKBN (IDC_HOTKEYS, settings.hotkeys); BOOL enable = !settings.custom_ini; EnableWindow(hwndFilter, enable); HWND hwndFog = GetDlgItem (hwndDlg, IDC_FOG); EnableWindow(hwndFog, enable); HWND hwndBuffClear = GetDlgItem (hwndDlg, IDC_BUFFERCLEAR); EnableWindow(hwndBuffClear, enable); EnableWindow(hwndSwap, enable); HWND hwndFBSmart = GetDlgItem (hwndDlg, IDC_FB_SMART); EnableWindow(hwndFBSmart, enable); HWND hwndAlpha = GetDlgItem (hwndDlg, IDC_FB_ALPHA); EnableWindow(hwndAlpha, enable); HWND hwndFBClear = GetDlgItem (hwndDlg, IDC_DB_CLEAR); EnableWindow(hwndFBClear, enable); } return 1; case WM_COMMAND: if (HIWORD(wParam) == BN_CLICKED) { if (LOWORD(wParam) == IDC_CUSTOM) { HWND hwndCustom = GetDlgItem (hwndDlg, IDC_CUSTOM); BOOL enable = (SendMessage(hwndCustom, BM_GETCHECK, 0, 0) != BST_CHECKED); HWND hwndFilter = GetDlgItem (hwndDlg, IDC_FILTER); EnableWindow(hwndFilter, enable); HWND hwndFog = GetDlgItem (hwndDlg, IDC_FOG); EnableWindow(hwndFog, enable); HWND hwndBuffClear = GetDlgItem (hwndDlg, IDC_BUFFERCLEAR); EnableWindow(hwndBuffClear, enable); HWND hwndSwap = GetDlgItem (hwndDlg, IDC_SWAP); EnableWindow(hwndSwap, enable); HWND hwndFBSmart = GetDlgItem (hwndDlg, IDC_FB_SMART); EnableWindow(hwndFBSmart, enable); HWND hwndAlpha = GetDlgItem (hwndDlg, IDC_FB_ALPHA); EnableWindow(hwndAlpha, enable); HWND hwndFBClear = GetDlgItem (hwndDlg, IDC_DB_CLEAR); EnableWindow(hwndFBClear, enable); } else if (LOWORD(wParam) == IDC_WRAPPER) { GRCONFIGWRAPPEREXT grConfigWrapperExt = (GRCONFIGWRAPPEREXT)grGetProcAddress("grConfigWrapperExt"); if (grConfigWrapperExt) grConfigWrapperExt(hInstance, hwndDlg); } else if (LOWORD(wParam) == IDC_DB_RENDER) { if (SendMessage(GetDlgItem (hwndDlg, IDC_DB_RENDER), BM_GETCHECK, 0, 0) == BST_CHECKED) { settings.fb_depth_clear = TRUE; HWND hwndFBClear = GetDlgItem (hwndDlg, IDC_DB_CLEAR); SendMessage(hwndFBClear, BM_SETCHECK, BST_CHECKED, 0); EnableWindow(hwndFBClear, 0); } else { HWND hwndCustom = GetDlgItem (hwndDlg, IDC_CUSTOM); BOOL enable = (SendMessage(hwndCustom, BM_GETCHECK, 0, 0) != BST_CHECKED); HWND hwndFBClear = GetDlgItem (hwndDlg, IDC_DB_CLEAR); EnableWindow(hwndFBClear, enable); } } } return 0; } return 0; } BOOL CALLBACK DebugPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { #ifdef USE_TOOLTIPS case PSN_SETACTIVE: if (!g_hhk) { g_hwndDlg = hwndDlg; g_hinst = hInstance; g_hwndTT = NULL; DoCreateDialogTooltip (); } break; case TTN_NEEDTEXT: OnWMNotify (lParam); break; case PSN_KILLACTIVE: case PSN_QUERYCANCEL: //user clicked OK or selected another page if (g_hwndDlg == hwndDlg) { if (g_hhk) UnhookWindowsHookEx (g_hhk); g_hhk = NULL; g_hwndDlg = NULL; } break; #endif case PSN_APPLY: // Debug/misc options GETBN (IDC_LOGGING, settings.logging); GETBN (IDC_LOGCLEAR, settings.log_clear); GETBN (IDC_CPU_HACK, settings.cpu_write_hack); GETBN (IDC_LOG_E, settings.elogging); GETBN (IDC_CACHEFILTER, settings.filter_cache); GETBN (IDC_UNKRED, settings.unk_as_red); GETBN (IDC_LOGUNK, settings.log_unk); GETBN (IDC_UNKCLEAR, settings.unk_clear); WriteSettings (); if (g_hwndDlg == hwndDlg) { #ifdef USE_TOOLTIPS if (g_hhk) UnhookWindowsHookEx (g_hhk); g_hhk = NULL; #endif g_hwndDlg = NULL; } break; } return 0; case WM_INITDIALOG: { // Debug/misc options CHECKBN (IDC_LOGGING, settings.logging); CHECKBN (IDC_LOGCLEAR, settings.log_clear); CHECKBN (IDC_LOG_E, settings.elogging); CHECKBN (IDC_CPU_HACK, settings.cpu_write_hack); CHECKBN (IDC_CACHEFILTER, settings.filter_cache); CHECKBN (IDC_UNKRED, settings.unk_as_red); CHECKBN (IDC_LOGUNK, settings.log_unk); CHECKBN (IDC_UNKCLEAR, settings.unk_clear); } return 1; case WM_COMMAND: return 0; } return 0; } BOOL CALLBACK StatisticsPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_NOTIFY: switch (((NMHDR FAR *) lParam)->code) { #ifdef USE_TOOLTIPS case PSN_SETACTIVE: if (!g_hhk) { g_hwndDlg = hwndDlg; g_hinst = hInstance; g_hwndTT = NULL; DoCreateDialogTooltip (); } break; case TTN_NEEDTEXT: OnWMNotify (lParam); break; case PSN_KILLACTIVE: case PSN_QUERYCANCEL: //user clicked OK or selected another page if (g_hwndDlg == hwndDlg) { if (g_hhk) UnhookWindowsHookEx (g_hhk); g_hhk = NULL; g_hwndDlg = NULL; } break; #endif case PSN_APPLY: // speed counters settings.show_fps = ((SendMessage (GetDlgItem (hwndDlg, IDC_FPS),BM_GETCHECK, 0, 0)==BST_CHECKED)?1:0) | ((SendMessage (GetDlgItem (hwndDlg, IDC_FPS1),BM_GETCHECK, 0, 0)==BST_CHECKED)?2:0) | ((SendMessage (GetDlgItem (hwndDlg, IDC_FPS2),BM_GETCHECK, 0, 0)==BST_CHECKED)?4:0) | ((SendMessage (GetDlgItem (hwndDlg, IDC_FPS3),BM_GETCHECK, 0, 0)==BST_CHECKED)?8:0); GETBN (IDC_CLOCK, settings.clock); GETBN (IDC_CLOCK24, settings.clock_24_hr); WriteSettings (); if (g_hwndDlg == hwndDlg) { #ifdef USE_TOOLTIPS if (g_hhk) UnhookWindowsHookEx (g_hhk); g_hhk = NULL; #endif g_hwndDlg = NULL; } break; } return 0; case WM_INITDIALOG: { // speed counters CHECKBN (IDC_FPS, settings.show_fps&1); CHECKBN (IDC_FPS1, settings.show_fps&2); CHECKBN (IDC_FPS2, settings.show_fps&4); CHECKBN (IDC_FPS3, settings.show_fps&8); CHECKBN (IDC_CLOCK, settings.clock); CHECKBN (IDC_CLOCK24, settings.clock_24_hr); } return 1; case WM_COMMAND: return 0; } return 0; } #else // _WIN32 #include #include typedef struct { GtkWidget *dialog; GtkWidget *autodetectCheckButton; GtkWidget *forceCombo; GtkWidget *windowResCombo; GtkWidget *fullResCombo; GtkWidget *texFilterCombo; GtkWidget *filterCombo; GtkWidget *lodCombo; GtkWidget *fogCheckButton; GtkWidget *bufferClearCheckButton; GtkWidget *vSyncCheckButton; GtkWidget *fastcrcCheckButton; GtkWidget *noDitheredAlphaCheckButton; GtkWidget *noGLSLCheckButton; GtkWidget *swapCombo; GtkWidget *customIniCheckButton; GtkWidget *wrapCheckButton; GtkWidget *coronaCheckButton; GtkWidget *readAllCheckButton; GtkWidget *CPUWriteHackCheckButton; GtkWidget *FBGetInfoCheckButton; GtkWidget *DepthRenderCheckButton; GtkWidget *FPSCheckButton; GtkWidget *VICheckButton; GtkWidget *ratioCheckButton; GtkWidget *FPStransCheckButton; GtkWidget *clockCheckButton; GtkWidget *clock24CheckButton; GtkWidget *hiresFbCheckButton; GtkWidget *hiresFBOCheckButton; GList *windowResComboList; GList *texFilterComboList; GList *forceComboList; GList *filterComboList; GList *lodComboList; GList *swapComboList; } ConfigDialog; static void customIniCheckButtonCallback(GtkWidget *widget, void *data) { ConfigDialog *configDialog = (ConfigDialog*)data; BOOL enable = !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->customIniCheckButton)); gtk_widget_set_sensitive(configDialog->filterCombo, enable); gtk_widget_set_sensitive(configDialog->lodCombo, enable); gtk_widget_set_sensitive(configDialog->fogCheckButton, enable); gtk_widget_set_sensitive(configDialog->bufferClearCheckButton, enable); gtk_widget_set_sensitive(configDialog->swapCombo, enable); } static void okButtonCallback(GtkWidget *widget, void *data) { ConfigDialog *configDialog = (ConfigDialog*)data; char *s; unsigned int i; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->windowResCombo)->entry)); for (i=0; iwindowResComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->windowResComboList, i))) settings.res_data = i; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->fullResCombo)->entry)); for (i=0; iwindowResComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->windowResComboList, i))) settings.full_res = i; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->texFilterCombo)->entry)); for (i=0; itexFilterComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->texFilterComboList, i))) settings.tex_filter = i; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->forceCombo)->entry)); for (i=0; iforceComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->forceComboList, i))) settings.ucode = i; settings.scr_res_x = settings.res_x = resolutions[settings.res_data][0]; settings.scr_res_y = settings.res_y = resolutions[settings.res_data][1]; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->filterCombo)->entry)); for (i=0; ifilterComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->filterComboList, i))) settings.filtering = i; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->lodCombo)->entry)); for (i=0; ilodComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->lodComboList, i))) settings.lodmode = i; s = (char*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(configDialog->swapCombo)->entry)); for (i=0; iswapComboList); i++) if(!strcmp(s, (char*)g_list_nth_data(configDialog->swapComboList, i))) settings.swapmode = i; settings.fog = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->fogCheckButton)); settings.buff_clear = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->bufferClearCheckButton)); settings.autodetect_ucode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->autodetectCheckButton)); settings.wrap_big_tex = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->wrapCheckButton)); settings.flame_corona = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->coronaCheckButton)); settings.vsync = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->vSyncCheckButton)); settings.fast_crc = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->fastcrcCheckButton)); settings.noditheredalpha = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->noDitheredAlphaCheckButton)); settings.noglsl = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->noGLSLCheckButton)); settings.fb_read_always = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->readAllCheckButton)); settings.cpu_write_hack = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->CPUWriteHackCheckButton)); settings.fb_get_info = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->FBGetInfoCheckButton)); settings.fb_depth_render = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->DepthRenderCheckButton)); settings.custom_ini = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->customIniCheckButton)); settings.fb_hires = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->hiresFbCheckButton)); settings.FBO = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->hiresFBOCheckButton)); settings.show_fps = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->FPSCheckButton))?1:0) | (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->VICheckButton))?2:0) | (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->ratioCheckButton))?4:0) | (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->FPStransCheckButton))?8:0); settings.clock = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->clockCheckButton)); settings.clock_24_hr = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(configDialog->clock24CheckButton)); WriteSettings(); // re-init evoodoo graphics to resize window if (evoodoo && fullscreen && !ev_fullscreen) { ReleaseGfx (); InitGfx (TRUE); } gtk_widget_hide(configDialog->dialog); } static ConfigDialog *CreateConfigDialog() { // objects dialog // dialog GtkWidget *dialog; dialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(dialog), "Glide64 Configuration"); // ok button GtkWidget *okButton; okButton = gtk_button_new_with_label("OK"); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), okButton); // cancel button GtkWidget *cancelButton; cancelButton = gtk_button_new_with_label("Cancel"); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), cancelButton); // Autodetect ucode CheckButton GtkWidget *autodetectCheckButton; autodetectCheckButton = gtk_check_button_new_with_label("Autodetect Microcode"); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), autodetectCheckButton); // Force Microcode Container GtkWidget *forceContainer; forceContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), forceContainer); // Force Microcode Label GtkWidget *forceLabel; forceLabel = gtk_label_new("Force Microcode:"); gtk_container_add(GTK_CONTAINER(forceContainer), forceLabel); // Force Microcode Combo GtkWidget *forceCombo; forceCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(forceCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(forceContainer), forceCombo); // horizontal container GtkWidget *hContainer; hContainer = gtk_hbox_new(0, 0); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), hContainer); // vertical container GtkWidget *vContainer; vContainer = gtk_vbox_new(0, 0); gtk_container_add(GTK_CONTAINER(hContainer), vContainer); // Rendering Frame GtkWidget *renderingFrame; renderingFrame = gtk_frame_new("Rendering"); gtk_container_add(GTK_CONTAINER(vContainer), renderingFrame); // Rendering Container GtkWidget *renderingContainer; renderingContainer = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingFrame), renderingContainer); // Window Mode Resolution Container GtkWidget *windowResContainer; windowResContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingContainer), windowResContainer); // Window Mode Resolution Label GtkWidget *windowResLabel; windowResLabel = gtk_label_new("Window Resolution:"); gtk_container_add(GTK_CONTAINER(windowResContainer), windowResLabel); // Window Mode Combo GtkWidget *windowResCombo; windowResCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(windowResCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(windowResContainer), windowResCombo); // FullScreen Mode Resolution Container GtkWidget *fullResContainer; fullResContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingContainer), fullResContainer); // FullScreen Mode Resolution Label GtkWidget *fullResLabel; fullResLabel = gtk_label_new("Fullscreen Resolution:"); gtk_container_add(GTK_CONTAINER(fullResContainer), fullResLabel); // FullScreen Mode Combo GtkWidget *fullResCombo; fullResCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(fullResCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(fullResContainer), fullResCombo); // Texture Filter Container GtkWidget *texFilterContainer; texFilterContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingContainer), texFilterContainer); // Texture Filter Label GtkWidget *texFilterLabel; texFilterLabel = gtk_label_new("Texture Filter:"); gtk_container_add(GTK_CONTAINER(texFilterContainer), texFilterLabel); // Texture Filter Combo GtkWidget *texFilterCombo; texFilterCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(texFilterCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(texFilterContainer), texFilterCombo); // Filter Container GtkWidget *filterContainer; filterContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingContainer), filterContainer); // Filter Label GtkWidget *filterLabel; filterLabel = gtk_label_new("Filtering mode:"); gtk_container_add(GTK_CONTAINER(filterContainer), filterLabel); // Filter Combo GtkWidget *filterCombo; filterCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(filterCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(filterContainer), filterCombo); // LOD Container GtkWidget *lodContainer; lodContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingContainer), lodContainer); // LOD Label GtkWidget *lodLabel; lodLabel = gtk_label_new("LOD calculation:"); gtk_container_add(GTK_CONTAINER(lodContainer), lodLabel); // LOD Combo GtkWidget *lodCombo; lodCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(lodCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(lodContainer), lodCombo); // Fog CheckButton GtkWidget *fogCheckButton; fogCheckButton = gtk_check_button_new_with_label("Fog enabled"); gtk_container_add(GTK_CONTAINER(renderingContainer), fogCheckButton); // Buffer Clear CheckButton GtkWidget *bufferClearCheckButton; bufferClearCheckButton = gtk_check_button_new_with_label("Buffer clear on every frame"); gtk_container_add(GTK_CONTAINER(renderingContainer), bufferClearCheckButton); // Vertical Sync CheckButton GtkWidget *vSyncCheckButton; vSyncCheckButton = gtk_check_button_new_with_label("Vertical Sync"); gtk_container_add(GTK_CONTAINER(renderingContainer), vSyncCheckButton); // Fast CRC CheckButton GtkWidget *fastcrcCheckButton; fastcrcCheckButton = gtk_check_button_new_with_label("Fast CRC"); gtk_container_add(GTK_CONTAINER(renderingContainer), fastcrcCheckButton); // hires framebuffer CheckButton GtkWidget *hiresFbCheckButton; hiresFbCheckButton = gtk_check_button_new_with_label("Hires Framebuffer"); gtk_container_add(GTK_CONTAINER(renderingContainer), hiresFbCheckButton); // Swap Container GtkWidget *swapContainer; swapContainer = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(renderingContainer), swapContainer); // Swap Combo GtkWidget *swapCombo; swapCombo = gtk_combo_new(); gtk_entry_set_editable(GTK_ENTRY(GTK_COMBO(swapCombo)->entry), FALSE); gtk_container_add(GTK_CONTAINER(swapContainer), swapCombo); // Swap Label GtkWidget *swapLabel; swapLabel = gtk_label_new("Buffer swapping method"); gtk_container_add(GTK_CONTAINER(swapContainer), swapLabel); // Rendering Frame GtkWidget *wrapperFrame; wrapperFrame = gtk_frame_new("Glide wrapper"); gtk_container_add(GTK_CONTAINER(vContainer), wrapperFrame); // Wrapper Container GtkWidget *wrapperContainer; wrapperContainer = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(wrapperFrame), wrapperContainer); // no dithered alpha CheckButton GtkWidget *noDitheredAlphaCheckButton; noDitheredAlphaCheckButton = gtk_check_button_new_with_label("Disable Dithered Alpha"); gtk_container_add(GTK_CONTAINER(wrapperContainer), noDitheredAlphaCheckButton); // no glsl CheckButton GtkWidget *noGLSLCheckButton; noGLSLCheckButton = gtk_check_button_new_with_label("Disable GLSL Combiners"); gtk_container_add(GTK_CONTAINER(wrapperContainer), noGLSLCheckButton); // FBO CheckButton GtkWidget *hiresFBOCheckButton; hiresFBOCheckButton = gtk_check_button_new_with_label("Use Framebuffer Objects"); gtk_container_add(GTK_CONTAINER(wrapperContainer), hiresFBOCheckButton); // Other Frame GtkWidget *otherFrame; otherFrame = gtk_frame_new("Other"); gtk_container_add(GTK_CONTAINER(vContainer), otherFrame); // Custom ini CheckButton GtkWidget *customIniCheckButton; customIniCheckButton = gtk_check_button_new_with_label("Custom ini settings"); gtk_container_add(GTK_CONTAINER(otherFrame), customIniCheckButton); // vertical container vContainer = gtk_vbox_new(0, 0); gtk_container_add(GTK_CONTAINER(hContainer), vContainer); // Special Fixes Frame GtkWidget *specialFrame; specialFrame = gtk_frame_new("Special Fixes"); gtk_container_add(GTK_CONTAINER(vContainer), specialFrame); // Special Fixes Container GtkWidget *specialContainer; specialContainer = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(specialFrame), specialContainer); // Wrap CheckButton GtkWidget *wrapCheckButton; wrapCheckButton = gtk_check_button_new_with_label("Wrap textures too big for tmem"); gtk_container_add(GTK_CONTAINER(specialContainer), wrapCheckButton); // Corona CheckButton GtkWidget *coronaCheckButton; coronaCheckButton = gtk_check_button_new_with_label("Zelda. Corona fix"); gtk_container_add(GTK_CONTAINER(specialContainer), coronaCheckButton); // Frame Buffer Frame GtkWidget *framebufferFrame; framebufferFrame = gtk_frame_new("Frame buffer emulation options"); gtk_container_add(GTK_CONTAINER(vContainer), framebufferFrame); // Frame Buffer Container GtkWidget *framebufferContainer; framebufferContainer = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(framebufferFrame), framebufferContainer); // Read All CheckButton GtkWidget *readAllCheckButton; readAllCheckButton = gtk_check_button_new_with_label("Read every frame (slow!)"); gtk_container_add(GTK_CONTAINER(framebufferContainer), readAllCheckButton); // CPU Write Hack CheckButton GtkWidget *CPUWriteHackCheckButton; CPUWriteHackCheckButton = gtk_check_button_new_with_label("Detect CPU writes"); gtk_container_add(GTK_CONTAINER(framebufferContainer), CPUWriteHackCheckButton); // FB Get Info CheckButton GtkWidget *FBGetInfoCheckButton; FBGetInfoCheckButton = gtk_check_button_new_with_label("Get frame buffer info"); gtk_container_add(GTK_CONTAINER(framebufferContainer), FBGetInfoCheckButton); // Depth Render CheckButton GtkWidget *DepthRenderCheckButton; DepthRenderCheckButton = gtk_check_button_new_with_label("Depth buffer render"); gtk_container_add(GTK_CONTAINER(framebufferContainer), DepthRenderCheckButton); // Speed Frame GtkWidget *speedFrame; speedFrame = gtk_frame_new("Speed"); gtk_container_add(GTK_CONTAINER(vContainer), speedFrame); // Speed Container GtkWidget *speedContainer; speedContainer = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(speedFrame), speedContainer); // FPS CheckButton GtkWidget *FPSCheckButton; FPSCheckButton = gtk_check_button_new_with_label("FPS counter"); gtk_container_add(GTK_CONTAINER(speedContainer), FPSCheckButton); // VI CheckButton GtkWidget *VICheckButton; VICheckButton = gtk_check_button_new_with_label("VI/s counter"); gtk_container_add(GTK_CONTAINER(speedContainer), VICheckButton); // ratio CheckButton GtkWidget *ratioCheckButton; ratioCheckButton = gtk_check_button_new_with_label("% speed"); gtk_container_add(GTK_CONTAINER(speedContainer), ratioCheckButton); // FPS trans CheckButton GtkWidget *FPStransCheckButton; FPStransCheckButton = gtk_check_button_new_with_label("FPS transparent"); gtk_container_add(GTK_CONTAINER(speedContainer), FPStransCheckButton); // Time Frame GtkWidget *timeFrame; timeFrame = gtk_frame_new("Time"); gtk_container_add(GTK_CONTAINER(vContainer), timeFrame); // Time Container GtkWidget *timeContainer; timeContainer = gtk_vbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(timeFrame), timeContainer); // clock CheckButton GtkWidget *clockCheckButton; clockCheckButton = gtk_check_button_new_with_label("Clock enabled"); gtk_container_add(GTK_CONTAINER(timeContainer), clockCheckButton); // clock24 CheckButton GtkWidget *clock24CheckButton; clock24CheckButton = gtk_check_button_new_with_label("Clock is 24-hour"); gtk_container_add(GTK_CONTAINER(timeContainer), clock24CheckButton); // Filling lists // windowResCombo list GList *windowResComboList = NULL; windowResComboList = g_list_append(windowResComboList, (void*)"320x200"); windowResComboList = g_list_append(windowResComboList, (void*)"320x240"); windowResComboList = g_list_append(windowResComboList, (void*)"400x256"); windowResComboList = g_list_append(windowResComboList, (void*)"512x384"); windowResComboList = g_list_append(windowResComboList, (void*)"640x200"); windowResComboList = g_list_append(windowResComboList, (void*)"640x350"); windowResComboList = g_list_append(windowResComboList, (void*)"640x400"); windowResComboList = g_list_append(windowResComboList, (void*)"640x480"); windowResComboList = g_list_append(windowResComboList, (void*)"800x600"); windowResComboList = g_list_append(windowResComboList, (void*)"960x720"); windowResComboList = g_list_append(windowResComboList, (void*)"856x480"); windowResComboList = g_list_append(windowResComboList, (void*)"512x256"); windowResComboList = g_list_append(windowResComboList, (void*)"1024x768"); windowResComboList = g_list_append(windowResComboList, (void*)"1280x1024"); windowResComboList = g_list_append(windowResComboList, (void*)"1600x1200"); windowResComboList = g_list_append(windowResComboList, (void*)"400x300"); windowResComboList = g_list_append(windowResComboList, (void*)"1152x864"); windowResComboList = g_list_append(windowResComboList, (void*)"1280x960"); windowResComboList = g_list_append(windowResComboList, (void*)"1600x1024"); windowResComboList = g_list_append(windowResComboList, (void*)"1792x1344"); windowResComboList = g_list_append(windowResComboList, (void*)"1856x1392"); windowResComboList = g_list_append(windowResComboList, (void*)"1920x1440"); windowResComboList = g_list_append(windowResComboList, (void*)"2048x1536"); windowResComboList = g_list_append(windowResComboList, (void*)"2048x2048"); gtk_combo_set_popdown_strings(GTK_COMBO(windowResCombo), windowResComboList); // fullResCombo list gtk_combo_set_popdown_strings(GTK_COMBO(fullResCombo), windowResComboList); // texFilterCombo list GList *texFilterComboList = NULL; texFilterComboList = g_list_append(texFilterComboList, (void*)"None"); texFilterComboList = g_list_append(texFilterComboList, (void*)"Blur edges"); texFilterComboList = g_list_append(texFilterComboList, (void*)"Super 2xSai"); texFilterComboList = g_list_append(texFilterComboList, (void*)"Hq2x"); texFilterComboList = g_list_append(texFilterComboList, (void*)"Hq4x"); gtk_combo_set_popdown_strings(GTK_COMBO(texFilterCombo), texFilterComboList); // forceCombo list GList *forceComboList = NULL; forceComboList = g_list_append(forceComboList, (void*)"0: RSP SW 2.0X (ex. Mario)"); forceComboList = g_list_append(forceComboList, (void*)"1: F3DEX 1.XX (ex. Star Fox)"); forceComboList = g_list_append(forceComboList, (void*)"2: F3DEX 2.XX (ex. Zelda OOT)"); forceComboList = g_list_append(forceComboList, (void*)"3: RSP SW 2.0D EXT (ex. Waverace)"); forceComboList = g_list_append(forceComboList, (void*)"4: RSP SW 2.0D EXT (ex. Shadows of the Empire)"); forceComboList = g_list_append(forceComboList, (void*)"5: RSP SW 2.0 (ex. Diddy Kong Racing)"); forceComboList = g_list_append(forceComboList, (void*)"6: S2DEX 1.XX (ex. Yoshi's Story)"); forceComboList = g_list_append(forceComboList, (void*)"7: RSP SW PD Perfect Dark"); forceComboList = g_list_append(forceComboList, (void*)"8: F3DEXBG 2.08 Conker's Bad Fur Day"); gtk_combo_set_popdown_strings(GTK_COMBO(forceCombo), forceComboList); // filterCombo list GList *filterComboList = NULL; filterComboList = g_list_append(filterComboList, (void*)"Automatic"); filterComboList = g_list_append(filterComboList, (void*)"Force Bilinear"); filterComboList = g_list_append(filterComboList, (void*)"Force Point-sampled"); gtk_combo_set_popdown_strings(GTK_COMBO(filterCombo), filterComboList); // lodCombo list GList *lodComboList = NULL; lodComboList = g_list_append(lodComboList, (void*)"Off"); lodComboList = g_list_append(lodComboList, (void*)"Fast"); lodComboList = g_list_append(lodComboList, (void*)"Precise"); gtk_combo_set_popdown_strings(GTK_COMBO(lodCombo), lodComboList); // swapCombo list GList *swapComboList = NULL; swapComboList = g_list_append(swapComboList, (void*)"old"); swapComboList = g_list_append(swapComboList, (void*)"new"); swapComboList = g_list_append(swapComboList, (void*)"hybrid"); gtk_combo_set_popdown_strings(GTK_COMBO(swapCombo), swapComboList); // ConfigDialog structure creation ConfigDialog *configDialog = new ConfigDialog; // signal callbacks gtk_signal_connect_object(GTK_OBJECT(dialog), "delete-event", GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), GTK_OBJECT(dialog)); gtk_signal_connect(GTK_OBJECT(customIniCheckButton), "clicked", GTK_SIGNAL_FUNC(customIniCheckButtonCallback), (void*)configDialog); gtk_signal_connect(GTK_OBJECT(okButton), "clicked", GTK_SIGNAL_FUNC(okButtonCallback), (void*)configDialog); gtk_signal_connect_object(GTK_OBJECT(cancelButton), "clicked", GTK_SIGNAL_FUNC(gtk_widget_hide), GTK_OBJECT(dialog)); // Outputing ConfigDialog structure configDialog->dialog = dialog; configDialog->autodetectCheckButton = autodetectCheckButton; configDialog->forceCombo = forceCombo; configDialog->windowResCombo = windowResCombo; configDialog->fullResCombo = fullResCombo; configDialog->texFilterCombo = texFilterCombo; configDialog->filterCombo = filterCombo; configDialog->lodCombo = lodCombo; configDialog->fogCheckButton = fogCheckButton; configDialog->bufferClearCheckButton = bufferClearCheckButton; configDialog->vSyncCheckButton = vSyncCheckButton; configDialog->fastcrcCheckButton = fastcrcCheckButton; configDialog->noDitheredAlphaCheckButton = noDitheredAlphaCheckButton; configDialog->noGLSLCheckButton = noGLSLCheckButton; configDialog->hiresFbCheckButton = hiresFbCheckButton; configDialog->hiresFBOCheckButton = hiresFBOCheckButton; configDialog->swapCombo = swapCombo; configDialog->customIniCheckButton = customIniCheckButton; configDialog->wrapCheckButton = wrapCheckButton; configDialog->coronaCheckButton = coronaCheckButton; configDialog->readAllCheckButton = readAllCheckButton; configDialog->CPUWriteHackCheckButton = CPUWriteHackCheckButton; configDialog->FBGetInfoCheckButton = FBGetInfoCheckButton; configDialog->DepthRenderCheckButton = DepthRenderCheckButton; configDialog->FPSCheckButton = FPSCheckButton; configDialog->VICheckButton = VICheckButton; configDialog->ratioCheckButton = ratioCheckButton; configDialog->FPStransCheckButton = FPStransCheckButton; configDialog->clockCheckButton = clockCheckButton; configDialog->clock24CheckButton = clock24CheckButton; configDialog->windowResComboList = windowResComboList; configDialog->texFilterComboList = texFilterComboList; configDialog->forceComboList = forceComboList; configDialog->filterComboList = filterComboList; configDialog->lodComboList = lodComboList; configDialog->swapComboList = swapComboList; return configDialog; } void CALL DllConfig ( HWND hParent ) { static ConfigDialog *configDialog = NULL; if (configDialog == NULL) configDialog = CreateConfigDialog(); ReadSettings (); char name[21] = "DEFAULT"; ReadSpecialSettings (name); if (gfx.HEADER) { // get the name of the ROM for (int i=0; i<20; i++) name[i] = gfx.HEADER[(32+i)^3]; name[20] = 0; // remove all trailing spaces while (name[strlen(name)-1] == ' ') name[strlen(name)-1] = 0; ReadSpecialSettings (name); } gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->windowResCombo)->entry), (gchar*)g_list_nth_data(configDialog->windowResComboList, settings.res_data)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->fullResCombo)->entry), (gchar*)g_list_nth_data(configDialog->windowResComboList, settings.full_res)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->texFilterCombo)->entry), (gchar*)g_list_nth_data(configDialog->texFilterComboList, settings.tex_filter)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->forceCombo)->entry), (gchar*)g_list_nth_data(configDialog->forceComboList, settings.ucode)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->filterCombo)->entry), (gchar*)g_list_nth_data(configDialog->filterComboList, settings.filtering)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->lodCombo)->entry), (gchar*)g_list_nth_data(configDialog->lodComboList, settings.lodmode)); gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(configDialog->swapCombo)->entry), (gchar*)g_list_nth_data(configDialog->swapComboList, settings.swapmode)); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->fogCheckButton), settings.fog); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->bufferClearCheckButton), settings.buff_clear); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->autodetectCheckButton), settings.autodetect_ucode); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->wrapCheckButton), settings.wrap_big_tex); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->coronaCheckButton), settings.flame_corona); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->vSyncCheckButton), settings.vsync); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->fastcrcCheckButton), settings.fast_crc); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->noDitheredAlphaCheckButton), settings.noditheredalpha); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->noGLSLCheckButton), settings.noglsl); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->hiresFbCheckButton), settings.fb_hires); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->hiresFBOCheckButton), settings.FBO); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->readAllCheckButton), settings.fb_read_always); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->CPUWriteHackCheckButton), settings.cpu_write_hack); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->FBGetInfoCheckButton), settings.fb_get_info); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->DepthRenderCheckButton), settings.fb_depth_render); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->customIniCheckButton), settings.custom_ini); BOOL enable = !settings.custom_ini; gtk_widget_set_sensitive(configDialog->filterCombo, enable); gtk_widget_set_sensitive(configDialog->lodCombo, enable); gtk_widget_set_sensitive(configDialog->fogCheckButton, enable); gtk_widget_set_sensitive(configDialog->bufferClearCheckButton, enable); gtk_widget_set_sensitive(configDialog->swapCombo, enable); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->FPSCheckButton), settings.show_fps&1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->VICheckButton), settings.show_fps&2); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->ratioCheckButton), settings.show_fps&4); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->FPStransCheckButton), settings.show_fps&8); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->clockCheckButton), settings.clock); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(configDialog->clock24CheckButton), settings.clock_24_hr); gtk_widget_show_all(configDialog->dialog); } #endif // _WIN32