diff --git a/TODO-SDL b/TODO-SDL index cdf06c03..2ab96421 100644 --- a/TODO-SDL +++ b/TODO-SDL @@ -29,7 +29,7 @@ OpenGL graphics | YES | YES Hot key config window | YES | YES | Palette config window | YES | YES | Multi-thread (GUI and emulation on separate threads) | YES | NO | -Emulation speed control via menu | NO | NO | +Emulation speed control via menu | YES | NO | Emulation speed control via hotkeys | YES | YES | Fullscreen functionality | YES | YES | AVI Record Functionality | NO | NO | diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index df38a55d..10238e44 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "../../fceu.h" #include "../../fds.h" @@ -175,6 +176,7 @@ void consoleWin_t::keyReleaseEvent(QKeyEvent *event) //--------------------------------------------------------------------------- void consoleWin_t::createMainMenu(void) { + QAction *act; QMenu *subMenu; QActionGroup *group; int useNativeMenuBar; @@ -479,6 +481,61 @@ void consoleWin_t::createMainMenu(void) subMenu->addAction(fdsLoadBiosAct); + emuMenu->addSeparator(); + + // Emulation -> Speed + subMenu = emuMenu->addMenu(tr("Speed")); + + // Emulation -> Speed -> Speed Up + act = new QAction(tr("Speed Up"), this); + act->setShortcut( QKeySequence(tr("="))); + act->setStatusTip(tr("Speed Up")); + connect(act, SIGNAL(triggered()), this, SLOT(emuSpeedUp(void)) ); + + subMenu->addAction(act); + + // Emulation -> Speed -> Slow Down + act = new QAction(tr("Slow Down"), this); + act->setShortcut( QKeySequence(tr("-"))); + act->setStatusTip(tr("Slow Down")); + connect(act, SIGNAL(triggered()), this, SLOT(emuSlowDown(void)) ); + + subMenu->addAction(act); + + subMenu->addSeparator(); + + // Emulation -> Speed -> Slowest Speed + act = new QAction(tr("Slowest"), this); + //act->setShortcut( QKeySequence(tr("-"))); + act->setStatusTip(tr("Slowest")); + connect(act, SIGNAL(triggered()), this, SLOT(emuSlowestSpd(void)) ); + + subMenu->addAction(act); + + // Emulation -> Speed -> Normal Speed + act = new QAction(tr("Normal"), this); + //act->setShortcut( QKeySequence(tr("-"))); + act->setStatusTip(tr("Normal")); + connect(act, SIGNAL(triggered()), this, SLOT(emuNormalSpd(void)) ); + + subMenu->addAction(act); + + // Emulation -> Speed -> Fastest Speed + act = new QAction(tr("Turbo"), this); + //act->setShortcut( QKeySequence(tr("-"))); + act->setStatusTip(tr("Turbo (Fastest)")); + connect(act, SIGNAL(triggered()), this, SLOT(emuFastestSpd(void)) ); + + subMenu->addAction(act); + + // Emulation -> Speed -> Custom Speed + act = new QAction(tr("Custom"), this); + //act->setShortcut( QKeySequence(tr("-"))); + act->setStatusTip(tr("Custom")); + connect(act, SIGNAL(triggered()), this, SLOT(emuCustomSpd(void)) ); + + subMenu->addAction(act); + //----------------------------------------------------------------------- // Tools toolsMenu = menuBar()->addMenu(tr("Tools")); @@ -1322,6 +1379,56 @@ void consoleWin_t::fdsLoadBiosFile(void) return; } +void consoleWin_t::emuSpeedUp(void) +{ + IncreaseEmulationSpeed(); +} + +void consoleWin_t::emuSlowDown(void) +{ + DecreaseEmulationSpeed(); +} + +void consoleWin_t::emuSlowestSpd(void) +{ + FCEUD_SetEmulationSpeed( EMUSPEED_SLOWEST ); +} + +void consoleWin_t::emuNormalSpd(void) +{ + FCEUD_SetEmulationSpeed( EMUSPEED_NORMAL ); +} + +void consoleWin_t::emuFastestSpd(void) +{ + FCEUD_SetEmulationSpeed( EMUSPEED_FASTEST ); +} + +void consoleWin_t::emuCustomSpd(void) +{ + int ret; + QInputDialog dialog(this); + + dialog.setWindowTitle( tr("Emulation Speed") ); + dialog.setLabelText( tr("Enter a percentage from 1 to 1000.") ); + dialog.setOkButtonText( tr("Ok") ); + dialog.setInputMode( QInputDialog::IntInput ); + dialog.setIntRange( 1, 1000 ); + dialog.setIntValue( 100 ); + + dialog.show(); + ret = dialog.exec(); + + if ( QDialog::Accepted == ret ) + { + int spdPercent; + + spdPercent = dialog.intValue(); + + CustomEmulationSpeed( spdPercent ); + } +} + void consoleWin_t::openMovie(void) { int ret, useNativeFileDialogVal; diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index f91f34dd..95e6ed6b 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -166,6 +166,12 @@ class consoleWin_t : public QMainWindow void fdsSwitchDisk(void); void fdsEjectDisk(void); void fdsLoadBiosFile(void); + void emuSpeedUp(void); + void emuSlowDown(void); + void emuSlowestSpd(void); + void emuNormalSpd(void); + void emuFastestSpd(void); + void emuCustomSpd(void); void openPPUViewer(void); void openNTViewer(void); void openCheats(void); diff --git a/src/drivers/Qt/input.h b/src/drivers/Qt/input.h index 07dc1d04..4a785899 100644 --- a/src/drivers/Qt/input.h +++ b/src/drivers/Qt/input.h @@ -53,6 +53,7 @@ extern bool replaceP2StartWithMicrophone; void IncreaseEmulationSpeed(void); void DecreaseEmulationSpeed(void); +int CustomEmulationSpeed(int spdPercent); int DTestButtonJoy(ButtConfig *bc); diff --git a/src/drivers/Qt/sdl-throttle.cpp b/src/drivers/Qt/sdl-throttle.cpp index 1fba8173..11666f94 100644 --- a/src/drivers/Qt/sdl-throttle.cpp +++ b/src/drivers/Qt/sdl-throttle.cpp @@ -134,6 +134,31 @@ void DecreaseEmulationSpeed(void) FCEU_DispMessage("Emulation speed %.1f%%",0, g_fpsScale*100.0); } +int CustomEmulationSpeed(int spdPercent) +{ + if ( spdPercent < 1 ) + { + return -1; + } + g_fpsScale = ((double)spdPercent) / 100.0f; + + if (g_fpsScale < Slowest) + { + g_fpsScale = Slowest; + } + else if (g_fpsScale > Fastest) + { + g_fpsScale = Fastest; + } + + RefreshThrottleFPS(); + + FCEU_DispMessage("Emulation speed %.1f%%",0, g_fpsScale*100.0); + + return 0; +} + + /** * Set the emulation speed throttling to a specific value. */