summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorTony Wasserka <neobrainx@gmail.com>2014-05-01 12:40:01 +0200
committerTony Wasserka <neobrainx@gmail.com>2014-05-01 12:40:01 +0200
commit557c3db4620f754ab3064599a9ed50f42579bb83 (patch)
tree18f1caa849257894cd5489b5a088319fbfd0a19a /Source/Core
parent95f097d79b37fef64752d40e3247da6f7f818932 (diff)
parentf254fdfd965c0d860e2e457de24fb4aa1b00a957 (diff)
Merge pull request #81 from degasus/skip_framelimit_hotkey
Add a hotkey for disabling the framelimit.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/AudioCommon/Mixer.cpp4
-rw-r--r--Source/Core/Core/ConfigManager.cpp1
-rw-r--r--Source/Core/Core/Core.cpp12
-rw-r--r--Source/Core/Core/Core.h3
-rw-r--r--Source/Core/Core/CoreParameter.h1
-rw-r--r--Source/Core/Core/HW/SystemTimers.cpp5
-rw-r--r--Source/Core/Core/Host.h1
-rw-r--r--Source/Core/DolphinWX/Frame.cpp17
-rw-r--r--Source/Core/DolphinWX/HotkeyDlg.cpp1
-rw-r--r--Source/Core/DolphinWX/Main.cpp19
-rw-r--r--Source/Core/DolphinWX/MainAndroid.cpp5
-rw-r--r--Source/Core/DolphinWX/MainNoGUI.cpp5
-rw-r--r--Source/Core/VideoCommon/VideoConfig.cpp2
13 files changed, 38 insertions, 38 deletions
diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp
index fa43baeb99..c1ff49dd03 100644
--- a/Source/Core/AudioCommon/Mixer.cpp
+++ b/Source/Core/AudioCommon/Mixer.cpp
@@ -7,7 +7,7 @@
#include "Common/Atomic.h"
#include "Common/CPUDetect.h"
#include "Core/ConfigManager.h"
-#include "Core/Host.h"
+#include "Core/Core.h"
#include "Core/HW/AudioInterface.h"
#include "Core/HW/VideoInterface.h"
@@ -124,7 +124,7 @@ void CMixer::PushSamples(const short *samples, unsigned int num_samples)
if (*PowerPC::GetStatePtr() != PowerPC::CPU_RUNNING || soundStream->IsMuted())
break;
// Shortcut key for Throttle Skipping
- if (Host_GetKeyState('\t'))
+ if (Core::GetIsFramelimiterTempDisabled())
break;
SLEEP(1);
soundStream->Update();
diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp
index 13f551f5ca..e5491fdae5 100644
--- a/Source/Core/Core/ConfigManager.cpp
+++ b/Source/Core/Core/ConfigManager.cpp
@@ -71,6 +71,7 @@ static const struct
{ "ToggleAspectRatio", 0, 0 /* wxMOD_NONE */ },
{ "ToggleEFBCopies", 0, 0 /* wxMOD_NONE */ },
{ "ToggleFog", 0, 0 /* wxMOD_NONE */ },
+ { "ToggleThrottle", 9 /* '\t' */, 0 /* wxMOD_NONE */ },
{ "IncreaseFrameLimit", 0, 0 /* wxMOD_NONE */ },
{ "DecreaseFrameLimit", 0, 0 /* wxMOD_NONE */ },
{ "LoadStateSlot1", 340 /* WXK_F1 */, 0 /* wxMOD_NONE */ },
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp
index a4d4a6fdda..87d6cdd9c0 100644
--- a/Source/Core/Core/Core.cpp
+++ b/Source/Core/Core/Core.cpp
@@ -90,7 +90,17 @@ static bool g_requestRefreshInfo = false;
static int g_pauseAndLockDepth = 0;
SCoreStartupParameter g_CoreStartupParameter;
-bool isTabPressed = false;
+static bool IsFramelimiterTempDisabled = false;
+
+bool GetIsFramelimiterTempDisabled()
+{
+ return IsFramelimiterTempDisabled;
+}
+
+void SetIsFramelimiterTempDisabled(bool disable)
+{
+ IsFramelimiterTempDisabled = disable;
+}
std::string GetStateFileName() { return g_stateFileName; }
void SetStateFileName(std::string val) { g_stateFileName = val; }
diff --git a/Source/Core/Core/Core.h b/Source/Core/Core/Core.h
index c841fac08e..862160daf0 100644
--- a/Source/Core/Core/Core.h
+++ b/Source/Core/Core/Core.h
@@ -24,7 +24,8 @@ namespace Core
// TODO: kill, use SConfig instead
extern SCoreStartupParameter g_CoreStartupParameter;
-extern bool isTabPressed;
+bool GetIsFramelimiterTempDisabled();
+void SetIsFramelimiterTempDisabled(bool disable);
void Callback_VideoCopiedToXFB(bool video_update);
diff --git a/Source/Core/Core/CoreParameter.h b/Source/Core/Core/CoreParameter.h
index fc8386b5bb..46ec3976fe 100644
--- a/Source/Core/Core/CoreParameter.h
+++ b/Source/Core/Core/CoreParameter.h
@@ -38,6 +38,7 @@ enum Hotkey
HK_TOGGLE_AR,
HK_TOGGLE_EFBCOPIES,
HK_TOGGLE_FOG,
+ HK_TOGGLE_THROTTLE,
HK_INCREASE_FRAME_LIMIT,
HK_DECREASE_FRAME_LIMIT,
diff --git a/Source/Core/Core/HW/SystemTimers.cpp b/Source/Core/Core/HW/SystemTimers.cpp
index 4e51ba8585..2e11422a91 100644
--- a/Source/Core/Core/HW/SystemTimers.cpp
+++ b/Source/Core/Core/HW/SystemTimers.cpp
@@ -62,9 +62,9 @@ IPC_HLE_PERIOD: For the Wiimote this is the call schedule:
#include "Common/Timer.h"
#include "Core/ConfigManager.h"
+#include "Core/Core.h"
#include "Core/CoreTiming.h"
#include "Core/DSPEmulator.h"
-#include "Core/Host.h"
#include "Core/PatchEngine.h"
#include "Core/HW/AudioInterface.h"
#include "Core/HW/DSP.h"
@@ -237,7 +237,8 @@ void ThrottleCallback(u64 last_time, int cyclesLate)
u32 time = Common::Timer::GetTimeMs();
int diff = (u32)last_time - time;
- bool frame_limiter = SConfig::GetInstance().m_Framelimit && SConfig::GetInstance().m_Framelimit != 2 && !Host_GetKeyState('\t');
+ const SConfig& config = SConfig::GetInstance();
+ bool frame_limiter = config.m_Framelimit && config.m_Framelimit != 2 && !Core::GetIsFramelimiterTempDisabled();
u32 next_event = GetTicksPerSecond()/1000;
if (SConfig::GetInstance().m_Framelimit > 2)
{
diff --git a/Source/Core/Core/Host.h b/Source/Core/Core/Host.h
index ffb638be5d..0f68338d25 100644
--- a/Source/Core/Core/Host.h
+++ b/Source/Core/Core/Host.h
@@ -25,7 +25,6 @@
bool Host_RendererHasFocus();
void Host_ConnectWiimote(int wm_idx, bool connect);
-bool Host_GetKeyState(int keycode);
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height);
void Host_Message(int Id);
void Host_NotifyMapLoaded();
diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp
index 87fb799616..26627d2340 100644
--- a/Source/Core/DolphinWX/Frame.cpp
+++ b/Source/Core/DolphinWX/Frame.cpp
@@ -940,6 +940,10 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
OSDChoice = 4;
g_Config.bDisableFog = !g_Config.bDisableFog;
}
+ else if (IsHotkey(event, HK_TOGGLE_THROTTLE))
+ {
+ Core::SetIsFramelimiterTempDisabled(true);
+ }
else if (IsHotkey(event, HK_INCREASE_FRAME_LIMIT))
{
if (++SConfig::GetInstance().m_Framelimit > 0x19)
@@ -1040,7 +1044,18 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
void CFrame::OnKeyUp(wxKeyEvent& event)
{
- event.Skip();
+ if(Core::GetState() != Core::CORE_UNINITIALIZED &&
+ (RendererHasFocus() || TASInputHasFocus()))
+ {
+ if (IsHotkey(event, HK_TOGGLE_THROTTLE))
+ {
+ Core::SetIsFramelimiterTempDisabled(false);
+ }
+ }
+ else
+ {
+ event.Skip();
+ }
}
void CFrame::OnMouse(wxMouseEvent& event)
diff --git a/Source/Core/DolphinWX/HotkeyDlg.cpp b/Source/Core/DolphinWX/HotkeyDlg.cpp
index 87f7f2a3bc..d990ac1f21 100644
--- a/Source/Core/DolphinWX/HotkeyDlg.cpp
+++ b/Source/Core/DolphinWX/HotkeyDlg.cpp
@@ -233,6 +233,7 @@ void HotkeyConfigDialog::CreateHotkeyGUIControls(void)
_("Toggle Aspect Ratio"),
_("Toggle EFB Copies"),
_("Toggle Fog"),
+ _("Toggle Frame limit"),
_("Increase Frame limit"),
_("Decrease Frame limit"),
diff --git a/Source/Core/DolphinWX/Main.cpp b/Source/Core/DolphinWX/Main.cpp
index 60574d9820..76f001b180 100644
--- a/Source/Core/DolphinWX/Main.cpp
+++ b/Source/Core/DolphinWX/Main.cpp
@@ -620,25 +620,6 @@ void Host_UpdateBreakPointView()
}
}
-bool Host_GetKeyState(int keycode)
-{
-#ifdef _WIN32
- return (0 != GetAsyncKeyState(keycode));
-#elif defined __WXGTK__
- std::unique_lock<std::recursive_mutex> lk(main_frame->keystate_lock, std::try_to_lock);
- if (!lk.owns_lock())
- return false;
-
- bool key_pressed;
- if (!wxIsMainThread()) wxMutexGuiEnter();
- key_pressed = wxGetKeyState(wxKeyCode(keycode));
- if (!wxIsMainThread()) wxMutexGuiLeave();
- return key_pressed;
-#else
- return wxGetKeyState(wxKeyCode(keycode));
-#endif
-}
-
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
{
main_frame->GetRenderWindowSize(x, y, width, height);
diff --git a/Source/Core/DolphinWX/MainAndroid.cpp b/Source/Core/DolphinWX/MainAndroid.cpp
index ab82e7def1..d103589ea5 100644
--- a/Source/Core/DolphinWX/MainAndroid.cpp
+++ b/Source/Core/DolphinWX/MainAndroid.cpp
@@ -85,11 +85,6 @@ void Host_UpdateMainFrame()
void Host_UpdateBreakPointView(){}
-bool Host_GetKeyState(int keycode)
-{
- return false;
-}
-
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
{
x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
diff --git a/Source/Core/DolphinWX/MainNoGUI.cpp b/Source/Core/DolphinWX/MainNoGUI.cpp
index cfd176e27a..76e7608e15 100644
--- a/Source/Core/DolphinWX/MainNoGUI.cpp
+++ b/Source/Core/DolphinWX/MainNoGUI.cpp
@@ -79,11 +79,6 @@ void Host_UpdateMainFrame()
void Host_UpdateBreakPointView(){}
-bool Host_GetKeyState(int keycode)
-{
- return false;
-}
-
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
{
x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
diff --git a/Source/Core/VideoCommon/VideoConfig.cpp b/Source/Core/VideoCommon/VideoConfig.cpp
index c12fe9b419..7adecfdebf 100644
--- a/Source/Core/VideoCommon/VideoConfig.cpp
+++ b/Source/Core/VideoCommon/VideoConfig.cpp
@@ -276,5 +276,5 @@ void VideoConfig::Save(const std::string& ini_file)
bool VideoConfig::IsVSync()
{
- return Core::isTabPressed ? false : bVSync;
+ return bVSync && !Core::GetIsFramelimiterTempDisabled();
}