diff options
| author | Fog <christhecoolist@gmail.com> | 2015-07-05 12:20:42 -0400 |
|---|---|---|
| committer | Fog <christhecoolist@gmail.com> | 2015-10-04 12:14:36 -0400 |
| commit | 471c8355465524bd2b893f7be3db735f3c77b878 (patch) | |
| tree | 66df794639868dbf293daede14cdbf23ff02fc59 /Source/Core/DolphinWX/Frame.cpp | |
| parent | c70f3f4b451948e62ca5006b2977b493daa3616e (diff) | |
Add Frame Advance Hold Hotkey Functionality
Diffstat (limited to 'Source/Core/DolphinWX/Frame.cpp')
| -rw-r--r-- | Source/Core/DolphinWX/Frame.cpp | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 759c2bdc6e..bb856cefae 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -1269,7 +1269,6 @@ void CFrame::ParseHotkeys() case HK_CHANGE_DISC: case HK_REFRESH_LIST: case HK_RESET: - case HK_FRAME_ADVANCE: case HK_START_RECORDING: case HK_PLAY_RECORDING: case HK_EXPORT_RECORDING: @@ -1311,6 +1310,8 @@ void CFrame::ParseHotkeys() // Pause and Unpause if (IsHotkey(HK_PLAY_PAUSE)) DoPause(); + // Frame advance + HandleFrameSkipHotkeys(); // Stop if (IsHotkey(HK_STOP)) DoStop(); @@ -1465,3 +1466,61 @@ void CFrame::ParseHotkeys() if (IsHotkey(HK_UNDO_SAVE_STATE)) State::UndoSaveState(); } + +void CFrame::HandleFrameSkipHotkeys() +{ + static const int MAX_FRAME_SKIP_DELAY = 60; + static int frameStepCount = 0; + static const int FRAME_STEP_DELAY = 30; + static int holdFrameStepDelay = 1; + static int holdFrameStepDelayCount = 0; + static bool holdFrameStep = false; + + if (IsHotkey(HK_FRAME_ADVANCE_DECREASE_SPEED)) + { + ++holdFrameStepDelay; + if (holdFrameStepDelay > MAX_FRAME_SKIP_DELAY) + holdFrameStepDelay = MAX_FRAME_SKIP_DELAY; + } + else if (IsHotkey(HK_FRAME_ADVANCE_INCREASE_SPEED)) + { + --holdFrameStepDelay; + if (holdFrameStepDelay < 0) + holdFrameStepDelay = 0; + } + else if (IsHotkey(HK_FRAME_ADVANCE_RESET_SPEED)) + { + holdFrameStepDelay = 1; + } + else if (IsHotkey(HK_FRAME_ADVANCE, true)) + { + if (holdFrameStepDelayCount < holdFrameStepDelay && holdFrameStep) + ++holdFrameStepDelayCount; + + if ((frameStepCount == 0 || frameStepCount == FRAME_STEP_DELAY) && !holdFrameStep) + { + wxCommandEvent evt; + evt.SetId(IDM_FRAMESTEP); + CFrame::OnFrameStep(evt); + if (holdFrameStepDelay > 0 && frameStepCount == 0) + holdFrameStep = true; + } + + if (frameStepCount < FRAME_STEP_DELAY) + ++frameStepCount; + + if (frameStepCount == FRAME_STEP_DELAY && holdFrameStep && holdFrameStepDelayCount >= holdFrameStepDelay) + { + holdFrameStep = false; + holdFrameStepDelayCount = 0; + } + } + else if (frameStepCount > 0) + { + // Reset values of frame advance to default + frameStepCount = 0; + holdFrameStep = false; + holdFrameStepDelayCount = 0; + } +} + |
