diff options
| author | Scott Mansell <phiren@gmail.com> | 2015-10-28 15:31:03 +1300 |
|---|---|---|
| committer | Scott Mansell <phiren@gmail.com> | 2015-10-28 15:31:03 +1300 |
| commit | 44a40642f36ade59722191d1b94c30efd890cfe6 (patch) | |
| tree | f402f4a69d6636edd5ef00d3fe168d9f15940e72 /Source/Core/DolphinWX/Frame.cpp | |
| parent | bd20dd39620ca2903ea3ccb71af3a14cfe3c7db8 (diff) | |
| parent | 471c8355465524bd2b893f7be3db735f3c77b878 (diff) | |
Merge pull request #2704 from RisingFog/frameadvancehold
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 fef41bbce2..75a9de022e 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -1291,7 +1291,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: @@ -1333,6 +1332,8 @@ void CFrame::ParseHotkeys() // Pause and Unpause if (IsHotkey(HK_PLAY_PAUSE)) DoPause(); + // Frame advance + HandleFrameSkipHotkeys(); // Stop if (IsHotkey(HK_STOP)) DoStop(); @@ -1531,3 +1532,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; + } +} + |
