From: S?bastien G. <kx...@us...> - 2004-04-12 23:13:17
|
Update of /cvsroot/vba/VisualBoyAdvance/src/gtk In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12974 Modified Files: system.cpp window.cpp window.h Log Message: A few fixes in the menu callbacks. Index: system.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/system.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** system.cpp 29 Mar 2004 22:08:40 -0000 1.1 --- system.cpp 12 Apr 2004 22:59:24 -0000 1.2 *************** *** 83,87 **** { char csTitle[50]; ! snprintf(csTitle, 50, "VisualBoyAdvance-%.3d%%", _iSpeed); gui()->set_title(csTitle); } --- 83,87 ---- { char csTitle[50]; ! snprintf(csTitle, 50, "VisualBoyAdvance-%d%%", _iSpeed); gui()->set_title(csTitle); } *************** *** 89,92 **** --- 89,93 ---- void system10Frames(int _iRate) { + gui()->vComputeFrameskip(_iRate); } Index: window.h =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/window.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** window.h 2 Apr 2004 01:22:17 -0000 1.2 --- window.h 12 Apr 2004 22:59:24 -0000 1.3 *************** *** 43,49 **** inline static Window * poGetInstance() { return m_poInstance; } - void vDrawScreen(); - inline u32 uiReadJoypad() { return m_uiJoypadState; } - enum ECartridge { --- 43,46 ---- *************** *** 53,71 **** }; inline ECartridge eGetCartridge() { return m_eCartridge; } protected: virtual void vOnFileOpen(); ! virtual void vOnFilePauseToggled(); virtual void vOnFileReset(); virtual void vOnFileClose(); virtual void vOnFileExit(); ! virtual void vOnFrameskipSelected(int _iValue); ! virtual void vOnThrottleSelected(int _iPercent); ! virtual void vOnThrottleOther(); virtual void vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer); ! virtual void vOnVideoScaleSelected(int _iScale); ! virtual void vOnFilter2xSelected(EFilter2x _eFilter2x); ! virtual void vOnFilterIBSelected(EFilterIB _eFilterIB); virtual void vOnHelpAbout(); virtual bool bOnEmuIdle(); --- 50,74 ---- }; + void vDrawScreen(); + void vComputeFrameskip(int _iRate); + inline u32 uiReadJoypad() { return m_uiJoypadState; } inline ECartridge eGetCartridge() { return m_eCartridge; } protected: virtual void vOnFileOpen(); ! virtual void vOnFilePauseToggled(Gtk::CheckMenuItem * _poCMI); virtual void vOnFileReset(); virtual void vOnFileClose(); virtual void vOnFileExit(); ! virtual void vOnFrameskipToggled(Gtk::CheckMenuItem * _poCMI, int _iValue); ! virtual void vOnThrottleToggled(Gtk::CheckMenuItem * _poCMI, int _iPercent); ! virtual void vOnThrottleOther(Gtk::CheckMenuItem * _poCMI); virtual void vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer); ! virtual void vOnVideoScaleToggled(Gtk::CheckMenuItem * _poCMI, int _iScale); ! virtual void vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x); ! virtual void vOnFilterIBToggled(Gtk::CheckMenuItem * _poCMI, int _iFilterIB); ! #ifdef MMX ! virtual void vOnDisableMMXToggled(Gtk::CheckMenuItem * _poCMI); ! #endif // MMX virtual void vOnHelpAbout(); virtual bool bOnEmuIdle(); *************** *** 91,94 **** --- 94,98 ---- SigC::Connection m_oEmuSig; + bool m_bPaused; std::string m_sRomFile; ECartridge m_eCartridge; *************** *** 117,121 **** void vStopEmu(); void vSetThrottle(int _iPercent); - void vSetLayer(int _iLayer, bool _bVisible); }; --- 121,124 ---- Index: window.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gtk/window.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** window.cpp 2 Apr 2004 01:22:17 -0000 1.2 --- window.cpp 12 Apr 2004 22:59:24 -0000 1.3 *************** *** 35,38 **** --- 35,42 ---- extern int RGB_LOW_BITS_MASK; + #ifdef MMX + extern "C" bool cpu_mmx; + #endif // MMX + namespace VBA { *************** *** 95,99 **** // m_poFilePauseItem = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget("FilePause")); ! m_poFilePauseItem->signal_toggled().connect(SigC::slot(*this, &Window::vOnFilePauseToggled)); poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("FileOpen")); --- 99,106 ---- // m_poFilePauseItem = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget("FilePause")); ! m_poFilePauseItem->set_active(false); ! m_poFilePauseItem->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *>( ! SigC::slot(*this, &Window::vOnFilePauseToggled), ! m_poFilePauseItem)); poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("FileOpen")); *************** *** 138,148 **** for (guint i = 0; i < sizeof(astFrameskip) / sizeof(astFrameskip[0]); i++) { ! poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(astFrameskip[i].m_csName)); ! poMI->signal_activate().connect(SigC::bind<int>(SigC::slot(*this, &Window::vOnFrameskipSelected), ! astFrameskip[i].m_iFrameskip)); if (astFrameskip[i].m_iFrameskip == iDefaultFrameskip) { ! poMI->activate(); } } --- 145,157 ---- for (guint i = 0; i < sizeof(astFrameskip) / sizeof(astFrameskip[0]); i++) { ! poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astFrameskip[i].m_csName)); if (astFrameskip[i].m_iFrameskip == iDefaultFrameskip) { ! poCMI->set_active(); ! vOnFrameskipToggled(poCMI, iDefaultFrameskip); } + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( + SigC::slot(*this, &Window::vOnFrameskipToggled), + poCMI, astFrameskip[i].m_iFrameskip)); } *************** *** 163,180 **** { "Throttle200", 200 } }; ! poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("ThrottleOther")); ! poMI->activate(); ! poMI->signal_activate().connect(SigC::slot(*this, &Window::vOnThrottleOther)); int iDefaultThrottle = m_poScreenConfig->oGetKey<int>("throttle"); for (guint i = 0; i < sizeof(astThrottle) / sizeof(astThrottle[0]); i++) { ! poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(astThrottle[i].m_csName)); if (astThrottle[i].m_iThrottle == iDefaultThrottle) { ! poMI->activate(); } ! poMI->signal_activate().connect(SigC::bind<int>(SigC::slot(*this, &Window::vOnThrottleSelected), ! astThrottle[i].m_iThrottle)); } vSetThrottle(iDefaultThrottle); --- 172,192 ---- { "Throttle200", 200 } }; ! poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget("ThrottleOther")); ! poCMI->set_active(); ! poCMI->signal_activate().connect(SigC::bind<Gtk::CheckMenuItem *>( ! SigC::slot(*this, &Window::vOnThrottleOther), ! poCMI)); int iDefaultThrottle = m_poScreenConfig->oGetKey<int>("throttle"); for (guint i = 0; i < sizeof(astThrottle) / sizeof(astThrottle[0]); i++) { ! poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astThrottle[i].m_csName)); if (astThrottle[i].m_iThrottle == iDefaultThrottle) { ! poCMI->set_active(); } ! poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( ! SigC::slot(*this, &Window::vOnThrottleToggled), ! poCMI, astThrottle[i].m_iThrottle)); } vSetThrottle(iDefaultThrottle); *************** *** 199,209 **** for (guint i = 0; i < sizeof(astVideoScale) / sizeof(astVideoScale[0]); i++) { ! poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(astVideoScale[i].m_csName)); ! poMI->signal_activate().connect(SigC::bind<int>(SigC::slot(*this, &Window::vOnVideoScaleSelected), ! astVideoScale[i].m_iScale)); if (astVideoScale[i].m_iScale == iDefaultScale) { ! poMI->activate(); } } --- 211,223 ---- for (guint i = 0; i < sizeof(astVideoScale) / sizeof(astVideoScale[0]); i++) { ! poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astVideoScale[i].m_csName)); if (astVideoScale[i].m_iScale == iDefaultScale) { ! poCMI->set_active(); ! vOnVideoScaleToggled(poCMI, iDefaultScale); } + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( + SigC::slot(*this, &Window::vOnVideoScaleToggled), + poCMI, astVideoScale[i].m_iScale)); } *************** *** 231,235 **** poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astLayer[i].m_csName)); poCMI->set_active(astLayer[i].m_bChecked); ! vSetLayer(astLayer[i].m_iLayer, astLayer[i].m_bChecked); poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( SigC::slot(*this, &Window::vOnLayerToggled), --- 245,249 ---- poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astLayer[i].m_csName)); poCMI->set_active(astLayer[i].m_bChecked); ! vOnLayerToggled(poCMI, astLayer[i].m_iLayer); poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( SigC::slot(*this, &Window::vOnLayerToggled), *************** *** 264,276 **** for (guint i = 0; i < sizeof(astFilter2x) / sizeof(astFilter2x[0]); i++) { ! poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(astFilter2x[i].m_csName)); ! poMI->signal_activate().connect(SigC::bind<EFilter2x>(SigC::slot(*this, &Window::vOnFilter2xSelected), ! astFilter2x[i].m_eFilter2x)); if (astFilter2x[i].m_eFilter2x == eDefaultFilter2x) { ! poMI->activate(); } } // Interframe blending menu // --- 278,304 ---- for (guint i = 0; i < sizeof(astFilter2x) / sizeof(astFilter2x[0]); i++) { ! poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astFilter2x[i].m_csName)); if (astFilter2x[i].m_eFilter2x == eDefaultFilter2x) { ! poCMI->set_active(); ! vOnFilter2xToggled(poCMI, eDefaultFilter2x); } + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( + SigC::slot(*this, &Window::vOnFilter2xToggled), + poCMI, astFilter2x[i].m_eFilter2x)); } + poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget("FilterDisableMmx")); + #ifdef MMX + poCMI->set_active(m_poScreenConfig->oGetKey<bool>("filter_disable_mmx")); + vOnDisableMMXToggled(poCMI); + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *>( + SigC::slot(*this, &Window::vOnDisableMMXToggled), + poCMI)); + #else // ! MMX + poCMI->set_active(); + poCMI->set_sensitive(false); + #endif // ! MMX + // Interframe blending menu // *************** *** 289,301 **** for (guint i = 0; i < sizeof(astFilterIB) / sizeof(astFilterIB[0]); i++) { ! poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget(astFilterIB[i].m_csName)); ! poMI->signal_activate().connect(SigC::bind<EFilterIB>(SigC::slot(*this, &Window::vOnFilterIBSelected), ! astFilterIB[i].m_eFilterIB)); if (astFilterIB[i].m_eFilterIB == eDefaultFilterIB) { ! poMI->activate(); } } poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("HelpAbout")); poMI->signal_activate().connect(SigC::slot(*this, &Window::vOnHelpAbout)); --- 317,333 ---- for (guint i = 0; i < sizeof(astFilterIB) / sizeof(astFilterIB[0]); i++) { ! poCMI = dynamic_cast<Gtk::CheckMenuItem *>(_poXml->get_widget(astFilterIB[i].m_csName)); if (astFilterIB[i].m_eFilterIB == eDefaultFilterIB) { ! poCMI->set_active(); ! vOnFilterIBToggled(poCMI, eDefaultFilterIB); } + poCMI->signal_toggled().connect(SigC::bind<Gtk::CheckMenuItem *, int>( + SigC::slot(*this, &Window::vOnFilterIBToggled), + poCMI, astFilterIB[i].m_eFilterIB)); } + // Help menu + // poMI = dynamic_cast<Gtk::MenuItem *>(_poXml->get_widget("HelpAbout")); poMI->signal_activate().connect(SigC::slot(*this, &Window::vOnHelpAbout)); *************** *** 394,410 **** m_poScreenConfig = m_oConfig.poAddSection("Screen"); ! m_poScreenConfig->vSetKey ("frameskip", "auto" ); ! m_poScreenConfig->vSetKey ("throttle", 0 ); ! m_poScreenConfig->vSetKey ("scale", 1 ); ! m_poScreenConfig->vSetKey ("layer_bg0", true ); ! m_poScreenConfig->vSetKey ("layer_bg1", true ); ! m_poScreenConfig->vSetKey ("layer_bg2", true ); ! m_poScreenConfig->vSetKey ("layer_bg3", true ); ! m_poScreenConfig->vSetKey ("layer_obj", true ); ! m_poScreenConfig->vSetKey ("layer_win0", true ); ! m_poScreenConfig->vSetKey ("layer_win1", true ); ! m_poScreenConfig->vSetKey ("layer_objwin", true ); ! m_poScreenConfig->vSetKey<int>("filter2x", FilterNone ); ! m_poScreenConfig->vSetKey<int>("filterIB", FilterIBNone ); } --- 426,445 ---- m_poScreenConfig = m_oConfig.poAddSection("Screen"); ! m_poScreenConfig->vSetKey ("frameskip", "auto" ); ! m_poScreenConfig->vSetKey ("throttle", 0 ); ! m_poScreenConfig->vSetKey ("scale", 1 ); ! m_poScreenConfig->vSetKey ("layer_bg0", true ); ! m_poScreenConfig->vSetKey ("layer_bg1", true ); ! m_poScreenConfig->vSetKey ("layer_bg2", true ); ! m_poScreenConfig->vSetKey ("layer_bg3", true ); ! m_poScreenConfig->vSetKey ("layer_obj", true ); ! m_poScreenConfig->vSetKey ("layer_win0", true ); ! m_poScreenConfig->vSetKey ("layer_win1", true ); ! m_poScreenConfig->vSetKey ("layer_objwin", true ); ! m_poScreenConfig->vSetKey<int>("filter2x", FilterNone ); ! m_poScreenConfig->vSetKey<int>("filterIB", FilterIBNone ); ! #ifdef MMX ! m_poScreenConfig->vSetKey ("filter_disable_mmx", false ); ! #endif // MMX } *************** *** 494,497 **** --- 529,596 ---- } + void Window::vComputeFrameskip(int _iRate) + { + #if 0 + u32 time = SDL_GetTicks(); + if(!wasPaused && autoFrameSkip && !throttle) { + u32 diff = time - autoFrameSkipLastTime; + int speed = 100; + + if(diff) + speed = (1000000/rate)/diff; + + if(speed >= 98) { + frameskipadjust++; + + if(frameskipadjust >= 3) { + frameskipadjust=0; + if(systemFrameSkip > 0) + systemFrameSkip--; + } + } else { + if(speed < 80) + frameskipadjust -= (90 - speed)/5; + else if(systemFrameSkip < 9) + frameskipadjust--; + + if(frameskipadjust <= -2) { + frameskipadjust += 2; + if(systemFrameSkip < 9) + systemFrameSkip++; + } + } + } + if(!wasPaused && throttle) { + if(!speedup) { + u32 diff = time - throttleLastTime; + + int target = (1000000/(rate*throttle)); + int d = (target - diff); + + if(d > 0) { + SDL_Delay(d); + } + } + throttleLastTime = systemGetClock(); + } + if(rewindMemory) { + if(++rewindCounter >= rewindTimer) { + rewindSaveNeeded = true; + rewindCounter = 0; + } + } + + if(systemSaveUpdateCounter) { + if(--systemSaveUpdateCounter <= SYSTEM_SAVE_NOT_UPDATED) { + sdlWriteBattery(); + systemSaveUpdateCounter = SYSTEM_SAVE_NOT_UPDATED; + } + } + + wasPaused = false; + autoFrameSkipLastTime = time; + #endif // 0 + } + bool Window::bLoadROM(const std::string & _rsFilename) { *************** *** 652,682 **** } - void Window::vSetLayer(int _iLayer, bool _bVisible) - { - int iMask = (0x0100 << _iLayer); - if (_bVisible) - { - layerSettings |= iMask; - } - else - { - layerSettings &= ~iMask; - } - layerEnable = DISPCNT & layerSettings; - - const char * acsLayers[] = - { - "layer_bg0", - "layer_bg1", - "layer_bg2", - "layer_bg3", - "layer_obj", - "layer_win0", - "layer_win1", - "layer_objwin" - }; - m_poScreenConfig->vSetKey(acsLayers[_iLayer], _bVisible); - } - void Window::vOnFileOpen() { --- 751,754 ---- *************** *** 687,692 **** } - m_poFileOpenDialog->show(); - while (m_poFileOpenDialog->run() == Gtk::RESPONSE_OK) { --- 759,762 ---- *************** *** 696,708 **** } } - m_poFileOpenDialog->hide(); } ! void Window::vOnFilePauseToggled() { if (emulating) { ! if (m_poFilePauseItem->get_active()) { vStopEmu(); --- 766,777 ---- } } m_poFileOpenDialog->hide(); } ! void Window::vOnFilePauseToggled(Gtk::CheckMenuItem * _poCMI) { if (emulating) { ! if (_poCMI->get_active()) { vStopEmu(); *************** *** 727,739 **** if (emulating) { vSaveBattery(); m_stEmulator.emuCleanUp(); emulating = 0; } - - m_eCartridge = NO_CARTRIDGE; - - vStopEmu(); - vDrawDefaultScreen(); } --- 796,806 ---- if (emulating) { + vStopEmu(); + vDrawDefaultScreen(); vSaveBattery(); m_stEmulator.emuCleanUp(); + m_eCartridge = NO_CARTRIDGE; emulating = 0; } } *************** *** 743,748 **** } ! void Window::vOnFrameskipSelected(int _iValue) { if (_iValue >= 0 && _iValue <= 9) { --- 810,820 ---- } ! void Window::vOnFrameskipToggled(Gtk::CheckMenuItem * _poCMI, int _iValue) { + if (! _poCMI->get_active()) + { + return; + } + if (_iValue >= 0 && _iValue <= 9) { *************** *** 759,774 **** } ! void Window::vOnThrottleSelected(int _iPercent) { vSetThrottle(_iPercent); } ! void Window::vOnThrottleOther() { // TODO } ! void Window::vOnVideoScaleSelected(int _iScale) { m_poScreenConfig->vSetKey("scale", _iScale); vUpdateScreen(); --- 831,861 ---- } ! void Window::vOnThrottleToggled(Gtk::CheckMenuItem * _poCMI, int _iPercent) { + if (! _poCMI->get_active()) + { + return; + } + vSetThrottle(_iPercent); } ! void Window::vOnThrottleOther(Gtk::CheckMenuItem * _poCMI) { + if (! _poCMI->get_active()) + { + return; + } + // TODO } ! void Window::vOnVideoScaleToggled(Gtk::CheckMenuItem * _poCMI, int _iScale) { + if (! _poCMI->get_active()) + { + return; + } + m_poScreenConfig->vSetKey("scale", _iScale); vUpdateScreen(); *************** *** 777,803 **** void Window::vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer) { ! vSetLayer(_iLayer, _poCMI->get_active()); } ! void Window::vOnFilter2xSelected(EFilter2x _eFilter2x) { ! m_poScreenArea->vSetFilter2x(_eFilter2x); if (emulating) { vDrawScreen(); } ! m_poScreenConfig->vSetKey<int>("filter2x", _eFilter2x); } ! void Window::vOnFilterIBSelected(EFilterIB _eFilterIB) { ! m_poScreenArea->vSetFilterIB(_eFilterIB); if (emulating) { vDrawScreen(); } ! m_poScreenConfig->vSetKey<int>("filterIB", _eFilterIB); } void Window::vOnHelpAbout() { --- 864,930 ---- void Window::vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer) { ! int iMask = (0x0100 << _iLayer); ! if (_poCMI->get_active()) ! { ! layerSettings |= iMask; ! } ! else ! { ! layerSettings &= ~iMask; ! } ! layerEnable = DISPCNT & layerSettings; ! ! const char * acsLayers[] = ! { ! "layer_bg0", ! "layer_bg1", ! "layer_bg2", ! "layer_bg3", ! "layer_obj", ! "layer_win0", ! "layer_win1", ! "layer_objwin" ! }; ! m_poScreenConfig->vSetKey(acsLayers[_iLayer], _poCMI->get_active()); } ! void Window::vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x) { ! if (! _poCMI->get_active()) ! { ! return; ! } ! ! m_poScreenArea->vSetFilter2x((EFilter2x)_iFilter2x); if (emulating) { vDrawScreen(); } ! m_poScreenConfig->vSetKey("filter2x", _iFilter2x); } ! void Window::vOnFilterIBToggled(Gtk::CheckMenuItem * _poCMI, int _iFilterIB) { ! if (! _poCMI->get_active()) ! { ! return; ! } ! ! m_poScreenArea->vSetFilterIB((EFilterIB)_iFilterIB); if (emulating) { vDrawScreen(); } ! m_poScreenConfig->vSetKey("filterIB", _iFilterIB); } + #ifdef MMX + void Window::vOnDisableMMXToggled(Gtk::CheckMenuItem * _poCMI) + { + cpu_mmx = ! _poCMI->get_active(); + m_poScreenConfig->vSetKey("filter_disable_mmx", _poCMI->get_active()); + } + #endif // MMX + void Window::vOnHelpAbout() { *************** *** 816,824 **** bool Window::bOnEmuIdle() { ! if (emulating) ! { ! m_stEmulator.emuMain(m_stEmulator.emuCount); ! } ! return true; } --- 943,947 ---- bool Window::bOnEmuIdle() { ! m_stEmulator.emuMain(m_stEmulator.emuCount); return true; } |