From: S?bastien G. <kx...@us...> - 2004-04-26 23:42:38
|
Update of /cvsroot/vba/VisualBoyAdvance/src/gtk In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16698 Modified Files: input.h vba.glade window.cpp window.h Log Message: Added Gameboy menu support. Index: input.h =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/input.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** input.h 29 Mar 2004 22:08:40 -0000 1.1 --- input.h 26 Apr 2004 23:42:27 -0000 1.2 *************** *** 28,46 **** enum EKey { ! KEY_NONE, // GBA keys ! KEY_A, ! KEY_B, ! KEY_SELECT, ! KEY_START, ! KEY_RIGHT, ! KEY_LEFT, ! KEY_UP, ! KEY_DOWN, ! KEY_R, ! KEY_L, // VBA extension ! KEY_SPEED, ! KEY_CAPTURE }; --- 28,46 ---- enum EKey { ! KeyNone, // GBA keys ! KeyA, ! KeyB, ! KeySelect, ! KeyStart, ! KeyRight, ! KeyLeft, ! KeyUp, ! KeyDown, ! KeyR, ! KeyL, // VBA extension ! KeySpeed, ! KeyCapture }; *************** *** 48,64 **** { // GBA keys ! KEYFLAG_A = 1 << 0, ! KEYFLAG_B = 1 << 1, ! KEYFLAG_SELECT = 1 << 2, ! KEYFLAG_START = 1 << 3, ! KEYFLAG_RIGHT = 1 << 4, ! KEYFLAG_LEFT = 1 << 5, ! KEYFLAG_UP = 1 << 6, ! KEYFLAG_DOWN = 1 << 7, ! KEYFLAG_R = 1 << 8, ! KEYFLAG_L = 1 << 9, // VBA extension ! KEYFLAG_SPEED = 1 << 10, ! KEYFLAG_CAPTURE = 1 << 11, }; --- 48,64 ---- { // GBA keys ! KeyFlagA = 1 << 0, ! KeyFlagB = 1 << 1, ! KeyFlagSelect = 1 << 2, ! KeyFlagStart = 1 << 3, ! KeyFlagRight = 1 << 4, ! KeyFlagLeft = 1 << 5, ! KeyFlagUp = 1 << 6, ! KeyFlagDown = 1 << 7, ! KeyFlagR = 1 << 8, ! KeyFlagL = 1 << 9, // VBA extension ! KeyFlagSpeed = 1 << 10, ! KeyFlagCapture = 1 << 11, }; Index: vba.glade =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/vba.glade,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** vba.glade 22 Apr 2004 20:42:40 -0000 1.5 --- vba.glade 26 Apr 2004 23:42:27 -0000 1.6 *************** *** 1088,1092 **** <child> ! <widget class="GtkRadioMenuItem" id="GameBoyGba"> <property name="visible">True</property> <property name="label" translatable="yes">_GBA</property> --- 1088,1092 ---- <child> ! <widget class="GtkRadioMenuItem" id="GameboyGba"> <property name="visible">True</property> <property name="label" translatable="yes">_GBA</property> Index: window.h =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/window.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** window.h 26 Apr 2004 00:13:50 -0000 1.8 --- window.h 26 Apr 2004 23:42:28 -0000 1.9 *************** *** 110,113 **** --- 110,123 ---- }; + enum EEmulatorType + { + EmulatorAuto, + EmulatorCGB, + EmulatorSGB, + EmulatorGB, + EmulatorGBA, + EmulatorSGB2 + }; + virtual void vOnFileOpen(); virtual void vOnFilePauseToggled(Gtk::CheckMenuItem * _poCMI); *************** *** 132,135 **** --- 142,148 ---- virtual void vOnSoundQualityToggled(Gtk::CheckMenuItem * _poCMI, int _iSoundQuality); virtual void vOnSoundVolumeToggled(Gtk::CheckMenuItem * _poCMI, int _iSoundVolume); + virtual void vOnGBBorderToggled(Gtk::CheckMenuItem * _poCMI); + virtual void vOnGBPrinterToggled(Gtk::CheckMenuItem * _poCMI); + virtual void vOnEmulatorTypeToggled(Gtk::CheckMenuItem * _poCMI, int _iEmulatorType); virtual void vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x); virtual void vOnFilterIBToggled(Gtk::CheckMenuItem * _poCMI, int _iFilterIB); *************** *** 162,165 **** --- 175,180 ---- const int m_iSoundVolumeMin; const int m_iSoundVolumeMax; + const int m_iEmulatorTypeMin; + const int m_iEmulatorTypeMax; const int m_iFilter2xMin; const int m_iFilter2xMax; Index: window.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/window.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** window.cpp 26 Apr 2004 00:13:50 -0000 1.8 --- window.cpp 26 Apr 2004 23:42:27 -0000 1.9 *************** *** 27,30 **** --- 27,31 ---- #include "../gb/GB.h" #include "../gb/gbGlobals.h" + #include "../gb/gbPrinter.h" #include "../Sound.h" #include "../Util.h" *************** *** 71,74 **** --- 72,77 ---- m_iSoundVolumeMin (Sound100), m_iSoundVolumeMax (Sound50), + m_iEmulatorTypeMin(EmulatorAuto), + m_iEmulatorTypeMax(EmulatorSGB2), m_iFilter2xMin (FirstFilter), m_iFilter2xMax (LastFilter), *************** *** 508,511 **** --- 511,558 ---- } + // Gameboy menu + // + poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget("GameboyBorder")); + poCMI->set_active(m_poCoreConfig->oGetKey<bool>("gb_border")); + vOnGBBorderToggled(poCMI); + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *>( + SigC::slot(*this, &Window::vOnGBBorderToggled), + poCMI)); + + poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget("GameboyPrinter")); + poCMI->set_active(m_poCoreConfig->oGetKey<bool>("gb_printer")); + vOnGBPrinterToggled(poCMI); + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *>( + SigC::slot(*this, &Window::vOnGBPrinterToggled), + poCMI)); + + struct + { + const char * m_csName; + const EEmulatorType m_eEmulatorType; + } + astEmulatorType[] = + { + { "GameboyAutomatic", EmulatorAuto }, + { "GameboyGba", EmulatorGBA }, + { "GameboyCgb", EmulatorCGB }, + { "GameboySgb", EmulatorSGB }, + { "GameboySgb2", EmulatorSGB2 }, + { "GameboyGb", EmulatorGB } + }; + EEmulatorType eDefaultEmulatorType = (EEmulatorType)m_poCoreConfig->oGetKey<int>("emulator_type"); + for (guint i = 0; i < sizeof(astEmulatorType) / sizeof(astEmulatorType[0]); i++) + { + poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astEmulatorType[i].m_csName)); + if (astEmulatorType[i].m_eEmulatorType == eDefaultEmulatorType) + { + poCMI->set_active(); + vOnEmulatorTypeToggled(poCMI, eDefaultEmulatorType); + } + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( + SigC::slot(*this, &Window::vOnEmulatorTypeToggled), + poCMI, astEmulatorType[i].m_eEmulatorType)); + } + // Filter menu // *************** *** 659,663 **** gbFrameSkip = 0; ! // TODO : GB init and 16-bit color map (?) } --- 706,717 ---- gbFrameSkip = 0; ! ! for (int i = 0; i < 24; ) ! { ! systemGbPalette[i++] = (0x1f) | (0x1f << 5) | (0x1f << 10); ! systemGbPalette[i++] = (0x15) | (0x15 << 5) | (0x15 << 10); ! systemGbPalette[i++] = (0x0c) | (0x0c << 5) | (0x0c << 10); ! systemGbPalette[i++] = 0; ! } } *************** *** 687,714 **** // m_poCoreConfig = m_oConfig.poAddSection("Core"); ! m_poCoreConfig->vSetKey ("frameskip", "auto" ); ! m_poCoreConfig->vSetKey ("throttle", 0 ); ! m_poCoreConfig->vSetKey ("layer_bg0", true ); ! m_poCoreConfig->vSetKey ("layer_bg1", true ); ! m_poCoreConfig->vSetKey ("layer_bg2", true ); ! m_poCoreConfig->vSetKey ("layer_bg3", true ); ! m_poCoreConfig->vSetKey ("layer_obj", true ); ! m_poCoreConfig->vSetKey ("layer_win0", true ); ! m_poCoreConfig->vSetKey ("layer_win1", true ); ! m_poCoreConfig->vSetKey ("layer_objwin", true ); ! m_poCoreConfig->vSetKey ("use_bios_file", false ); ! m_poCoreConfig->vSetKey ("bios_file", "" ); ! m_poCoreConfig->vSetKey<int>("save_type", SaveAuto ); ! m_poCoreConfig->vSetKey<int>("flash_size", 64 ); // Display section // m_poDisplayConfig = m_oConfig.poAddSection("Display"); ! m_poDisplayConfig->vSetKey ("scale", 1 ); ! m_poDisplayConfig->vSetKey<int>("show_speed", ShowPercentage ); ! m_poDisplayConfig->vSetKey<int>("filter2x", FilterNone ); ! m_poDisplayConfig->vSetKey<int>("filterIB", FilterIBNone ); #ifdef MMX ! m_poDisplayConfig->vSetKey ("filter_disable_mmx", false ); #endif // MMX --- 741,771 ---- // m_poCoreConfig = m_oConfig.poAddSection("Core"); ! m_poCoreConfig->vSetKey("frameskip", "auto" ); ! m_poCoreConfig->vSetKey("throttle", 0 ); ! m_poCoreConfig->vSetKey("layer_bg0", true ); ! m_poCoreConfig->vSetKey("layer_bg1", true ); ! m_poCoreConfig->vSetKey("layer_bg2", true ); ! m_poCoreConfig->vSetKey("layer_bg3", true ); ! m_poCoreConfig->vSetKey("layer_obj", true ); ! m_poCoreConfig->vSetKey("layer_win0", true ); ! m_poCoreConfig->vSetKey("layer_win1", true ); ! m_poCoreConfig->vSetKey("layer_objwin", true ); ! m_poCoreConfig->vSetKey("use_bios_file", false ); ! m_poCoreConfig->vSetKey("bios_file", "" ); ! m_poCoreConfig->vSetKey("save_type", SaveAuto ); ! m_poCoreConfig->vSetKey("flash_size", 64 ); ! m_poCoreConfig->vSetKey("gb_border", true ); ! m_poCoreConfig->vSetKey("gb_printer", false ); ! m_poCoreConfig->vSetKey("emulator_type", EmulatorAuto ); // Display section // m_poDisplayConfig = m_oConfig.poAddSection("Display"); ! m_poDisplayConfig->vSetKey("scale", 1 ); ! m_poDisplayConfig->vSetKey("show_speed", ShowPercentage ); ! m_poDisplayConfig->vSetKey("filter2x", FilterNone ); ! m_poDisplayConfig->vSetKey("filterIB", FilterIBNone ); #ifdef MMX ! m_poDisplayConfig->vSetKey("filter_disable_mmx", false ); #endif // MMX *************** *** 784,787 **** --- 841,851 ---- } + iValue = m_poCoreConfig->oGetKey<int>("emulator_type"); + iAdjusted = CLAMP(iValue, m_iEmulatorTypeMin, m_iEmulatorTypeMax); + if (iValue != iAdjusted) + { + m_poCoreConfig->vSetKey("emulator_type", iAdjusted); + } + // Display section // *************** *** 873,896 **** // TODO : load from prefs ! m_oKeymap.vRegister(GDK_z, KEY_A); ! m_oKeymap.vRegister(GDK_Z, KEY_A); ! m_oKeymap.vRegister(GDK_x, KEY_B); ! m_oKeymap.vRegister(GDK_X, KEY_B); ! m_oKeymap.vRegister(GDK_BackSpace, KEY_SELECT); ! m_oKeymap.vRegister(GDK_Return, KEY_START); ! m_oKeymap.vRegister(GDK_Right, KEY_RIGHT); ! m_oKeymap.vRegister(GDK_Left, KEY_LEFT); ! m_oKeymap.vRegister(GDK_Up, KEY_UP); ! m_oKeymap.vRegister(GDK_Down, KEY_DOWN); ! m_oKeymap.vRegister(GDK_s, KEY_R); ! m_oKeymap.vRegister(GDK_S, KEY_R); ! m_oKeymap.vRegister(GDK_a, KEY_L); ! m_oKeymap.vRegister(GDK_A, KEY_L); ! m_oKeymap.vRegister(GDK_space, KEY_SPEED); ! m_oKeymap.vRegister(GDK_F12, KEY_CAPTURE); } void Window::vUpdateScreen() { g_return_if_fail(m_iScreenWidth >= 1 && m_iScreenHeight >= 1); --- 937,985 ---- // TODO : load from prefs ! m_oKeymap.vRegister(GDK_z, KeyA); ! m_oKeymap.vRegister(GDK_Z, KeyA); ! m_oKeymap.vRegister(GDK_x, KeyB); ! m_oKeymap.vRegister(GDK_X, KeyB); ! m_oKeymap.vRegister(GDK_BackSpace, KeySelect); ! m_oKeymap.vRegister(GDK_Return, KeyStart); ! m_oKeymap.vRegister(GDK_Right, KeyRight); ! m_oKeymap.vRegister(GDK_Left, KeyLeft); ! m_oKeymap.vRegister(GDK_Up, KeyUp); ! m_oKeymap.vRegister(GDK_Down, KeyDown); ! m_oKeymap.vRegister(GDK_s, KeyR); ! m_oKeymap.vRegister(GDK_S, KeyR); ! m_oKeymap.vRegister(GDK_a, KeyL); ! m_oKeymap.vRegister(GDK_A, KeyL); ! m_oKeymap.vRegister(GDK_space, KeySpeed); ! m_oKeymap.vRegister(GDK_F12, KeyCapture); } void Window::vUpdateScreen() { + if (m_eCartridge == CartridgeGB) + { + if (gbBorderOn) + { + m_iScreenWidth = m_iSGBScreenWidth; + m_iScreenHeight = m_iSGBScreenHeight; + gbBorderLineSkip = m_iSGBScreenWidth; + gbBorderColumnSkip = (m_iSGBScreenWidth - m_iGBScreenWidth) / 2; + gbBorderRowSkip = (m_iSGBScreenHeight - m_iGBScreenHeight) / 2; + } + else + { + m_iScreenWidth = m_iGBScreenWidth; + m_iScreenHeight = m_iGBScreenHeight; + gbBorderLineSkip = m_iGBScreenWidth; + gbBorderColumnSkip = 0; + gbBorderRowSkip = 0; + } + } + else if (m_eCartridge == CartridgeGBA) + { + m_iScreenWidth = m_iGBAScreenWidth; + m_iScreenHeight = m_iGBAScreenHeight; + } + g_return_if_fail(m_iScreenWidth >= 1 && m_iScreenHeight >= 1); *************** *** 1053,1073 **** // } //} - - if (gbBorderOn) - { - m_iScreenWidth = m_iSGBScreenWidth; - m_iScreenHeight = m_iSGBScreenHeight; - gbBorderLineSkip = m_iSGBScreenWidth; - gbBorderColumnSkip = (m_iSGBScreenWidth - m_iGBScreenWidth) / 2; - gbBorderRowSkip = (m_iSGBScreenHeight - m_iGBScreenHeight) / 2; - } - else - { - m_iScreenWidth = m_iGBScreenWidth; - m_iScreenHeight = m_iGBScreenHeight; - gbBorderLineSkip = m_iGBScreenWidth; - gbBorderColumnSkip = 0; - gbBorderRowSkip = 0; - } } } --- 1142,1145 ---- *************** *** 1102,1108 **** // } //} - - m_iScreenWidth = m_iGBAScreenWidth; - m_iScreenHeight = m_iGBAScreenHeight; } } --- 1174,1177 ---- *************** *** 1301,1304 **** --- 1370,1374 ---- { m_poCoreConfig->vSetKey("frameskip", "auto"); + gbFrameSkip = 0; systemFrameSkip = 0; m_bAutoFrameskip = true; *************** *** 1584,1587 **** --- 1654,1687 ---- } + void Window::vOnGBBorderToggled(Gtk::CheckMenuItem * _poCMI) + { + gbBorderOn = _poCMI->get_active(); + if (emulating && m_eCartridge == CartridgeGB && _poCMI->get_active()) + { + gbSgbRenderBorder(); + } + vUpdateScreen(); + m_poCoreConfig->vSetKey("gb_border", _poCMI->get_active()); + } + + void Window::vOnGBPrinterToggled(Gtk::CheckMenuItem * _poCMI) + { + if (_poCMI->get_active()) + { + gbSerialFunction = gbPrinterSend; + } + else + { + gbSerialFunction = NULL; + } + m_poCoreConfig->vSetKey("gb_printer", _poCMI->get_active()); + } + + void Window::vOnEmulatorTypeToggled(Gtk::CheckMenuItem * _poCMI, int _iEmulatorType) + { + gbEmulatorType = _iEmulatorType; + m_poCoreConfig->vSetKey("emulator_type", _iEmulatorType); + } + void Window::vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x) { *************** *** 1661,1665 **** if ((_pstEvent->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)) ! || (eKey = m_oKeymap.eGetKey(_pstEvent->keyval)) == KEY_NONE) { return Gtk::Window::on_key_press_event(_pstEvent); --- 1761,1765 ---- if ((_pstEvent->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)) ! || (eKey = m_oKeymap.eGetKey(_pstEvent->keyval)) == KeyNone) { return Gtk::Window::on_key_press_event(_pstEvent); *************** *** 1668,1712 **** switch (eKey) { ! case KEY_A: ! m_uiJoypadState |= KEYFLAG_A; break; ! case KEY_B: ! m_uiJoypadState |= KEYFLAG_B; break; ! case KEY_SELECT: ! m_uiJoypadState |= KEYFLAG_SELECT; break; ! case KEY_START: ! m_uiJoypadState |= KEYFLAG_START; break; ! case KEY_RIGHT: ! m_uiJoypadState |= KEYFLAG_RIGHT; ! m_uiJoypadState &= ~KEYFLAG_LEFT; break; ! case KEY_LEFT: ! m_uiJoypadState |= KEYFLAG_LEFT; ! m_uiJoypadState &= ~KEYFLAG_RIGHT; break; ! case KEY_UP: ! m_uiJoypadState |= KEYFLAG_UP; ! m_uiJoypadState &= ~KEYFLAG_DOWN; break; ! case KEY_DOWN: ! m_uiJoypadState |= KEYFLAG_DOWN; ! m_uiJoypadState &= ~KEYFLAG_UP; break; ! case KEY_R: ! m_uiJoypadState |= KEYFLAG_R; break; ! case KEY_L: ! m_uiJoypadState |= KEYFLAG_L; break; ! case KEY_SPEED: ! m_uiJoypadState |= KEYFLAG_SPEED; break; ! case KEY_CAPTURE: ! m_uiJoypadState |= KEYFLAG_CAPTURE; break; ! case KEY_NONE: break; } --- 1768,1812 ---- switch (eKey) { ! case KeyA: ! m_uiJoypadState |= KeyFlagA; break; ! case KeyB: ! m_uiJoypadState |= KeyFlagB; break; ! case KeySelect: ! m_uiJoypadState |= KeyFlagSelect; break; ! case KeyStart: ! m_uiJoypadState |= KeyFlagStart; break; ! case KeyRight: ! m_uiJoypadState |= KeyFlagRight; ! m_uiJoypadState &= ~KeyFlagLeft; break; ! case KeyLeft: ! m_uiJoypadState |= KeyFlagLeft; ! m_uiJoypadState &= ~KeyFlagRight; break; ! case KeyUp: ! m_uiJoypadState |= KeyFlagUp; ! m_uiJoypadState &= ~KeyFlagDown; break; ! case KeyDown: ! m_uiJoypadState |= KeyFlagDown; ! m_uiJoypadState &= ~KeyFlagUp; break; ! case KeyR: ! m_uiJoypadState |= KeyFlagR; break; ! case KeyL: ! m_uiJoypadState |= KeyFlagL; break; ! case KeySpeed: ! m_uiJoypadState |= KeyFlagSpeed; break; ! case KeyCapture: ! m_uiJoypadState |= KeyFlagCapture; break; ! case KeyNone: break; } *************** *** 1719,1723 **** if ((_pstEvent->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)) ! || (eKey = m_oKeymap.eGetKey(_pstEvent->keyval)) == KEY_NONE) { return Gtk::Window::on_key_release_event(_pstEvent); --- 1819,1823 ---- if ((_pstEvent->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK)) ! || (eKey = m_oKeymap.eGetKey(_pstEvent->keyval)) == KeyNone) { return Gtk::Window::on_key_release_event(_pstEvent); *************** *** 1726,1766 **** switch (eKey) { ! case KEY_A: ! m_uiJoypadState &= ~KEYFLAG_A; break; ! case KEY_B: ! m_uiJoypadState &= ~KEYFLAG_B; break; ! case KEY_SELECT: ! m_uiJoypadState &= ~KEYFLAG_SELECT; break; ! case KEY_START: ! m_uiJoypadState &= ~KEYFLAG_START; break; ! case KEY_RIGHT: ! m_uiJoypadState &= ~KEYFLAG_RIGHT; break; ! case KEY_LEFT: ! m_uiJoypadState &= ~KEYFLAG_LEFT; break; ! case KEY_UP: ! m_uiJoypadState &= ~KEYFLAG_UP; break; ! case KEY_DOWN: ! m_uiJoypadState &= ~KEYFLAG_DOWN; break; ! case KEY_R: ! m_uiJoypadState &= ~KEYFLAG_R; break; ! case KEY_L: ! m_uiJoypadState &= ~KEYFLAG_L; break; ! case KEY_SPEED: ! m_uiJoypadState &= ~KEYFLAG_SPEED; break; ! case KEY_CAPTURE: ! m_uiJoypadState &= ~KEYFLAG_CAPTURE; break; ! case KEY_NONE: break; } --- 1826,1866 ---- switch (eKey) { ! case KeyA: ! m_uiJoypadState &= ~KeyFlagA; break; ! case KeyB: ! m_uiJoypadState &= ~KeyFlagB; break; ! case KeySelect: ! m_uiJoypadState &= ~KeyFlagSelect; break; ! case KeyStart: ! m_uiJoypadState &= ~KeyFlagStart; break; ! case KeyRight: ! m_uiJoypadState &= ~KeyFlagRight; break; ! case KeyLeft: ! m_uiJoypadState &= ~KeyFlagLeft; break; ! case KeyUp: ! m_uiJoypadState &= ~KeyFlagUp; break; ! case KeyDown: ! m_uiJoypadState &= ~KeyFlagDown; break; ! case KeyR: ! m_uiJoypadState &= ~KeyFlagR; break; ! case KeyL: ! m_uiJoypadState &= ~KeyFlagL; break; ! case KeySpeed: ! m_uiJoypadState &= ~KeyFlagSpeed; break; ! case KeyCapture: ! m_uiJoypadState &= ~KeyFlagCapture; break; ! case KeyNone: break; } |